segunda-feira, 30 de maio de 2011

Correção da vulnerabilidade de segurança do urllib/urllib2

Guido van Rossum publicou recentemente uma correção para CVE-2011-1521, um problema de segurança nas bibliotecas URL de Python. Embora problemas de segurança sejam raros, a oportunidade é boa para abrir o processo para a comunidade, no que tange a relatar, direcionar e corrigir problemas quando eles aparecem.

Relatar um problema

Se você encontrar um problema de segurança em CPython, o que pedimos inicialmente é que você mantenha detalhes do problema em segredo. Depois de determinar que você encontrou um legítimo problema, é importante que um relatório, sucinto mas completo, dever ser feito ao desenvolvedores do núcleo, de maneira a demonstrar o que foi encontrado.

Um bom relatório deve explicar claramente as seções do código fonte afetadas pelo sistema. É importante se saber se o problema ocorrer em uma determinada plataforma ou é devido à uma dependência. Também, se conhecer as versões afetadas seria bem útil, mesmo que a vulnerabilidade seja testada na maioria das versões disponíveis. E se você tiver um teste que mostre o problema, por favor o inclua. Seu relatório deve ser enviado para o grupo security@python.org.

Niels Heinen, da Equipe de Segurança do Google, recentemente enviou um bom relatório. Ele descobriu um problema com o gerenciamento de redirecionamentos 302 do HTTP, nos módulos urllib e urllib2 da biblioteca padrão. Ele encontrou o problema no qual um servidor poderia redirecionar requisições para esquemas não apropriados, levando a situações que poderiam comprometer dados ou sistemas. No seu relatório inicial, Niels demonstrou duas situações nas quais tais redirecionamentos poderiam levar a problemas.

Primeiramente, já que urllib/urllib2 definem um gerenciamento para o esquema de URL file://, um redirecionamento para file:///etc/passwd poderia expor dados de senhas. Niels também explicou que redirecionamentos para um dispositivo do tipo file:///dev/zero poderia levar a um problema de "denial of service"

Recebimento de Relatórios

Dada a confidencialidade de relatórios de segurança, a lista security@python.org é mantida por um pequeno grupo de desenvolvedores confiáveis, que analisam e checam os relatórios assim que recebidos. Se você quiser enviar mensagens criptografadas para a lista, veja a página security news para detalhes a respeito do OpenPGP.

Se o grupo confirmar a existência de um problema de segurança, um bug público é criado com o "patch" necessário. Nesse caso, Guido van Rossum, publicou abertamente o problema #11662, completo com "patch" inicial.

Consertando o Problema

O "patch" de Guido restringiu os redirecionamentos de URL http://, https://, e ftp://. Redirecionamento de FTP foi considerado aceitável, o qual também é um redirecionamento bem comum: espelhos sistemas de download algumas vezes redirecionam requisições para servidores de FTP em regiões geográficas mais próximas do pedido.

Em Python 2.x, o método redirect_internal do FancyURLopener agora mostra um IOError quando o redirecionamento é inapropriado. Em HTTPRedirectHandler, http_error_302 faz a mesma coisa, só que apresentando HTTPError. Em Python 3, urllib.request recebeu as mesmas modificações. Incluídos no "patch" estão dois testes que testam redirecionamentos para esquemas válidos e inválidos.

Com relação a usuários receberem as modificações, o lançamento final de segurança do Python 2.5 será em breve. Como não há datas para os novos anúncios dos próximos "patches" de manutenção - 2.6, 2.7, 3.1 e 3.2 - todos receberam as modificações.

Nenhum comentário:

Postar um comentário