Em fevereiro de 2020 foi liberada uma atualização para as versões 10x, 12x e 13x do Node.js e que causou uma certa ansiedade de discussão na comunidade em todo o globo. Ela veio para corrigir 3 problemas de servidores HTTP, principalmente aqueles que utilizam parser's nativos, como é o caso do mais utilizado e conhecido atualmente, o Express. Ambos os 3 problemas são encontrados na forma de interpretar uma conexão HTTP entre 2 (ou mais) pontas, podendo deixar os servidores vulnerareis ao ataque tanto em seu formato TSL quanto no inseguro HTTP.
Quais foram os problemas encontrados ?
O principal dos 3 se deve à uma má interpretação do header "Transfer-Encoding". Este header tem como objetivo deixar claro ao servidor como os dados do payload serão formatados, sendo valores possíveis para este: chunked, compress, deflate, gzip, identity. E todos podendo ser combinados usando uma virgula, como "chunked, compress" que neste caso seria interpretado como ou sendo "chunked" ou sendo "compress".
O ataque poderia ser feito colocando uma formatação que não existe, como "eeee" e passando como body uma outra request. O servidor então terminava de interpretar o header do request e parava, enviando como response dados sensíveis, dando assim vazão ao ataque, que como no próprio release-note do node diz: "The payloads can be crafted by an attacker to hijack user sessions, poison cookies, perform clickjacking, and a multitude of other attacks depending on the architecture of the underlying system."
O problema foi evidenciado pelo engenheiro de software do Ebay, Ethan Rubinson!
Os relatados deste problema podem ser encontrados neste link:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15605
O segundo problema que iremos entender é também um problema na forma de interpretar o header do HTTP, ou HTTPS. Dessa vez quem revelou o problema à comunidade foi Alyssa Wilk, que trabalha no Google.
Neste caso a interpretação dos parser's nativos tratavam de forma errada os espaços em branco de alguns headers que até então não "tratava" os valores passados para o cabeçalho, com isso alguns ataques conseguiam fazer os servidores ignorarem alguns algoritmos de segurança que checavam a integridade da conexão entre os nós envolvidos.
Esse ataque está relocionado no link abaixo:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15606
Agora vamos para o terceiro problema de segurança corrigido, onde dessa vez tivemos 2 "autores" que informaram o problema, Rogier Schouten e Melvin Groenhoff.
Este ataque consiste em configurar uma chamada TLS, ou seja HTTPS, onde seja passado a propriedade subjectAltName com 19 strings como certificado da conexão, isso fará com que o servidor caia e possibilitaria uma invasão por queda (ou um ataque de negação de serviço também) caso o servidor tente ler o certificado do nó que faz a requisição.
Como esse caso é um pouco mais técnico e só acontecia em servidores que utilizassem o HTTPS e que o certificado estivesse mal configurado, o problema pode ter sido pouco utilizado pelos atacantes.
Vocês podem acompanhar usando o link:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15604
Mesmo sendo uma atualização importantíssima para os servidores e todos os programas afetados, os mantenedores do Node.js ainda deixaram claro que para quais-quer fins você pode usar a flag "--insecure-http-parser" para não levar essas atualizações para o seu sistema, mas é de suma importância entender os riscos e que os desenvolvedores da plataforma dizem que não seria uma boa prática.
Legal, como eu faço para ver as correções ?
O mais legal da comunidade Node.js é a facilidade de ver o trabalho dos mantenedores, você pode ficar atento ao próprio site nodejs.org e entrar nas versões e acompanhar os change logs de cada versão. Além de consultar vários artigos sobre as versões e atualizações da plataforma, no site mesmo.
Outra ótima maneira é acessar o repositório no github e verificar os commits :) https://github.com/nodejs/node
O mais legal de tudo, é que como tudo é documentado, testado e explicado dentro do próprio repositório, os casos de teste também podem ser rodados e avaliados por vocês.
Como é o caso deste link, que mostra o commit feito para testar a solução do primeiro problema que apresentei aqui:
https://github.com/nodejs/node/commit/eea3a7429b
Além desses canais, de tempos em tempos são feitas reuniões online da comunidade e dos mantenedores e tudo é postado no canal do Youtube. Exemplo de post: https://www.youtube.com/watch?v=mj33ibz7Ias
Comunidade acima de tudo
Essas correções de segurança e os problemas que foram encontrados (até os quais ainda não temos solução) podem ser encontrados (e reportados por vocês) em sites como o https://cve.mitre.org/index.html e é muito importante, para todo o ecossistema, que a comunidade esteja ativa e troque bastante figurinha sobre todos os assuntos.
Se os desenvolvedores que citei aqui não tivessem relatado os problemas e os mantenedores do Node correrem para os corrigir, talvez sua aplicação sofresse os ataques e você nunca iria entender à fundo o que houve.
Contribua com a sua plataforma, com sua comunidade, com sua linguagem de programação favorita. O importante aqui é você participar :)
Top comments (0)