rar support is broken
Philipp Gesang
philipp.gesang at intra2net.com
Thu Nov 23 10:48:17 CET 2017
Hi,
-<| Quoting Philipp Gesang <philipp.gesang at intra2net.com>, on Wednesday, 2017-11-22 01:29:33 PM |>-
> -<| Quoting Dmitry Melekhov <dm at belkam.com>, on Wednesday, 2017-11-22 04:09:47 PM |>-
> > 22.11.2017 14:49, Dmitry Melekhov пишет:
> > > I run ubuntu 16.04 server with amavisd-new 2.10.1, but looks like 2.11.0
> > > has the same code.*
> > > *
> > >
> > > Today I found that amavisd-new can't check attachments using rar or
> > > unrar-nonfree.
> > >
> > > If file has only latin characters then message arrives UNCHECKED,
> > > if it has cyrillic in utf-8 then rar or unrar exits with exit code and
> > > message passes without any warnings.
>
> This sounds interesting. Would it be possible to send me a file
> like this off-list for testing?
thanks to Dmitry’s sample we were able to cover another corner
case in the unrar handler.
Besides malware, the archive contains filenames encoded in UTF-8
that unrar extracts fine in a UTF8-locale but not in the C
locale. Amavisd ignores the failure during extraction because the
listing succeeded earlier which it does under any locale.
See attached patch.
Best,
Philipp
/tmp/malware # LC_ALL=en_US.UTF-8 unrar x falspositive.rar
UNRAR 5.50 freeware Copyright (c) 1993-2017 Alexander Roshal
Extracting from falspositive.rar
Extracting Для сверки для сверки.scr OK
All OK
/tmp/malware # LC_ALL=C unrar x falspositive.rar
UNRAR 5.50 freeware Copyright (c) 1993-2017 Alexander Roshal
Extracting from falspositive.rar
Cannot create ??? ?????? ??? ??????.scr
No such file or directory
No files to extract
/tmp/malware # echo $?
10
/tmp/malware # LC_ALL=en_US.UTF-8 unrar l falspositive.rar
UNRAR 5.50 freeware Copyright (c) 1993-2017 Alexander Roshal
Archive: falspositive.rar
Details: RAR 5
Attributes Size Date Time Name
----------- --------- ---------- ----- ----
..A.... 211968 2017-11-22 07:38 Для сверки для сверки.scr
----------- --------- ---------- ----- ----
211968 1
/tmp/malware # LC_ALL=C unrar l falspositive.rar
UNRAR 5.50 freeware Copyright (c) 1993-2017 Alexander Roshal
Archive: falspositive.rar
Details: RAR 5
Attributes Size Date Time Name
----------- --------- ---------- ----- ----
..A.... 211968 2017-11-22 07:38 ??? ?????? ??? ??????.scr
----------- --------- ---------- ----- ----
211968 1
-------------- next part --------------
From 707840d398fc3efa37d53662d11b0da3f2e73cb7 Mon Sep 17 00:00:00 2001
From: Philipp Gesang <philipp.gesang at intra2net.com>
Date: Thu, 23 Nov 2017 09:40:24 +0100
Subject: [PATCH] amavisd: unrar: treat failed extraction as undecipherable
unrar may error out during archive extraction despite being able
to provide a listing. This can happen with files containing UTF-8
encoded filenames: They will extract just fine under a UTF-8
locale, but error out with status 10 under the C locale. However,
the listing succeeds irrespective of the locale, leading to a
situation where amavisd attempts and fails to extract the archive
but the user (with a different locale or OS) is still able to do
so. Archives like this must be classified as undecipherable.
Signed-off-by: Philipp Gesang <philipp.gesang at intra2net.com>
---
amavisd | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/amavisd b/amavisd
index 8ff2f43..13f1f3d 100755
--- a/amavisd
+++ b/amavisd
@@ -32409,8 +32409,13 @@ sub do_unrar($$$;$) {
($proc_fh,$pid) =
run_command(undef, '&1', $archiver, qw(x -inul -ver -o- -kb),
@common_rar_switches, '--', $fn, "$tempdir/parts/rar/");
- collect_results($proc_fh,$pid,$archiver,16384,
- [0,1,3] ); # one of: SUCCESS, WARNING, CRC
+ my ($_void, $stat) =
+ collect_results($proc_fh,$pid,$archiver,16384,
+ [0,1,3]); # one of: SUCCESS, WARNING, CRC
+ if (!proc_status_ok($stat)) {
+ # listing was ok but extraction errored out -> bogus archive
+ $part->attributes_add('U');
+ }
undef $proc_fh; undef $pid;
my $errn = lstat("$tempdir/parts/rar") ? 0 : 0+$!;
if ($errn != ENOENT) {
--
2.13.6
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.amavis.org/pipermail/amavis-users/attachments/20171123/d6bf0ebf/attachment.sig>
More information about the amavis-users
mailing list