Dependency Confusion: um grande problema com os gerenciadores de pacotes

npm, pip, gems. Gerenciadores de pacotes modernos são incríveis e nos ajudam a escrever software, mas como tudo, eles também podem nos trazer grandes problemas.

Alex Birsan conta em detalhes como hackeou Apple, Microsoft e mais um monte de empresas usando uma técnica que ele mesmo chama de Dependency Confusion.


O desenvolvimento de software moderno possui em um de seus pilares a reutilização de código.
Nos últimos anos essa reutilização ficou ainda mais fácil com o advento dos package managers.
npm no mundo JavaScript, pip no mundo Python, gems no mundo Ruby e por aí vai.
É uma maravilha. Poder não reescrever a roda e procurar por soluções de problemas que já foram resolvidos é muito produtivo.
Mas nem tudo é perfeito.

O que Alex chama de Dependency Confusion é basicamente um método de explorar esse mundo de gerenciadores de pacotes a procura de uma vulnerabilidade que quando olhamos parece ser algo trivial de ser resolvido, porém, como Alex mostra, nem todo mundo estava preparado.
A conveniência do sistema de pacotes abre portas que deveriam permanecer fechadas.

Em resumo, Alex fez um estudo e mergulhou em pacotes utilizados por grandes empresas.
Muitas vezes um código pode estar usando dependências externas e internas.
Veja por exemplo no caso de um package.json de um projeto do PayPal:

O que temos aqui é a mistura de dependências.
E se alguma dessas dependências internas e privadas também existam de forma pública?
Pois é, essa foi a ideia.

Alex fez isso da forma mais legal possível. Ao identificar a vulnerabilidade, ele virou um verdadeiro caçador de recompensas.
Isso mesmo. Nada mais justo do que ser pago por alertar e resolver um possível grande problema.
Normalmente grandes empresas possuem programas de recompensas para quem consegue achar alguma vulnerabilidade, e não é pouca coisa não hein.
Alex relata que algumas das recompensas chegaram a US$30.000.

Com o bolso cheio e provavelmente com um sentimento de dever cumprido, Alex causou um grande impacto no mundo dos package managers.
Será que estamos indo no caminho certo ao adotar massivamente essa solução no desenvolvimento de software?
Nos dias de hoje praticamente todo software utiliza alguma solução externa, um pequeno pacote helper, um framework, uma biblioteca.
Ao menos fica aí o alerta, até porque não é toda empresa que pode dar uma grande recompensa para que um entusiasta descubra suas vulnerabilidades.

Artigo completo e com muito mais detalhes interessantes (em inglês): https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610


Gostou do conteúdo? Considere apoiar a BrazilJS!