Security Exploit: ataque DoS contra servidores Ruby

2006 October 25, 20:28 h - tags: security obsolete

Ontem no fim da tarde Zed Shaw – um dos colaboradores do livro “Repensando a Web com Rails”, e criador do excelente servidor Mongrel – postou uma correção URGENTE para todos que utilizam algum servidor HTTP em Ruby, como Mongrel.

Existe um problema de Denial of Service (DoS) facilmente explorável contra o cgi.rb. O ataque envolve enviar um corpo MIME multipart de HTTP mal formado.

Os autores da correção e que manobraram para que essa informação chegasse ao público o mais rápido possivel foram Jeremy Kemper e Jamis Buck.

A biblioteca CGI do Ruby (cgi.rb) tem um bug que permite qualquer um na Internet enviar uma única requisição HTTP para qualquer programa Ruby (não somente Mongrel) que utiliza parsing multipart com cgi.rb com um corpo MIME mal formado, causando o processo Ruby a atingir 99% de utilização da CPU em um loop infinito, matando-o.

O que acontece é que o final do limitador MIME às vezes é:

ASDFADSFASFD-

Em vez de:

-ADFADSFADSF-

E isso faz o cgi.rb entrar num loop infinito esperando por input que nunca chega. Isso é causado por qualquer sistema que lê diretamente do input stream que retorna "" em vez de EOF.

Quem é afetado

Atualmente, os seguintes servidores são afetados:

  • Mongrel – lê diretamente do socket e receber "" em vez de EOF
  • Litespeed – afetado mas tem um timeout interno que corta o processo
  • CGI Standalone – impactado porque também lê de um input stream normal

Parece que o FCGInputStream de FCGI, WEBrick e mod_ruby não são vulneráveis porque ou eles lêem de um domain socket ou não usam cgi.rb normal.

A Correção

Qualquer um usando Mongrel pode pegar a correção IMEDIATAMENTE instalando a última versão de pré-lançamento 0.3.14:

gem install mongrel
—source=http://mongrel.rubyforge.org/releases

O pessoal de Win32 (Windows) e qualquer um que não possa realizar a atualização desse jeito pode tentar deste outro jeito:

  1. gem install cgi_multipart_eof_fix --source=http://mongrel.rubyforge.org/releases
  2. Editar o environment.rb e acrescentar: require 'cgi_multipart_eof_fix'
  3. Reiniciar seus servidores

O e-mail de Zed Shaw tem mais informações e canais de comunicação como o canal #rubyonrails, #rails-security e #ruby-lang no irb.freenode.org.

Zed ainda tem um patch anexado no e-mail original desse anúncio. Estudem sobre esse bug e apliquem as correções.

Comments

comentários deste blog disponibilizados por Disqus