Vulnerabilidade de negação de serviço descoberta no pacote JavaScript Axios — todas as versões do popular cliente HTTP são afetadas
6 de maio de 2019
0 minutos de leituraaxios é um cliente HTTP moderno para JavaScript baseado em promises, bastante usado em projetos para navegador e servidores Node.js, com mais de 3 milhões de downloads semanais no npm.
A Snyk registrou uma vulnerabilidade de segurança de negação de serviço, de gravidade média (5,3 CVSS), que afeta o axios e que já havia sido discutida e compartilhada em 2017 pelo desenvolvedor Jeremy Apthorp na fila de issues do GitHub do projeto.
As versões afetadas do axios estão vulneráveis a negação de serviço (DoS), pois o conteúdo continua sendo processado nas solicitações mesmo depois que maxContentLength é excedido, aumentando o uso de I/O e CPU.
Sobre a vulnerabilidade
Anthorp compartilhou um trecho de código na issue do GitHub para mostrar um exemplo de uso dos limites da API do axios no tamanho da resposta HTTP recebida:
No entanto, independentemente do limite de tamanho do conteúdo, a conexão HTTP permanece aberta até que todos os dados do arquivo sejam transferidos. Assim, qualquer pessoa que controle o domínio remoto ou esteja interceptando uma conexão insegura pode enviar um arquivo grande e impedir que a solicitação seja concluída por um período significativo.
Até a publicação deste artigo, não havia sido lançada uma correção oficial para essa vulnerabilidade. No entanto, a comunidade abriu uma solicitação de pull para corrigir o problema no repositório do projeto no GitHub, que aguarda aprovação e lançamento.
Os usuários da Snyk ficam protegidos com a aplicação de um patch de segurança nas versões >= 0.17.0 do axios, que mitiga a vulnerabilidade de negação de serviço.
Conecte seu repositório e aplique o patch.
ATUALIZAÇÃO 31/05/2019: uma correção foi lançada e está disponível nas versões >= 0.19.0 do axios
A Snyk identificou a vulnerabilidade em mais de 215 mil projetos analisados e alertou imediatamente os usuários afetados. Os usuários que utilizavam nossa solução de monitoramento de segurança em tempo de execução não só foram informados sobre a vulnerabilidade, como também sobre a urgência de corrigi-la, já que, na maioria dos casos, ela pode ser alcançada pelo fluxo de execução do código da aplicação e, portanto, tem alta probabilidade de ser explorada.
No caso do axios, a integração do monitoramento de segurança em tempo de execução com a aplicação ajudou a aprimorar a identificação de problemas de segurança em implantações ativas em produção.
Isso me afeta? O que devo fazer?
Se você solicita recursos de fontes não confiáveis ou por meios inseguros, pode estar vulnerável a ataques de negação de serviço quando usuários mal-intencionados conseguem controlar o recurso remoto.
Ao usar o axios em um servidor Node.js, isso pode ser desastroso devido à natureza de thread único do ambiente de execução. Um aumento no consumo de recursos, como I/O e CPU, afeta negativamente todos os usuários conectados ao servidor. Em navegadores, a negação de serviço afeta os usuários finais com diferentes níveis de gravidade, dependendo de como a aplicação usa o axios para buscar recursos.
O que devo fazer?
Se você usa a Snyk, pode se proteger automaticamente aplicando o patch de segurança mencionado acima.
Aplique a seguinte mitigação em cada chamada ao axios para programar de forma defensiva contra essa vulnerabilidade:
axios({ url: ..., maxContentLength: 2000, }).catch((error) => { error.request.res.destroy(); });Essa é a recomendação publicada em https://github.com/axios/axios/issues/1098#issuecomment-334874694Aplique manualmente a correção sugerida na solicitação de pull: https://github.com/axios/axios/pull/1485
Uma observação sobre a saúde de projetos de código aberto
Manter projetos de código aberto pode se tornar cada vez mais desafiador à medida que eles ganham popularidade. O número de issues aumenta e exige atenção constante; cresce o trabalho de criar e manter a documentação atualizada; e ainda há correções de bugs e lançamentos estáveis — para citar apenas algumas das tarefas esperadas dos responsáveis pelos projetos, que muitas vezes são realizadas totalmente de forma voluntária.
Escolher dependências de código aberto exige cuidado para minimizar ao máximo as interrupções no seu projeto. Confira alguns aspectos das informações sobre a saúde da dependência axios que podemos conhecer com os insights da Snyk:
A primeira versão do axios, a 0.1.0, foi publicada há 5 anos, em 29 de agosto de 2014.
A versão estável mais recente, 0.18.0, foi publicada há 9 meses, em 19 de fevereiro de 2018.
Todas as versões lançadas são afetadas pela vulnerabilidade de negação de serviço mencionada acima.
O projeto recebeu contribuições de até 159 desenvolvedores, mas os lançamentos ainda são gerenciados pelos líderes do projeto, Nick Uraltsev e Matt Zabriskie.
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.
