Commit graph

39 commits

Author SHA1 Message Date
Valerie Snyder
aa7b7e9421
Swap clean cache from MD5 to SHA2-256
Change the clean-cache to use SHA2-256 instead of MD5.
Note that all references are changed to specify "SHA2-256" now instead
of "SHA256", for clarity. But there is no plan to add support for SHA3
algorithms at this time.

Significant code cleanup. E.g.:
- Implemented goto-done error handling.
- Used `uint8_t *` instead of `unsigned char *`.
- Use `bool` for boolean checks, rather than `int.
- Used `#defines` instead of magic numbers.
- Removed duplicate `#defines` for things like hash length.

Add new option to calculate and record additional hash types when the
"generate metadata JSON" feature is enabled:
- libclamav option: `CL_SCAN_GENERAL_STORE_EXTRA_HASHES`
- clamscan option: `--json-store-extra-hashes` (default off)
- clamd.conf option: `JsonStoreExtraHashes` (default 'no')

Renamed the sigtool option `--sha256` to `--sha2-256`.
The original option is still functional, but is deprecated.

For the "generate metadata JSON" feature, the file hash is now stored as
"sha2-256" instead of "FileMD5". If you enable the "extra hashes" option,
then it will also record "md5" and "sha1".

Deprecate and disable the internal "SHA collect" feature.
This option had been hidden behind C #ifdef checks for an option that
wasn't exposed through CMake, so it was basically unavailable anyways.

Changes to calculate file hashes when they're needed and no sooner.

For the FP feature in the matcher module, I have mimiced the
optimization in the FMAP scan routine which makes it so that it can
calculate multiple hashes in a single pass of the file.

The `HandlerType` feature stores a hash of the file in the scan ctx to
prevent retyping the exact same data more than once.
I removed that hash field and replaced it with an attribute flag that is
applied to the new recursion stack layer when retyping a file.
This also closes a minor bug that would prevent retyping a file with an
all-zero hash. :)

The work upgrading cache.c to support SHA2-256 sized hashes thanks to:
https://github.com/m-sola

CLAM-255
CLAM-1858
CLAM-1859
CLAM-1860
2025-08-14 21:23:30 -04:00
Val Snyder
7ff29b8c37
Bump copyright dates for 2025 2025-02-14 10:24:30 -05:00
Micah Snyder
b8795fde95
Fix CVD dsig verification when hash starts with zeros
Occasionally the MD5 hash for RSA-based digital signature
verification begins with zeros. A bug in how we convert the RSA
decoded plain text from a big number back to a hex string causes it
to write the number to the far left of the plain text buffer.
If the number is smaller than a hash, then zero-padding ends up on
the right when it should've been on the left.

Additional fix: BN_bn2bin() will write zero bytes if the bignum is 0.
So there is no point "error checking" the BN_bn2bin() call.
Thanks to Tom Judge for noticing these shenanigans.
Ref: https://github.com/openssl/openssl/issues/2101

Side note: BN_num_bytes() will also return 0 if the bignum is 0,
which is fine.
2024-12-04 09:46:31 -05:00
Micah Snyder
902623972d Remove max-allocation limits where not required
The cli_max_malloc, cli_max_calloc, and cli_max_realloc functions
provide a way to protect against allocating too much memory
when the size of the allocation is derived from the untrusted input.
Specifically, we worry about values in the file being scanned being
manipulated to exhaust the RAM and crash the application.

There is no need to check the limits if the size of the allocation
is fixed, or if the size of the allocation is necessary for signature
loading, or the general operation of the applications.
E.g. checking the max-allocation limit for the size of a hash, or
for the size of the scan recursion stack, is a complete waste of
time.

Although we significantly increased the max-allocation limit in
a recent release, it is best not to check an allocation if the
allocation will be safe. It would be a waste of time.

I am also hopeful that if we can reduce the number allocations
that require a limit-check to those that require it for the safe
scan of a file, then eventually we can store the limit in the scan-
context, and make it configurable.
2024-03-15 13:18:47 -04:00
Micah Snyder
8e04c25fec Rename clamav memory allocation functions
We have some special functions to wrap malloc, calloc, and realloc to
make sure we don't allocate more than some limit, similar to the
max-filesize and max-scansize limits. Our wrappers are really only
needed when allocating memory for scans based on untrusted user input,
where a scan file could have bytes that claim you need to allocate
some ridiculous amount of memory. Right now they're named:
- cli_malloc
- cli_calloc
- cli_realloc
- cli_realloc2

... and these names do not convey their purpose

This commit renames them to:
- cli_max_malloc
- cli_max_calloc
- cli_max_realloc
- cli_max_realloc2

The realloc ones also have an additional feature in that they will not
free your pointer if you try to realloc to 0 bytes. Freeing the memory
is undefined by the C spec, and only done with some realloc
implementations, so this stabilizes on the behavior of not doing that,
which should prevent accidental double-free's.

So for the case where you may want to realloc and do not need to have a
maximum, this commit adds the following functions:
- cli_safer_realloc
- cli_safer_realloc2

These are used for the MPOOL_REALLOC and MPOOL_REALLOC2 macros when
MPOOL is disabled (e.g. because mmap-support is not found), so as to
match the behavior in the mpool_realloc/2 functions that do not make use
of the allocation-limit.
2024-03-15 13:18:47 -04:00
Micah Snyder
9cb28e51e6 Bump copyright dates for 2024 2024-01-22 11:27:17 -05:00
Micah Snyder
0ceaf71a8c Coverity-405734: Add missing variable initializer 2023-04-13 00:11:34 -07:00
Micah Snyder
689d81ccca Coverity-405735: Add missing 'goto done;' on error 2023-04-13 00:11:34 -07:00
Sebastian Andrzej Siewior
12f4d18ce0 libclamav: Use OpenSSL' BN instead tomfastmath.
Use OpenSSL's big number/ multiprecision integer arithmetics
functionality to replace tomfastmath.

This is a first shot at doing just this. Further improvement could be
use more RSA-signature verification from OpenSSL in crtmgr_rsa_verify()
and less self parsing.
_padding_check_PKCS1_type_1() has been borrowed from OpenSSL to make
further replacments easier.

Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
2023-03-29 15:10:25 -07:00
Micah Snyder
6eebecc303 Bump copyright for 2023 2023-02-12 11:20:22 -08:00
Micah Snyder
89b72cb002
Sigtool: Add --fuzzy-img option to generate image fuzzy hash
Add `sigtool --fuzzy-img` option to generate image fuzzy hash.

Also fix assorted warnings, mostly ensuring enough buffer space so format
strings aren't truncated.

For the dsig change: the returned string is allocated and is not const.
The caller will have to free it.
2022-03-24 16:11:50 -07:00
ihsinme
0f3c2ef6d5
sigtool, libfreshclam: Fix benign 1-byte stack buffer overflow write
Fix two locations where the stack-allocated arrays lack space for a null-
terminating byte and could overwrite the array in:
- dsig.c
- sigtool.c

The ClamAV team verified that these overflows are not a security issue.
2022-03-01 15:34:05 -08:00
Micah Snyder
375ecf678c Update vendored TomsFastMath code to 0.13.1
Update the vendored TomsFastMath (TFM) library to v0.13.1.

Resolves: https://bugzilla.clamav.net/show_bug.cgi?id=11992

I removed compatibility macro's from when libTomMath was used.
This required removing a bunch of faux-error handling because
the fast-math equivalent functions return void, and cannot fail.

The previous version used had named the header "bignum_fast.h"
instead of "tfm.h" and had customizations in that header to enable
TFM_CHECK all the time, and also TFM_NO_ASM if __GNUC__ not defined
or if the system isn't 64bit architecture. This update uses tfm.h
as-is, and has CMake define TFM_CHECK and TFM_NO_ASM as needed.

I've kept bignum.h as an interface to including tfm.h so that in
the future we can more easily add support for system-installed
TomsFastMath instead of the vendored one, taking inspiration from
Debian's patch to support system-TomsFastMath.

See: https://salsa.debian.org/clamav-team/clamav/-/blob/unstable/debian/patches/add-support-for-system-tomsfastmath.patch
2022-02-10 12:54:23 -07:00
John Humlick
d8f06806e4 Migrate script2cdiff from sigtool.c to cdiff.rs
getdsig was also moved from sigtool.c to dsig.c, and renamed to cli_getdsig
2022-01-10 12:18:33 -07:00
micasnyd
140c88aa4e Bump copyright for 2022
Includes minor format corrections.
2022-01-09 14:23:25 -07:00
Micah Snyder (micasnyd)
b9ca6ea103 Update copyright dates for 2021
Also fixes up clang-format.
2021-03-19 15:12:26 -07:00
Micah Snyder
206dbaefe8 Update copyright dates for 2020 2020-01-03 15:44:07 -05:00
Micah Snyder
52cddcbcfd Updating and cleaning up copyright notices. 2019-10-02 16:08:18 -04:00
Micah Snyder
72fd33c8b2 clang-format'd using new .clang-format rules. 2019-10-02 16:08:16 -04:00
Micah Snyder
6289eda8e0 Eliminating AUTHORS file, and moving acknowledgements for various source code contributions to the file comment blocks for the individual files, as appropriate. 2018-03-06 17:44:05 -05:00
Mickey Sola
46a35abe56 mass update of copyright headers 2015-09-17 13:41:26 -04:00
Shawn Webb
60d8d2c352 Move all the crypto API to clamav.h 2014-07-01 19:38:01 -04:00
Shawn Webb
da6e06dd68 Provide further abstractions to the OpenSSL integration work 2014-02-28 12:12:30 -05:00
Shawn Webb
f077c6174f Fix some race conditions. Fix some memory leaks. 2014-02-13 13:05:50 -05:00
Shawn Webb
a1cbd793f3 Fix all memory leaks introduce by OpenSSL backport. 2014-02-12 17:42:48 -05:00
Shawn Webb
7fb5036fb2 Make Valgrind happy. Rely less on EVP_MD_CTX_create. 2014-02-08 01:42:41 -05:00
Shawn Webb
b2e7c931d0 Use OpenSSL for hashing. 2014-02-08 00:31:12 -05:00
Tomasz Kojm
bb1e844cc2 fix some warnings 2010-01-27 16:06:12 +01:00
Tomasz Kojm
0c234f5ffd CL_DB_CVDNOTMP is now the only way to load .cvd/.cld files; prepare
for .info signing
2010-01-20 15:02:13 +01:00
Tomasz Kojm
f44aa2da8d fix cli_ndecode bb#1797 2010-01-15 16:26:39 +01:00
Tomasz Kojm
871177cdd9 return codes cleanup (bb#1159)
git-svn: trunk@4749
2009-02-12 13:53:23 +00:00
Tomasz Kojm
47d40feb7a libclamav: use LibTomMath by Tom St Denis instead of libgmp for multiple precision integer arithmetic (bb#1366)
git-svn: trunk@4650
2009-01-26 19:47:02 +00:00
Tomasz Kojm
2023340a41 update copyrights and stick more files to GPLv2; move and add more credits to the AUTHORS file; add COPYING.BSD
git-svn: trunk@3749
2008-04-02 15:24:51 +00:00
Tomasz Kojm
1cdb6cfbac s/HAVE_GMP/HAVE_LIBGMP
git-svn: trunk@3567
2008-01-31 12:16:31 +00:00
Török Edvin
80cf63099c add support for version scripts when using Sun's ld on Solaris.
use $GREP to grep binary files, needed for autoit to build on Solaris.
add support for both GNU and Sun ld version scripts.
add version script maps to libclamunrar, libclamunrar_iface. Enumerate all symbols, Sun's ld doesn't support cl_* (only *).
cli_decodesig needs a dummy definition on Solaris.


git-svn: trunk@3474
2007-12-31 12:46:26 +00:00
Tomasz Kojm
aae7da9390 fix integer wrap introduced in r3305 (bb#688)
git-svn: trunk@3306
2007-10-19 01:37:34 +00:00
Tomasz Kojm
d1c685b881 move RSASSA-PSS code to shared/cdiff.c
git-svn: trunk@3305
2007-10-18 19:49:28 +00:00
Tomasz Kojm
bb34cb31fe update some copyrights and stick to GPL v2
git-svn: trunk@3003
2007-03-31 20:31:04 +00:00
Sven Strickroth
a99111f050 remove old CVS-stuff and make the repository look more like SVN
git-svn: trunk@2755
2007-02-17 19:02:20 +00:00
Renamed from clamav-devel/libclamav/dsig.c (Browse further)