[#390749] Why are there so many similar/identical methods in core classes — Kassym Dorsel <k.dorsel@...>

Let's look at the Array class and start with method aliases.

14 messages 2011/12/02

[#390755] Inverse Operation of Module#include — Su Zhang <su.comp.lang.ruby@...>

Hi list,

21 messages 2011/12/02
[#390759] Re: Inverse Operation of Module#include — Ryan Davis <ryand-ruby@...> 2011/12/02

[#390764] Re: Inverse Operation of Module#include — Isaac Sanders <isaacbfsanders@...> 2011/12/02

I would suggest an Adapter pattern use here. IF there is something that has

[#390876] black magical hash element vivification — Chad Perrin <code@...>

Ruby (1.9.3p0 to be precise, installed with RVM) is not behaving as I

12 messages 2011/12/05

[#390918] WEB SURVEY about Ruby Community — Intransition <transfire@...>

Did any one else get this survey request?

14 messages 2011/12/07

[#390976] Confusing results from string multiplication — Rob Marshall <robmarshall@...>

Hi,

19 messages 2011/12/08

[#391019] How can I do h["foo"] += "bar" if h["foo"] does not exist? — "Andrew S." <andrewinfosec@...>

Hi there,

13 messages 2011/12/09

[#391027] reading from file without end-of-lines — Janko Muzykant <umrzykus@...>

hi,

20 messages 2011/12/09
[#391028] Re: reading from file without end-of-lines — Gavin Sinclair <gsinclair@...> 2011/12/09

> i'm trying to read a few text values from single file:

[#391031] Re: reading from file without end-of-lines — Robert Klemme <shortcutter@...> 2011/12/09

On Fri, Dec 9, 2011 at 9:58 AM, Gavin Sinclair <gsinclair@gmail.com> wrote:

[#391042] Re: reading from file without end-of-lines — Gavin Sinclair <gsinclair@...> 2011/12/09

On Fri, Dec 9, 2011 at 8:18 PM, Robert Klemme

[#391135] I need advice on what to do next. — Nathan Kossaeth <system_freak_2004@...>

I am new to programming. I read the ebook "Learn to Program" by Chris

23 messages 2011/12/12

[#391216] perf optimization using profile results — Chuck Remes <cremes.devlist@...>

I need some help with optimizing a set of libraries that I use. They are ffi-rzmq, zmqmachine and rzmq_brokers (all up on github).

13 messages 2011/12/13
[#391218] Re: perf optimization using profile results — Chuck Remes <cremes.devlist@...> 2011/12/13

On Dec 13, 2011, at 9:57 AM, Chuck Remes wrote:

[#391234] Re: perf optimization using profile results — Charles Oliver Nutter <headius@...> 2011/12/14

A couple quick observations.

[#391238] Re: perf optimization using profile results — Chuck Remes <cremes.devlist@...> 2011/12/14

On Dec 13, 2011, at 7:03 PM, Charles Oliver Nutter wrote:

[#391324] ruby 1.9 threading performance goes non-linear — Joel VanderWerf <joelvanderwerf@...>

12 messages 2011/12/16
[#391325] Re: ruby 1.9 threading performance goes non-linear — Eric Wong <normalperson@...> 2011/12/16

Joel VanderWerf <joelvanderwerf@gmail.com> wrote:

[#391420] Accessing class instance variables from an instance? — "Shareef J." <shareef@...>

Hi there,

26 messages 2011/12/20
[#391454] Re: Accessing class instance variables from an instance? — Khat Harr <myphatproxy@...> 2011/12/21

Actually, now that I'm thinking about it the existing behavior sort of

[#391456] Re: Accessing class instance variables from an instance? — Josh Cheek <josh.cheek@...> 2011/12/21

On Tue, Dec 20, 2011 at 9:42 PM, Khat Harr <myphatproxy@hotmail.com> wrote:

[#391545] Kernel#exit raises an exception? — Khat Harr <myphatproxy@...>

While I was working on embedding an interpreter I wrote a function to

13 messages 2011/12/24

[#391618] rvmsh: An easy installer for RVM — Bryan Dunsmore <dunsmoreb@...>

I have recently begun work on a project called [rvmsh]

12 messages 2011/12/29

[#391783] Mailspam — Gunther Diemant <g.diemant@...>

Is there a way to stop this mailspam of Luca (Mail)?

12 messages 2011/12/29

[#391790] What’s the standard way of implementing #hash for value objects in Ruby? — Nikolai Weibull <now@...>

Hi!

23 messages 2011/12/29
[#391792] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Gunther Diemant <g.diemant@...> 2011/12/29

I think you can't access instance variables from a class method, so

[#391793] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Nikolai Weibull <now@...> 2011/12/29

On Thu, Dec 29, 2011 at 15:52, Gunther Diemant <g.diemant@gmx.net> wrote:

[#391811] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Robert Klemme <shortcutter@...> 2011/12/29

On Thu, Dec 29, 2011 at 4:06 PM, Nikolai Weibull <now@bitwi.se> wrote:

[#391812] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Nikolai Weibull <now@...> 2011/12/29

On Fri, Dec 30, 2011 at 00:26, Robert Klemme <shortcutter@googlemail.com> w=

[#391816] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Josh Cheek <josh.cheek@...> 2011/12/30

On Thu, Dec 29, 2011 at 5:47 PM, Nikolai Weibull <now@bitwi.se> wrote:

[#391833] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Robert Klemme <shortcutter@...> 2011/12/30

On Fri, Dec 30, 2011 at 12:47 AM, Nikolai Weibull <now@bitwi.se> wrote:

[ANN] JRuby 1.6.5.1 Released

From: Thomas E Enebo <tom.enebo@...>
Date: 2011-12-27 23:27:19 UTC
List: ruby-talk #391594
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] =3D 1
    hashing_function(:heh) -> store :heh/1 in hash bucket #3
    a[:foo] =3D 2
    hashing_function(:foo) -> store :foo/2 in hash bucket #13
    a[:bar] =3D 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] =3D 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 =3D 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.


--=20
blog: http://blog.enebo.com=A0 =A0 =A0=A0 twitter: tom_enebo
mail: tom.enebo@gmail.com

In This Thread

Prev Next