For whatever reason the CERT link is not quite live yet.  It will be
at some point.

-Tom

On Tue, Dec 27, 2011 at 5:27 PM, Thomas E Enebo <tom.en...@gmail.com> wrote:
> The JRuby community is pleased to announce the release of JRuby 1.6.5.1.
>
> - Homepage: http://www.jruby.org/
> - Download: http://www.jruby.org/download
>
> JRuby 1.6.5.1 is a special release with a single patch applied to our
> JRuby 1.6.5 source to correct CERT vulnerability CERT-2011-003
> (http://www.ocert.org/advisories/ocert-2011-003.html).  All users are
> recommended to upgrade to JRuby 1.6.5.1 to get this security fix.
>
> A fuller JRuby 1.6.6 with bug fixes from the last two months will be
> released mid-January...
>
> **Background for the CERT advisory:**
>
> (for the impatient: predictable hashing algorithm and open access to a
> hash from a server can possibly allow Denial of Service (DOS) attacks)
>
> **Hashing 101**
>
> Hash tables apply a math function (hashing function) to the key of a
> key-value pair. The result of the hashing function is a location to a
> hash bucket which stores the key/value pair internally:
>
>    a[:heh] = 1
>    hashing_function(:heh) -> store :heh/1 in hash bucket #3
>    a[:foo] = 2
>    hashing_function(:foo) -> store :foo/2 in hash bucket #13
>    a[:bar] = 3
>    hashing_function(:bar) -> store :bar/3 in hash bucket #1
>
> Hashes have many buckets and in theory all key/value pairs added to a
> hash will get spread out evenly across the hashes buckets.  In
> practice, some number of keys will end up hashing into the same hash
> bucket (known as a hashing collision).  As you get more key/value
> pairs stored to the same hash bucket the time to access those
> particular key/value pairs will slow down.  This is because you need
> to walk some portion of the entries in the bucket to find the specific
> one you are looking for (hash structures will often make entries in an
> individual bucket a simple list structure).
>
>    a[:gar] = 4
>    hashing_function(:gar) -> store gar/4 in hash bucket #3 (same
> bucket as :heh)
>
> In this example, accessing a[:gar] and a[:heh] may take longer than
> the other keys because they are sharing a hash bucket.
>
> **The Attack**
>
> The general application of the attack is for "the bad guys" to figure
> out a large set of values which will hash to the same hash bucket.
> Once they create this list they will send all those values to a
> server.  The server will store them in a hash (think parameter list in
> Rack, for example).  The act of storing or accessing any of those
> values takes longer and longer as the number of entries in a single
> hash bucket grows.  The result will be a Denial Of Service (DOS)
> attack if enough values get stored.
>
>    hashing_function(:hostname) -> hash bucket #3
>    hashing_function(:aZ1) -> hash bucket #3
>    hashing_function(:cvg) -> hash bucket #3
>    hashing_function(:azr) -> hash bucket #3
>    ... # many elided
>    hashing_function(:1fr) -> hash bucket #3
>    hashing_function(:yu3) -> hash bucket #3
>    hashing_function(:hyX) -> hash bucket #3
>
>    host = params[:hostname] # Uh oh! need to find this amongst many
> bucket buddies
>
> **The Fix**
>
> Adding a little bit of randomization to the hashing algorithm ends up
> making it much, much more difficult to figure out how to generate this
> type of attack.  JRuby 1.6.5.1 (and all later JRuby releases) all have
> this additional randomization built into the hashing algorithm.  The
> result should be decent hash bucket distribution that is difficult for
> attackers to predict.
> More information
>
> This vulnerability is not exclusively an issue of JRuby.  Other Ruby
> implementations also have a similar issue (also patched today/soon).
> In fact, Java and PHP also appear to be susceptible to this style of
> attack.  For more information, please see the CERT announcement
> (http://www.ocert.org/advisories/ocert-2011-003.html) .
>
> Also, consider that language implementations are really only
> susceptible to this attack via frameworks which allow an external
> hacker to store arbitrary and/or unbounded key/values into a hash.
> Ruby Rack had this vulnerability, but they have fixed things so that
> the amount of parameters stored is bounded by a size to remove the
> possibility of a DOS attack.  Rack users should upgrade to the latest
> version.
>
>
> --
> blog: http://blog.enebo.com       twitter: tom_enebo
> mail: tom.en...@gmail.com
>



-- 
blog: http://blog.enebo.com       twitter: tom_enebo
mail: tom.en...@gmail.com

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to