From aa0b76e014163b07d1a705a09720e54334cf0fbd Mon Sep 17 00:00:00 2001 From: Andy Ragusa Date: Thu, 1 Jun 2023 11:29:46 -0700 Subject: [PATCH 1/2] Scan ISO file tree when there is a joliet tree Previously were only scanning the joliet tree when we found it, but files in the ISO tree need to be scanned as well. --- libclamav/iso9660.c | 148 +++++++++++++++++++++++++++++--------------- 1 file changed, 97 insertions(+), 51 deletions(-) diff --git a/libclamav/iso9660.c b/libclamav/iso9660.c index 66fd2fcdbe..8c3b060f1e 100644 --- a/libclamav/iso9660.c +++ b/libclamav/iso9660.c @@ -228,25 +228,36 @@ cl_error_t cli_scaniso(cli_ctx *ctx, size_t offset) const uint8_t *privol, *next; iso9660_t iso; int i; + cl_error_t status = CL_SUCCESS; + cl_error_t ret = CL_SUCCESS; + uint32_t nextJoliet = 0; - if (offset < 32768) - return CL_SUCCESS; /* Need 16 sectors at least 2048 bytes long */ + if (offset < 32768) { + /* Need 16 sectors at least 2048 bytes long */ + goto done; + } privol = fmap_need_off(ctx->fmap, offset, 2448 + 6); - if (!privol) - return CL_SUCCESS; + if (!privol) { + goto done; + } next = (uint8_t *)cli_memstr((char *)privol + 2049, 2448 + 6 - 2049, "CD001", 5); - if (!next) - return CL_SUCCESS; /* Find next volume descriptor */ + if (!next) { + /* Find next volume descriptor */ + goto done; + } iso.sectsz = (next - privol) - 1; - if (iso.sectsz * 16 > offset) - return CL_SUCCESS; /* Need room for 16 system sectors */ + if (iso.sectsz * 16 > offset) { + /* Need room for 16 system sectors */ + goto done; + } iso.blocksz = cli_readint32(privol + 128) & 0xffff; if (iso.blocksz != 512 && iso.blocksz != 1024 && iso.blocksz != 2048) - return CL_SUCCESS; /* Likely not a cdrom image */ + /* Likely not a cdrom image */ + goto done; iso.base_offset = offset - iso.sectsz * 16; iso.joliet = 0; @@ -283,59 +294,94 @@ cl_error_t cli_scaniso(cli_ctx *ctx, size_t offset) /* NOTE: freeing sector now. it is still safe to access as we don't alloc anymore */ fmap_unneed_off(ctx->fmap, offset, 2448); - if (iso.joliet) - privol = next; + if (!iso.joliet) { + next = NULL; + } - cli_dbgmsg("in cli_scaniso\n"); - if (cli_debug_flag) { - cli_dbgmsg("cli_scaniso: Raw sector size: %u\n", iso.sectsz); - cli_dbgmsg("cli_scaniso: Block size: %u\n", iso.blocksz); + nextJoliet = iso.joliet; + iso.joliet = 0; - cli_dbgmsg("cli_scaniso: Volume descriptor version: %u\n", privol[6]); + do { + cli_dbgmsg("in cli_scaniso\n"); + if (cli_debug_flag) { + cli_dbgmsg("cli_scaniso: Raw sector size: %u\n", iso.sectsz); + cli_dbgmsg("cli_scaniso: Block size: %u\n", iso.blocksz); + + cli_dbgmsg("cli_scaniso: Volume descriptor version: %u\n", privol[6]); #define ISOSTRING(src, len) iso_string(&iso, (src), (len)) - cli_dbgmsg("cli_scaniso: System: %s\n", ISOSTRING(privol + 8, 32)); - cli_dbgmsg("cli_scaniso: Volume: %s\n", ISOSTRING(privol + 40, 32)); + cli_dbgmsg("cli_scaniso: System: %s\n", ISOSTRING(privol + 8, 32)); + cli_dbgmsg("cli_scaniso: Volume: %s\n", ISOSTRING(privol + 40, 32)); - cli_dbgmsg("cli_scaniso: Volume space size: 0x%x blocks\n", cli_readint32(&privol[80])); - cli_dbgmsg("cli_scaniso: Volume %u of %u\n", cli_readint32(privol + 124) & 0xffff, cli_readint32(privol + 120) & 0xffff); + cli_dbgmsg("cli_scaniso: Volume space size: 0x%x blocks\n", cli_readint32(&privol[80])); + cli_dbgmsg("cli_scaniso: Volume %u of %u\n", cli_readint32(privol + 124) & 0xffff, cli_readint32(privol + 120) & 0xffff); - cli_dbgmsg("cli_scaniso: Volume Set: %s\n", ISOSTRING(privol + 190, 128)); - cli_dbgmsg("cli_scaniso: Publisher: %s\n", ISOSTRING(privol + 318, 128)); - cli_dbgmsg("cli_scaniso: Data Preparer: %s\n", ISOSTRING(privol + 446, 128)); - cli_dbgmsg("cli_scaniso: Application: %s\n", ISOSTRING(privol + 574, 128)); + cli_dbgmsg("cli_scaniso: Volume Set: %s\n", ISOSTRING(privol + 190, 128)); + cli_dbgmsg("cli_scaniso: Publisher: %s\n", ISOSTRING(privol + 318, 128)); + cli_dbgmsg("cli_scaniso: Data Preparer: %s\n", ISOSTRING(privol + 446, 128)); + cli_dbgmsg("cli_scaniso: Application: %s\n", ISOSTRING(privol + 574, 128)); #define ISOTIME(s, n) cli_dbgmsg("cli_scaniso: "s \ ": %c%c%c%c-%c%c-%c%c %c%c:%c%c:%c%c\n", \ privol[n], privol[n + 1], privol[n + 2], privol[n + 3], privol[n + 4], privol[n + 5], privol[n + 6], privol[n + 7], privol[n + 8], privol[n + 9], privol[n + 10], privol[n + 11], privol[n + 12], privol[n + 13]) - ISOTIME("Volume creation time", 813); - ISOTIME("Volume modification time", 830); - ISOTIME("Volume expiration time", 847); - ISOTIME("Volume effective time", 864); - - cli_dbgmsg("cli_scaniso: Path table size: 0x%x\n", cli_readint32(privol + 132) & 0xffff); - cli_dbgmsg("cli_scaniso: LSB Path Table: 0x%x\n", cli_readint32(privol + 140)); - cli_dbgmsg("cli_scaniso: Opt LSB Path Table: 0x%x\n", cli_readint32(privol + 144)); - cli_dbgmsg("cli_scaniso: MSB Path Table: 0x%x\n", cbswap32(cli_readint32(privol + 148))); - cli_dbgmsg("cli_scaniso: Opt MSB Path Table: 0x%x\n", cbswap32(cli_readint32(privol + 152))); - cli_dbgmsg("cli_scaniso: File Structure Version: %u\n", privol[881]); - - if (iso.joliet) - cli_dbgmsg("cli_scaniso: Joliet level %u\n", iso.joliet); - } + ISOTIME("Volume creation time", 813); + ISOTIME("Volume modification time", 830); + ISOTIME("Volume expiration time", 847); + ISOTIME("Volume effective time", 864); + + cli_dbgmsg("cli_scaniso: Path table size: 0x%x\n", cli_readint32(privol + 132) & 0xffff); + cli_dbgmsg("cli_scaniso: LSB Path Table: 0x%x\n", cli_readint32(privol + 140)); + cli_dbgmsg("cli_scaniso: Opt LSB Path Table: 0x%x\n", cli_readint32(privol + 144)); + cli_dbgmsg("cli_scaniso: MSB Path Table: 0x%x\n", cbswap32(cli_readint32(privol + 148))); + cli_dbgmsg("cli_scaniso: Opt MSB Path Table: 0x%x\n", cbswap32(cli_readint32(privol + 152))); + cli_dbgmsg("cli_scaniso: File Structure Version: %u\n", privol[881]); + + if (iso.joliet) + cli_dbgmsg("cli_scaniso: Joliet level %u\n", iso.joliet); + } - if (privol[156 + 26] || privol[156 + 27]) { - cli_dbgmsg("cli_scaniso: Interleaved root directory is not supported\n"); - return CL_SUCCESS; + if (privol[156 + 26] || privol[156 + 27]) { + cli_dbgmsg("cli_scaniso: Interleaved root directory is not supported\n"); + status = CL_SUCCESS; + goto done; + } + + iso.ctx = ctx; + ret = cli_hashset_init(&iso.dir_blocks, 1024, 80); + if (ret != CL_SUCCESS) { + status = ret; + goto done; + } + + ret = iso_parse_dir(&iso, cli_readint32(privol + 156 + 2) + privol[156 + 1], cli_readint32(privol + 156 + 10)); + cli_hashset_destroy(&iso.dir_blocks); + switch (ret) { + case CL_CLEAN: + /* fallthrough */ + case CL_EFORMAT: + /* fallthrough */ + case CL_EPARSE: + break; + default: + /*Recoverable errors are above, anything else we need to return.*/ + status = ret; + goto done; + } + if (ret > status) { + status = ret; + } + + privol = next; + next = NULL; + iso.joliet = nextJoliet; + + } while (privol); + +done: + + if (status == CL_BREAK) { + status = CL_SUCCESS; } - iso.ctx = ctx; - i = cli_hashset_init(&iso.dir_blocks, 1024, 80); - if (i != CL_SUCCESS) - return i; - i = iso_parse_dir(&iso, cli_readint32(privol + 156 + 2) + privol[156 + 1], cli_readint32(privol + 156 + 10)); - cli_hashset_destroy(&iso.dir_blocks); - if (i == CL_BREAK) - return CL_SUCCESS; - return i; + return status; } From 980f893e772bf2825171fd4141d35df7ca2b13da Mon Sep 17 00:00:00 2001 From: Micah Snyder Date: Tue, 1 Aug 2023 21:58:12 -0700 Subject: [PATCH 2/2] Test: Add test to verify ISO properly extracted w/ empty Joliet tree Test files created with pycdlib and contain the ClamAV logo.png file. --- unit_tests/clamscan/assorted_test.py | 26 ++++++++++++++++++ .../other_scanfiles/iso_no_joliet.logo.iso | Bin 0 -> 90112 bytes .../input/other_scanfiles/iso_normal.logo.iso | Bin 0 -> 88064 bytes unit_tests/input/other_sigs/logo.hsb | 1 + 4 files changed, 27 insertions(+) create mode 100755 unit_tests/input/other_scanfiles/iso_no_joliet.logo.iso create mode 100755 unit_tests/input/other_scanfiles/iso_normal.logo.iso create mode 100755 unit_tests/input/other_sigs/logo.hsb diff --git a/unit_tests/clamscan/assorted_test.py b/unit_tests/clamscan/assorted_test.py index c25a6b9e47..7cd94887f1 100644 --- a/unit_tests/clamscan/assorted_test.py +++ b/unit_tests/clamscan/assorted_test.py @@ -212,3 +212,29 @@ def test_pe_cert_trust_archive(self): unexpected_results = ['OK'] self.verify_output(output.out, expected=expected_results, unexpected=unexpected_results) + + def test_iso_missing_joliet(self): + self.step_name('Test that we correctly extract files from an ISO even if the joliet file path is empty.') + + test_path = TC.path_source / 'unit_tests' / 'input' / 'other_scanfiles' + sig_path = TC.path_source / 'unit_tests' / 'input' / 'other_sigs' / 'logo.hsb' + + command = '{valgrind} {valgrind_args} {clamscan} \ + -d {sig_path} \ + --allmatch {testfile1} {testfile2}'.format( + valgrind=TC.valgrind, valgrind_args=TC.valgrind_args, clamscan=TC.clamscan, + sig_path=sig_path, + testfile1=test_path / 'iso_normal.logo.iso', + testfile2=test_path / 'iso_no_joliet.logo.iso', + ) + output = self.execute_command(command) + + assert output.ec == 1 + + expected_results = [ + 'iso_normal.logo.iso: logo.png.UNOFFICIAL FOUND', + 'iso_no_joliet.logo.iso: logo.png.UNOFFICIAL FOUND', + ] + unexpected_results = ['OK'] + + self.verify_output(output.out, expected=expected_results, unexpected=unexpected_results) diff --git a/unit_tests/input/other_scanfiles/iso_no_joliet.logo.iso b/unit_tests/input/other_scanfiles/iso_no_joliet.logo.iso new file mode 100755 index 0000000000000000000000000000000000000000..233bf19aad125406924269f9379822bd46224d73 GIT binary patch literal 90112 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 Y%tQXW|KIC>Bk;cw_}>Wp{~dw<11*xJp8x;= literal 0 HcmV?d00001 diff --git a/unit_tests/input/other_scanfiles/iso_normal.logo.iso b/unit_tests/input/other_scanfiles/iso_normal.logo.iso new file mode 100755 index 0000000000000000000000000000000000000000..8de42978a7105ecaac5f8628c2cae9adff2df92e GIT binary patch literal 88064 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 literal 0 HcmV?d00001 diff --git a/unit_tests/input/other_sigs/logo.hsb b/unit_tests/input/other_sigs/logo.hsb new file mode 100755 index 0000000000..0f30586bdb --- /dev/null +++ b/unit_tests/input/other_sigs/logo.hsb @@ -0,0 +1 @@ +f083e9c704165003f8c065964e4ccb47da48bbad8a80521d571cbf0f1d4762c6:25476:logo.png