Tecnología

Así ‘hackearon’ algunas de las empresas más importantes del mundo como Apple, Microsoft, PayPal, Uber o Tesla

Ha conseguido hackear a algunas de las empresas más importantes del mundo. Auténticos transatlánticos empresariales y tecnológicos que gastan ingentes cantidades de dinero en ciberseguridad. Y lo ha hecho encontrando un fallo de seguridad tan tonto como peligroso. Se llama Alex Birsan y ha pirateado a Apple, Microsoft, Uber, PayPal o Tesla.

El propio hacker, que ya lleva ganados más de 130.000 dólares en recompensas, cuenta su historia en este blog. Explica Birsan que algunos lenguajes de programación como Python tienen sencillos instaladores que suelen estar en repositorios de código público donde cualquiera los puede descargar.

Por ejemplo, comenta, Node tiene npm, Phyton usa PyPl –Python Package Index–, y Ruby’s gems se puede encontrar en RubyGems. Ninguno de los servicios de alojamiento de paquetes, señala, puede garantizar que todo el código esté libre de malware. Investigaciones anteriores, recuerda, han demostrado que la typosquatting –un ataque que aprovecha las versiones de errores tipográficos de los nombres de paquetes populares– puede ser muy eficaz para acceder a ordenadores de manera aleatoria alrededor del mundo.

Birsan y su compañero Justin Gardner –@Rhynorater– pusieron el ojo en PayPal. Encontraron en GitHub una parte muy interesante del código fuente de Node.js. El código estaba destinado al uso interno de PayPal y, en su archivo package.json, parecía contener una combinación de dependencias públicas y privadas: paquetes públicos de npm, así como nombres de paquetes no públicos, probablemente alojados internamente por PayPal. Estos nombres no existían en el registro público de npm en ese momento.

Entonces, apunta, se hicieron varias preguntas:

Sin más preámbulos, subraya, “comencé a trabajar en un plan para responder estas preguntas”. La idea era cargar mis propios paquetes de Nodo ‘maliciosos’ en el registro de npm con todos los nombres no reclamados, que ‘llamarían a casa’ desde cada ordenador en el que estuvieran instalados. Si alguno de los paquetes terminara instalándose en servidores propiedad de PayPal, o en cualquier otro lugar, el código dentro de ellos se lo notificaría de inmediato.

Deja claro Birsan que “todas las organizaciones seleccionadas durante esta investigación han otorgado permiso para que se pruebe su seguridad, ya sea a través de programas públicos de recompensas de errores o mediante acuerdos privados. No intente este tipo de prueba sin autorización”.

Afortunadamente, npm permite que el código arbitrario se ejecute automáticamente al instalar el paquete, lo que le facilitó la creación de un paquete Node que recopila información básica sobre cada máquina en la que está instalado a través de su script de preinstalación.

Para lograr un equilibrio entre la capacidad de identificar una organización en función de los datos y la necesidad de evitar recopilar demasiada información confidencial, se decidió por registrar sólo el nombre de usuario, el nombre de host y la ruta actual de cada instalación única. Junto con las direcciones IP externas, explica, “estos eran datos suficientes para ayudar a los equipos de seguridad a identificar sistemas posiblemente vulnerables en función de mis informes, evitando que mis pruebas se confundan con un ataque real”.

Con la parte básica del plan para hackear a las mayores empresas del mundo ejecutada, indica Birsan, “era el momento de descubrir más posibles objetivos”. Unos días completos de búsqueda de nombres de paquetes privados pertenecientes a algunas de las empresas objetivo revelaron que se podían encontrar muchos otros nombres en GitHub, así como en los principales servicios de alojamiento de paquetes, dentro de paquetes internos que se habían publicado accidentalmente, e incluso en el interior de publicaciones en varios foros de Internet. Sin embargo, el mejor lugar para encontrar nombres de paquetes privados resultó ser… dentro de archivos javascript.

Aparentemente, es bastante común que los archivos internos package.json, que contienen los nombres de las dependencias de un proyecto javascript, se incrusten en archivos de script públicos durante su proceso de compilación, exponiendo los nombres de los paquetes internos. Apple, Yelp y Tesla son sólo algunos ejemplos de empresas que tenían nombres internos expuestos de esta manera.

Durante la segunda mitad de 2020, continúa, “gracias a la ayuda de @streaak y sus notables habilidades de reconocimiento, pudimos escanear automáticamente millones de dominios pertenecientes a estas compañías y extraer cientos de nombres de paquetes javascript adicionales, que aún no se habían reclamado en el registro npm. Luego cargué mi código en paquetes de servicios de hospedaje con todos los nombres encontrados y esperé las devoluciones de llamada”.

Desde errores puntuales cometidos por los desarrolladores en sus propias máquinas, hasta servidores de compilación internos o basados en la nube mal configurados, pasando por tuberías de desarrollo sistémicamente vulnerables, una cosa estaba clara: ocupar nombres de paquetes internos válidos era un método casi seguro para entrar en las redes de algunas de las empresas tecnológicas más grandes que existen.

Este tipo de vulnerabilidad, “que comencé a llamar confusión de dependencia, se detectó en más de 35 organizaciones hasta la fecha, en los tres lenguajes de programación probados. La gran mayoría de las empresas afectadas pertenecen a la categoría de más de 1.000 empleados, lo que probablemente refleja la mayor prevalencia del uso de bibliotecas internas en organizaciones más grandes”.

Debido a que los nombres de dependencia de JavaScript son más fáciles de encontrar, casi el 75 % de todas las devoluciones de llamada registradas provienen de paquetes npm, pero esto no significa necesariamente que Python y Ruby sean menos susceptibles al ataque.

El sistema de compilación del gigante canadiense del comercio electrónico Shopify instaló automáticamente una Ruby gem llamada shopify-cloud. El equipo de Shopify tenía una solución lista y otorgó una recompensa de 30.000 dólares por encontrar el problema.

Otra recompensa de 30.000 dólares provino de Apple, después de que el código en un paquete de Node que cargué en npm en agosto de 2020 se ejecutara en varias máquinas dentro de su red. Los proyectos afectados parecían estar relacionados con el sistema de autenticación de Apple, conocido externamente como ID de Apple. Otras de las empresas afectadas fueron Netflix o Uber.

Subraya Birsan que Microsoft ofrece un servicio de alojamiento de paquetes llamado Azure Artifacts. Como resultado de uno de sus informes, se han realizado algunas mejoras menores en este servicio para garantizar que pueda proporcionar una solución alternativa confiable para las vulnerabilidades de confusión de dependencia. Curiosamente, señala, “este problema no se descubrió probando Azure Artifacts en sí, sino atacando con éxito el propio Office 365 basado en la nube de Microsoft, y del informe salió la recompensa más alta posible de Azure: 40.000 dólares”.

Apúntate a nuestra newsletter y recibe en tu correo las últimas noticias sobre tecnología.

Artículos Relacionados

Deja un comentario

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies