Publicado por Rafael Rosa em 18 de June de 2009

Atenção: Falha de segurança HTTP Digest Authentication do Rails 2.3

Nate Kontny da Inkling Markets encontrou uma falha de segurança tanto no código da documentação quanto no anúncio do Digest Authentication para Rails 2.3. Se você escreveu alguma rotina similar a elas, você pode ter uma possível brecha de segurança.

Esse é o exemplo de código-fonte em questão:

class PostsController < ApplicationController
  Users = {"dhh" => "secret"}

  before_filter :authenticate

  def index
    render :text => "You needed a password to see this…"

  end

  private

  def authenticate
    realm = "Application"

    authenticate_or_request_with_http_digest(realm) do |name|
      Users[name]

    end
  end
end

Notou que o authenticate utiliza o hash Users para autenticar a requisição do HTTP Digest Auth? Quando você tenta acessar uma chave inexistente num hash, receberá nil como resultado. Por sorte, a rotina de autenticação do Rails considera um resultado nil como uma falha de autenticação, mas se a senha informada for uma string em branco (que acaba sendo tratada como nil), as coisas não funcionam como esperado, uma vez que nil == nil e a chamada passa direto pela autenticação!

Nate compilou um monte de informações sobre o problema, incluindo testes e uma correção, e é leitura obrigatória a menos que você tenha certeza absoluta que esse problema já está coberto.

Infelizmente, Nate disse que não conseguiu chamar a atenção do core team do Rails para o problema:

Tentei entrar em contato através da lista de segurança e com alguns membros do core team através de seus e-mails particulares há algumas semanas. Até o momento recebi apenas uma resposta, dizendo que alguém iria analisar o problema, mas parece que o assunto morreu aí.

Agora que já dei algum tempo para que alguém da lista de segurança se manifeste (e espero que não ignore o problema) achei que o melhor seria divulgar o problema à maior quantidade possível de pessoas, para que ele possa ser solucionado e a correção publicada. Acredito que teria uma audiência maior aqui no Hacker News do que no sistema de acompanhamento de bugs do Rails. Quanto maior a audiência, maior a quantidade de pessoas que poderão arrumar seus projetos em Rails 2.3 que possam ser afetados pelo problema.

Deixe um Comentário