Mais segurança em conjunto: Snyk e CISPA colaboram por um bem maior
Aviad Hahami
6 de junho de 2022
0 minutos de leituraGrandes coisas acontecem quando o meio acadêmico e a indústria de software trabalham juntos! Hoje, queremos compartilhar uma história sobre nossa colaboração recente com o CISPA Helmholtz Center for Information Security, uma importante instituição científica da Alemanha.
Em janeiro, Cris Staicu Ph.D. (docente em início de carreira, CISPA) entrou em contato conosco para falar sobre sua pesquisa em NodeJS e JavaScript. O estudo conduzido por Staicu e sua equipe se concentrou em questões interessantes de segurança em ambientes JavaScript e NodeJS, como vulnerabilidades de poluição de protótipo, escapes de sandbox em JS e vulnerabilidades de baixo nível em C/C++ nas extensões nativas do NodeJS.
Junto com a CISPA, conseguimos confirmar algumas vulnerabilidades que não eram tão óbvias, comunicá-las aos responsáveis pela manutenção para que fossem corrigidas, além de atribuir CVEs e publicar avisos de segurança.
Nesta publicação, vamos apresentar algumas das vulnerabilidades que encontramos com a CISPA e convidar outras instituições acadêmicas a colaborar conosco para tornar o mundo do código aberto mais seguro para todos.
Gadgets para escapar do sandbox do NodeJS
A primeira vulnerabilidade em que trabalhamos foi uma vulnerabilidade de escape de sandbox.
Se você não conhece o termo “sandbox”, ele se refere a um ambiente, processo ou máquina em que podemos executar coisas sem nos preocupar com as implicações de segurança. Por exemplo, ao lidar com arquivos ou código fornecidos pelo cliente sem sanitização.
Neste caso, a equipe de Cris encontrou uma biblioteca JS com um sandbox que podia ser contornado. A biblioteca reportada, notevil e sua derivada argencoders-notevil, permitia que a equipe de Cris contornasse o sandbox explorando uma vulnerabilidade de poluição de protótipo.
A PoC desse problema é assim:
Embora a PoC não pareça prejudicial à primeira vista, uma vulnerabilidade semelhante na mesma biblioteca já havia sido reportada anteriormente e pode resultar em RCE em ambientes NodeJS ou XSS em navegadores.
Como a biblioteca já foi descontinuada (mas ainda é usada por muita gente), a equipe de Cris precisava da nossa ajuda para emitir um CVE e avisar os responsáveis pela manutenção. Caso você não saiba, a Snyk é uma CNA oficial, o que nos permite emitir CVEs quando necessário. Assim, emitimos o CVE-2021-23771 para alertar futuros desenvolvedores sobre essa vulnerabilidade.
Confusão de tipos em extensões nativas do NodeJS
Como o foco da CISPA eram as vulnerabilidades de confusão de tipos entre aplicações NodeJS e extensões em C para o mecanismo do NodeJS, colaboramos nesse tema. A maioria dos experimentos da CISPA sobre confusão de tipos provocou falhas no mecanismo V8, então as duas equipes quiseram investigar e entender melhor o problema.
Como exemplo, vamos usar a biblioteca libxmljs. Se você não conhece, a libxmljs é usada para analisar XML e utiliza nos bastidores o binário nativo libxml.
Veja um trecho do exemplo básico de uso da biblioteca, copiado do README:
No entanto, conseguimos derrubar toda a aplicação com a seguinte PoC:
Como é possível derrubar a aplicação usando uma entrada fornecida pelo usuário, apesar dos blocos try/catch existentes, temos um ponto de entrada para um ataque de DoS.
A execução do código do bloco anterior gera o seguinte rastreamento de pilha:
Uma investigação mais aprofundada com o GDB nos ajudou a entender que o mecanismo subjacente espera receber um argumento do tipo String, mas, como descobrimos, ao receber um objeto, tenta convertê-lo em string.
No exemplo acima, o método toString não pode ser invocado (pois se trata apenas de um número). O V8 não consegue lidar com isso e gera uma exceção. No entanto, como essa exceção ocorre no V8, os blocos try/catch não funcionam — e a aplicação inteira é encerrada.
Junto com a CISPA, entramos em contato com os responsáveis pela manutenção e divulgamos a vulnerabilidade de forma responsável, registrando-a como CVE-2022-21144.
Convite à colaboração
Adoraríamos colaborar com outras instituições acadêmicas como a CISPA, e essa parceria oferece várias vantagens. Descobrir vulnerabilidades é uma coisa; divulgá-las é outra — especialmente quando estão em bibliotecas de código aberto. Nossa equipe dedicada de analistas e pesquisadores pode ajudar você a verificar e compreender o impacto completo de uma vulnerabilidade. Nosso processo garante que ela seja divulgada de forma responsável, discreta e profissional. Além disso, como a Snyk é uma CNA, contamos com um sistema especial de acompanhamento e podemos manter quem reportou e os responsáveis pela manutenção em sintonia, informando ambas as partes o tempo todo.
Por isso, fique à vontade para entrar em contato conosco na próxima vez que descobrir uma nova vulnerabilidade. Será um prazer ajudar nos processos de confirmação e divulgação.
Mantenha-se seguro!
