Biblioteca Python popular urllib3 está sujeita a uma vulnerabilidade de negação de serviço
Hayley Denbraver
9 de março de 2020
0 minutos de leituraUrllib3, um cliente HTTP para Python poderoso e popular, está sujeito a uma vulnerabilidade de negação de serviço recém-descoberta. Urllib3 é amplamente usado no ecossistema Python: mais de 1.200 pacotes o listam como dependência, incluindo pacotes populares como requests, selenium, kubernetes e outros. Se você tem um projeto em Python, é muito provável que esteja usando urllib3.
No ano passado, relatamos uma vulnerabilidade de injeção de CRLF no urllib3.
Vulnerabilidade de negação de serviço
Na versão 1.25.2, foi adicionada uma lógica a util/url.py para codificar em percentuais os caracteres inválidos no destino da solicitação. O método _encode_invalid_chars, da forma como foi implementado, permite um ataque de negação de serviço. O array percent_encodings contém todas as correspondências de codificações percentuais, sem eliminar duplicatas. Para uma URL de tamanho N, o tamanho de percent_encodings corresponde a um tempo de execução linear. A etapa seguinte (normalizar bytes já codificados em percentuais) também leva um tempo linear para cada codificação percentual, resultando em um tempo de execução polinomial (O(n2)). Essa ineficiência pode ser explorada intencionalmente para consumir CPU e causar uma negação de serviço. Se as codificações percentuais fossem deduplicadas, o tempo de execução de _encode_invalid_chars seria linear e mais eficiente.
O método vulnerável foi atualizado na versão 1.25.8 para melhorar sua eficiência e não está mais vulnerável a esse tipo de ataque de negação de serviço.
Meu projeto está vulnerável?
Devido ao uso disseminado do urllib3 no ecossistema Python, vale a pena verificar se seus projetos Python usam alguma das versões vulneráveis. Para corrigir o problema, atualize o urllib3 para a versão estável mais recente (1.25.8). Como muitos pacotes Python dependem do urllib3, é provável que a vulnerabilidade esteja presente no seu projeto como dependência indireta. Por isso, talvez você não consiga fazer a atualização em todos os casos, dependendo da sua dependência de nível superior.
A Snyk facilita a verificação das dependências Python. Temos um plano gratuito que inclui análises ilimitadas de projetos de código aberto e 200 análises por mês de repositórios privados. Recentemente, a Snyk aprimorou o suporte a Python no Snyk Open Source, permitindo que desenvolvedores corrijam vulnerabilidades em dependências com a ajuda de pull requests de correção automatizados. Analise seu projeto hoje mesmo!
A Snyk adora Python
Na Snyk, adoramos o código aberto e queremos mantê-lo o mais saudável possível. Com esse objetivo, relatamos novas vulnerabilidades não porque os pacotes sejam ruins (não são), mas porque queremos ajudar desenvolvedores a usar software de código aberto com segurança. Também queremos ajudar quem encontra novas vulnerabilidades a divulgá-las de forma responsável. Você pode divulgar vulnerabilidades que encontrou ou que ainda não estão na Snyk Vulnerability Database, e vamos ajudar a verificar a vulnerabilidade e entrar em contato com o responsável pela manutenção. Saiba mais aqui.
Comece a resolver desafios de capture the flag
Aprenda a resolver desafios de capture the flag assistindo sob demanda ao nosso workshop virtual introdutório.
