Un ataque de dependencia permite a execución de código en PayPal, Microsoft, Apple, Netflix, Uber e outras 30 empresas

Hai poucos días lanzouse un método sorprendentemente sinxelo que permite atacar dependencias nas aplicacións que se desenvolven empregando repositorios internos de paquetes. Os investigadores que identificaron o problema puideron executar o seu código nos servidores internos de 35 empresas, incluíndo PayPal, Microsoft, Apple, Netflix, Uber, Tesla e Shopify.

Os hacks realizáronse como parte dos programas Bug Bounty, en coordinación coas empresas atacadas, e os autores xa recibiron bonos de 130.000 dólares por identificar vulnerabilidades.

O método baséase no feito de que moitas empresas usan dependencias estándar do repositorio de NPM, PyPI e RubyGems nas súas aplicacións internas, así como dependencias internas que non se distribúen nin descargan publicamente dos seus propios repositorios.

O problema é que os xestores de paquetes como npm, pip e gem intentan descargar as dependencias internas das empresas, incluso dende os repositorios públicos. Por un ataque, só tes que definir os nomes dos paquetes con dependencias internas e crear os teus propios paquetes cos mesmos nomes nos repositorios públicos de NPM, PyPI e RubyGems.

O problema non é específico de NPM, PyPI e RubyGems, e tamén se manifesta noutros sistemas como NuGet, Maven e Yarn.

A idea do método proposto xurdiu despois de que un investigador notase accidentalmente que nun código de acceso público publicado en GitHub, moitas empresas non eliminan a mención de dependencias adicionais dos seus ficheiros manifestos empregado en proxectos internos ou cando se implementan funcionalidades estendidas. Atopáronse rastros similares no código JavaScript para servizos web, así como nos proxectos Node.JS, Python e Ruby de moitas empresas.

As principais filtracións estaban relacionadas coa inserción do contido dos ficheiros package.json en código JavaScript dispoñible públicamente durante o proceso de compilación, así como co uso de elementos de ruta reais nas chamadas require (), que se poden usar para xulgar os nomes de dependencia.

A exploración de varios millóns de dominios corporativos revelou varios miles de nomes de paquetes JavaScript que non estaban no repositorio NPM. Unha vez compilada unha base de datos de nomes de paquetes internos, o investigador decidiu realizar un experimento para piratear a infraestrutura das empresas participantes nos programas Bug Bounty. Os resultados foron sorprendentemente eficaces e o investigador puido executar o seu código en moitos ordenadores e servidores de desenvolvemento encargados de construír ou probar baseados en sistemas de integración continua.

Ao descargar dependencias, os xestores de paquetes npm, pip e gem instalaron principalmente paquetes dos repositorios públicos principais NPM, PyPI e RubyGems, que se consideraban de maior prioridade.

Ignorouse a presenza de paquetes similares cos mesmos nomes nos repositorios de empresas privadas sen mostrar ningún aviso nin causar fallos que podería chamar a atención dos administradores. En PyPI, a prioridade de descarga influíu no número de versión (independentemente do repositorio, descargouse a versión máis recente do paquete). En NPM e RubyGems, a prioridade só dependía do repositorio.

O investigador colocou paquetes en repositorios de NPM, PyPI e RubyGems que cruzan os nomes das dependencias internas atopadas, engadindo código ao script que se executa antes da instalación (preinstalado en NPM) para recompilar información sobre o sistema e enviar a información recibida. ao host externo.

Para transmitir información sobre o éxito do hack, evita os cortalumes que bloquean o tráfico externo, o método de organización de comunicacións de canles encubertas a través do protocolo DNS. O código que se executaba resolveu o host no dominio atacante baixo o control do dominio atacante, o que permitiu recompilar información sobre operacións exitosas no servidor DNS. Pasouse información sobre o host, o nome de usuario e a ruta actual.

O 75% de todas as execucións de código rexistradas asociáronse a descargas de paquetes NPM, principalmente debido ao feito de que había significativamente máis nomes internos de módulos JavaScript que os nomes de dependencias Python e Ruby.

Fuente: https://medium.com/


O contido do artigo adhírese aos nosos principios de ética editorial. Para informar dun erro faga clic en aquí.

Sexa o primeiro en opinar sobre

Deixa o teu comentario

Enderezo de correo electrónico non será publicado. Os campos obrigatorios están marcados con *

*

*

  1. Responsable dos datos: Miguel Ángel Gatón
  2. Finalidade dos datos: controlar SPAM, xestión de comentarios.
  3. Lexitimación: o seu consentimento
  4. Comunicación dos datos: os datos non serán comunicados a terceiros salvo obrigación legal.
  5. Almacenamento de datos: base de datos aloxada por Occentus Networks (UE)
  6. Dereitos: en calquera momento pode limitar, recuperar e eliminar a súa información.