Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAH8yC8k=JmgBjwV2HD_tmyg7-U-9HPLmeJMAKPk2TBm5KrsfKw@mail.gmail.com>
Date: Thu, 22 Sep 2016 21:39:41 -0400
From: Jeffrey Walton <noloader@...il.com>
To: oss-security@...ts.openwall.com
Cc: John Byrd <jbyrd@...anticsoftware.com>
Subject: CVE Assignment for Crypto++ and "AES and incorrect argument to
 _freea() under Microsoft compilers"

CVE assignment, please.

=== INTRODUCTION ===

John Byrd reported a crash in Crypto++'s AES implementation under
Microsoft compilers due to use of `_malloca`, `AliasedWithTables` and
`_freea`. Crypto++ can potentially free the wrong pointer when the
pointer is adjusted to flush cache lines to avoid Bernstein's cache
timing attacks.

=== SCOPE ===

The bug only affects Crypto++ 5.6.4 and was introduced at
http://github.com/weidai11/cryptopp/commit/823bc93357da32a3a4a2b71b9915a4e124839d18.

The bug is specific to Windows and Microsoft compilers because its
guarded by `_MSC_VER`.

The bug does not affect Unix and Linux; and does not affect
non-Microsoft compilers on Windows, like ICC and Borland.

=== DETAILS ===

The code in question asks `_malloca` for a block of memory. The code
also over-commits the size and adjust the pointer to a 256-byte
boundary. The pointer is sent `AliasedWithTables` to flush cache
lines. If `AliasedWithTables` cannot perform the flush, then it
returns false. Upon the false return, the code reallocates, adjusts
the pointer and calls `AliasedWithTables` again. Eventually the call
succeeds. After the code in question completes, it frees the adjusted
pointer and not the original pointer using `_freea`.

`alloca` is on Microsoft's [SDLC banned function list
(http://msdn.microsoft.com/en-us/library/bb288454.aspx). The code was
migrated from `alloca`  to `_malloca` for C&A purposes.

`_malloca` and `_freea` are Microsoft SDLC functions. Microsoft
sometimes uses the heap rather than the stack for `_malloca`, and
that's the reason `_freea` is needed.

=== CORRECTION ===

The issue is being tracked at https://github.com/weidai11/cryptopp/issues/302.

The code will be fixed by using the correct pointer. The fix will be
pushed within about two weeks along with CVE-2016-7420.

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.