Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAFkuX4u3uphnNK4H8Oh6Xp5mmVhf56tUCii-2L+fmjz9fEG9gA@mail.gmail.com>
Date: Thu, 26 Jun 2014 20:54:31 -0600
From: "Don A. Bailey" <donb@...uritymouse.com>
To: oss-security@...ts.openwall.com
Subject: Re: LMS-2014-06-16-6: LZ4 Core

Ahhh, so that's who this is. I only read Yann's blog post which was largely
an emotional response, and so I ignored most (read: all) of it. Now that I
understand who he is, this makes a *lot* more sense. Thanks for sending the
email.

I also never saw his responses on the lz4 code site. I posted a note there,
but never received updates or saw that he responded to my messages. I
checked several times throughout this process. Unfortunately, this just
breaks down to a communication error.

I think the larger issue is that this was noted as a security problem some
time ago on the lz4 site. I've never tried to hide that. What was
interesting is the issue was dismissed by the lz4 developer, who I now know
is Yann. It was never fixed and it was given a low priority. So, from this
perspective, I think it is unfortunate that he is so angry. If he thought
it was a serious issue back then he should have raised the priority. The
original researcher never even pursued the issue after it was deemed a
non-issue, nor did they attempt to seek out alternative implementations.
The maintainers of LZ4 variants used in ZFS, for example, were never
notified. I contacted those individuals myself.

Yann is technically wrong about a lot here, however.
 - 64bit systems are still vulnerable, but impractical to exploit due to
memory constraints
 - I mentioned that the security flaw is unlikely to be exploited due to
memory constraints
 - I mentioned the ZFS 128k limit in my blog post as an example of why
things *aren't* vulnerable
 - There is no constraint or ceiling in the LZ4 decompression routine on
the size of the input/output buffer

First issue - 64bit systems. It is still possible to generate an integer
overflow on 64bit systems. The amount of memory (terabytes upon terabytes)
would be necessary to succeed. This is indeed infeasible. But, this is also
potentially the same logic that kept this bug hidden for 20 years. I am not
here to speculate on whether something might be vulnerable or not. It is
vulnerable code. Period.

The security flaw is indeed unlikely to be exploited in most environments.
I have never disputed this. I think the LZ4 bug is interesting because it
is more easily instrumented than the LZO exploit. You can actually get a
more precise overwrite with LZ4 than you can with LZO. As a result, it is
extremely practical to write exploits for it, including RCE. Is it
practical outside of the core library? Probably not, but that doesn't mean
it shouldn't be secured.

I noted in my blog that ZFS is constrained to 128k. For some reason Yann
didn't read this far. I think he misunderstands context. The LZ4 code as is
in the library is vulnerable. Period. It can be instrumented for precise
overwrites. Period. But, as I address in the blog, context - and thus the
threat model - changes drastically with use of the library. This is why -
and again, I called for this in my blog post - auditing of each
implementation is imperative. Since these algorithms are widely used, and
there is no enforced constraint on a call to LZ4's algorithm, there is no
way to determine who is using this "correctly" or not. As an example, I
have RCE examples for MPlayer2 on 8 or so different target platforms from
x86, x86_64, and ARM on BSDs and Linux. This is because libav's
implementation is slightly different enough to be easily instrumented by an
attacker. Is LZ4 used similarly in another product? I don't know. That's
why I'm calling for audits to find out. Let's find out!

Finally, Yann is right that there are block sizes, etc. But the
decompression routine itself does not care or enforce a size constraint.
Just like LZO's decompression routine, this means that it can be passed any
amount of data the caller wants, and like LZO, users will implement this
incorrectly.

It's unfortunate that Yann's feelings were hurt, and I feel bad that he was
upset enough to react so caustically. I had no intention to make him look
bad, or hurt his project. But, when I saw the bug reports during the Linux
kernel audit from years ago with no reaction or patch, I suppose I presumed
the worst. That's my fault, and I apologize for that.

Hope this helps illuminate my perspective.

Best,
Don A. Bailey
Founder / CEO
Lab Mouse Security
@InfoSecMouse
https://www.securitymouse.com/



On Thu, Jun 26, 2014 at 8:37 PM, Solar Designer <solar@...nwall.com> wrote:

> On Thu, Jun 26, 2014 at 12:58:37PM -0600, Don A. Bailey wrote:
> > A vulnerability has been identified in the LZ4 core implementation.
> Please
> > review the bug report attached inline.
> [...]
> > Report ID: LMS-2014-06-16-6
> >
> > CVE ID: CVE-2014-4611
> [...]
> > Vulnerability Status: Reported / No response
>
> Yann Collet, the author of LZ4 and maintainer of the LZ4 reference
> implementation, has now posted a different point of view:
>
>
> http://fastcompression.blogspot.fr/2014/06/debunking-lz4-20-years-old-bug-myth.html
>
> Aside from the bitterness (which I think is excessive, albeit
> understandable), there's technical detail on why the vulnerability is
> less severe, and a mention of it having been reported via "a brief note
> on the LZ4 issue board".  I've just found this note here:
>
> https://code.google.com/p/lz4/issues/detail?id=52&can=1
>
> I guess there was some miscommunication, because there _was_ response
> via comments on this issue.  Don's comment was posted on June 19, and
> Yann replied via multiple comments on June 20, 22, 26.  The latest one
> of these says "Fixed into r118", which is:
>
> https://code.google.com/p/lz4/source/detail?r=118
>
> and the commit message includes:
>
> "fix :  Issue 52  (malicious address space overflow in 32-bits mode when
> using custom format)"
>
> Per Yann's blog post, and per comments on issue 52, we should credit
> Ludvig Strigeus for earlier discovery of this issue specifically in LZ4,
> although it was not treated as a security issue until Don's rediscovery
> (per Yann's good reasons, it shouldn't have been, but that's arguable).
>
> Given the above, I think all of Ludvig, Don, and indeed Yann deserve
> credit for getting this issue fixed, and I find it unfortunate that
> feelings were hurt.
>
> Alexander
>

Powered by blists - more mailing lists

Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.