ASA-2019-00131 – Ruby on Rails: Vulnerabilidade de negação de serviço no Action View


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00131

Identificador(es)

ASA-2019-00131, CVE-2019-5419

Título

Vulnerabilidade de negação de serviço no Action View

Fabricante(s)

Ruby on Rails core team

Produto(s)

Ruby on Rails

Versão(ões) afetada(s)

Todas as versões suportadas do Ruby on Rails

Versão(ões) corrigida(s)

Ruby on Rails 6.0.0.beta3
Ruby on Rails 5.2.2.1
Ruby on Rails 5.1.6.2
Ruby on Rails 5.0.7.2
Ruby on Rails 4.2.11.1

Prova de conceito

Desconhecido

Descrição

Os cabeçalhos de aceitação especialmente criados podem fazer com que o código de localização do template do Action View consuma 100% da CPU, fazendo com que o servidor não consiga processar solicitações. Isso afeta todos os aplicativos Rails que renderizam exibições.

Todos os usuários executando uma versão afetada devem atualizar ou usar uma das soluções alternativas imediatamente.

Detalhes técnicos

Esta vulnerabilidade pode ser mitigada envolvendo as chamadas `render` com blocos `respond_to`. Por exemplo, o exemplo a seguir é vulnerável:

```
class UserController < ApplicationController
  def index
    render "index"
  end
end
```

Mas o seguinte código não é vulnerável:

```
class UserController < ApplicationController
  def index
    respond_to |format|
      format.html { render "index" }
    end
  end
end
```

A renderização implícita é afetada, portanto, esse código é vulnerável:

```
class UserController < ApplicationController
  def index
  end
end
```

Mas pode ser alterado para isso:

```
class UserController < ApplicationController
  def index
    respond_to |format|
      format.html { render "index" }
    end
  end
end
```

Alternativamente, para especificar o formato, o seguinte patch pode ser aplicado em um 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)
```

Créditos

John Hawthorn (GitHub)

Referência(s)

Rails 4.2.11.1, 5.0.7.2, 5.1.6.2, 5.2.2.1, and 6.0.0.beta3 have been released!
https://weblog.rubyonrails.org/2019/3/13/Rails-4-2-5-1-5-1-6-2-have-been-released/

[CVE-2019-5419] Denial of Service Vulnerability in Action View
https://groups.google.com/forum/#!topic/rubyonrails-security/GN7w9fFAQeI

[CVE-2019-5419] Denial of Service Vulnerability in Action View
https://seclists.org/oss-sec/2019/q1/177

Only accept formats from registered mime types
https://github.com/rails/rails/commit/f4c70c2222180b8d9d924f00af0c7fd632e26715

CVE-2019-5419
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5419

CVE-2019-5419
https://nvd.nist.gov/vuln/detail/CVE-2019-5419

Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.

Última modificação: 8 dezembro 2019

Não somos responsáveis por qualquer perda de dados, corrupção de dispositivos ou qualquer outro tipo de problema devido ao uso de qualquer informação mencionada em nossos alertas de segurança.