Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20181105200854.GC25817@TC-275.local>
Date: Mon, 5 Nov 2018 12:08:54 -0800
From: Aaron Patterson <tenderlove@...y-lang.org>
To: security@...e.de, rubyonrails-security@...glegroups.com,
	oss-security@...ts.openwall.com, ruby-security-ann@...glegroups.com
Subject: [CVE-2018-16471] Possible XSS vulnerability in Rack

There is a possible vulnerability in Rack. This vulnerability has been
assigned the CVE identifier CVE-2018-16471.

Versions Affected:  All.
Not affected:       None.
Fixed Versions:     2.0.6, 1.6.11

Impact
------
There is a possible XSS vulnerability in Rack.  Carefully crafted requests can
impact the data returned by the `scheme` method on `Rack::Request`.
Applications that expect the scheme to be limited to "http" or "https" and do
not escape the return value could be vulnerable to an XSS attack.

Vulnerable code looks something like this:

```
  <%= request.scheme.html_safe %>
```

Note that applications using the normal escaping mechanisms provided by Rails
may not impacted, but applications that bypass the escaping mechanisms, or do
not use them may be vulnerable.

All users running an affected release should either upgrade or use one of the
workarounds immediately.

Releases
--------
The 2.0.6 and 1.6.11 releases are available at the normal locations.

Workarounds
-----------
The following monkey patch can be applied to work around this issue:

```
require "rack"
require "rack/request"

class Rack::Request
  SCHEME_WHITELIST = %w(https http).freeze

  def scheme
    if get_header(Rack::HTTPS) == 'on'
      'https'
    elsif get_header(HTTP_X_FORWARDED_SSL) == 'on'
      'https'
    elsif forwarded_scheme
      forwarded_scheme
    else
      get_header(Rack::RACK_URL_SCHEME)
    end
  end

  def forwarded_scheme
    scheme_headers = [
      get_header(HTTP_X_FORWARDED_SCHEME),
      get_header(HTTP_X_FORWARDED_PROTO).to_s.split(',')[0]
    ]

    scheme_headers.each do |header|
      return header if SCHEME_WHITELIST.include?(header)
    end

    nil
  end
end
```

Patches
-------
To aid users who aren't able to upgrade immediately we have provided patches for
the supported release series. They are in git-am format and consist of a
single changeset.

* 2-0-scheme-xss.patch - Patch for 2.0 series
* 1-6-scheme-xss.patch - Patch for 1.6 series

Please note that only the 1.6.x and 2.0.x series are supported at present. Users
of earlier unsupported releases are advised to upgrade as soon as possible as we
cannot guarantee the continued availability of security fixes for unsupported
releases.

Credits
-------

* Patrick Tulskie <patricktulskie@...il.com>

Thank you!

-- 
Aaron Patterson
http://tenderlovemaking.com/

View attachment "1-6-scheme-xss.patch" of type "text/plain" (2087 bytes)

View attachment "2-0-scheme-xss.patch" of type "text/plain" (2230 bytes)

Download attachment "signature.asc" of type "application/pgp-signature" (489 bytes)

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.