🔥Adquiere tu membresía:  acceso a todos los cursos, videos eliminados, contenidos protegidos, manuales y más. >> Ver Más

Ciberdelincuentes comprometieron el popular framework PyTorch con una dependencia maliciosa

PyTorch identificó una dependencia maliciosa con el mismo nombre que la biblioteca ‘torchtriton‘ del framework. Esto llevó a un compromiso exitoso a través del vector de ataque de confusión de dependencia.

Los administradores de PyTorch advierten a los usuarios que instalaron PyTorch-nightly durante las vacaciones recién pasadas que desinstalen el framework y la dependencia falsificada ‘torchtriton’.

PyTorch permite realizar diversas tareas que van desde la visión por computadora hasta el procesamiento del lenguaje natural. Por ello este framework de aprendizaje automático de código abierto ha ganado prominencia tanto en el ámbito comercial como académico.

La biblioteca maliciosa atacó a los usuarios de PyTorch-nightly

Los usuarios que instalaron PyTorch-nightly entre el 25 y el 30 de diciembre de 2022, deben asegurarse de que sus sistemas no estén comprometidos. Esto según la advertencia del equipo de PyTorch.

La advertencia señala a una dependencia ‘torchtriton’ que apareció durante las vacaciones en el registro Python Package Index (PyPI), el repositorio oficial de software de terceros para Python.

“Desinstale inmediatamente torchtriton y use los binarios nightly más recientes (más recientes que el 30 de diciembre de 2022)”.

Dependencia maliciosa de PyTorch ‘torchtriton’ en PyPI

La dependencia maliciosa ‘torchtriton’ en PyPI comparte el nombre con la biblioteca oficial publicada en el repositorio de PyTorch-nightly. Pero, al obtener dependencias en el ecosistema de Python, PyPI normalmente tiene prioridad, lo que hace que el paquete malicioso se extraiga de tu máquina en lugar del paquete legítimo de PyTorch.

“Dado que el  índice PyPI tiene prioridad, este paquete malicioso se instaló en lugar de la versión de nuestro repositorio oficial. Este diseño permite que alguien registre un paquete con el mismo nombre que uno que existe en un índice de terceros, y pip instalará su versión predeterminada”.

Equipo de PyTorch en un comunicado publicado el 31 de diciembre

En el momento de escribir este artículo, observamos que la dependencia maliciosa ‘torchtriton’ había superado las 2,300 descargas la semana pasada.

Este tipo de ataque a la cadena de suministro se conoce como “confusión de dependencia”. Este tipo de ataque fue reportado por primera vez por BleepingComputer en 2021, justo cuando el hacker ético Alex Birsan popularizó el vector de ataque.

PyTorch afirma que los usuarios de los  paquetes estables de PyTorch  no se vieron afectados por este problema.

Hacker roba archivos confidenciales alegando investigación ética

El ‘torchtriton’ malicioso no solo examina tu sistema en busca de información básica de huellas digitales (como la dirección IP, el nombre de usuario y el directorio de trabajo actual), sino que también roba datos confidenciales:

  • Obtiene información del sistema
    • servidores de nombres de /etc/resolv.conf
    • nombre de host de gethostname()
    • nombre de usuario actual desde getlogin()
    • nombre del directorio de trabajo actual desde getcwd()
    • Variables de entorno
  • Lee los siguientes archivos
    • /etc/hosts
    • /etc/passwd
    • Los primeros 1000 archivos en $HOME/*
    • $HOME/.gitconfig
    • $HOME/.ssh/*

Luego carga todos estos datos, incluido el contenido del archivo, al dominio h4ck.cfd a través de consultas de DNS cifradas utilizando el servidor de DNS wheezy.io.

PyTorch explicó que el binario malicioso ‘triton‘ contenido en el ‘torchtriton‘ falsificado solo se ejecuta cuando el usuario importa el paquete ‘triton’ en su compilación. Esto requeriría un código explícito y no es el comportamiento predeterminado de PyTorch.

El aviso sobre el dominio h4ck.cfd implica que toda la operación es una investigación ética, pero el análisis indica claramente lo contrario.

“Hola, si encontraste esto en tus registros, probablemente se deba a que tu Python estaba mal configurado y era vulnerable a un ataque de confusión de dependencias. Para identificar las empresas que son vulnerables, el script envía los metadatos sobre el host (como su nombre de host y directorio de trabajo actual) para mí. Después de que haya identificado quién es vulnerable e [informado] el hallazgo, se eliminarán todos los metadatos sobre tu servidor”.

Acciones contradictorias

Contrariamente a la redacción del aviso, el binario no solo recopila “metadatos“, sino que roba los secretos antes mencionados, incluidas las claves SSH, gitconfig,  hosts y archivos passwd. Asimismo, el contenido de los primeros 1000 archivos en el directorio HOME.

Investigadores obtuvieron una copia del binario malicioso que, según VirusTotal, muestra una reputación limpia en el momento de escribir este artículo. Pero, no te dejes engañar.

Observamos que, a diferencia de varios paquetes de investigación y explotaciones de PoC que son llamativas en su intención y comportamiento, ‘torchtriton‘ emplea técnicas anti-VM conocidas para evadir la detección. Más importante aún, el payload malicioso está ofuscado y contenido completamente en formato binario, es decir, archivos ELF de Linux. Esto hace que la biblioteca sea un valor atípico cuando se yuxtapone con exploits de confusión de dependencia ética del pasado enviados en texto plano.

También notamos que la muestra lee .bash_history  o una lista de comandos y entradas que el usuario ha ingresado en la terminal, que es otro rasgo exhibido por el malware .

Tampoco será la primera vez que un hacker afirme que sus acciones constituyen una investigación ética, al  mismo tiempo que es atrapado exfiltrando secretos.

A mediados de 2022, las bibliotecas Python y PHP enormemente populares, ‘ctx‘ y ‘PHPass‘ respectivamente, fueron secuestradas y alteradas para robar claves de AWS. El investigador detrás del ataque afirmó más tarde  que se trataba de una investigación ética.

Para evitar dudas, algunos medios contactaron al propietario de h4ck.cfd para conocer su postura. Los registros públicos muestran que el dominio se registró con Namecheap el 21 de diciembre, solo unos días antes de este incidente.

Declaraciones del hacker

A continuación mostramos la declaración completa realizada del propietario del dominio, quien también parece estar detrás del dominio wheezy.io.

Ten en cuenta que la mención de “Facebook” a continuación es relevante dada la concepción de PyTorch en Meta AI.

“Oye, soy yo quien reclamó el paquete torchtriton en PyPi. ¡Ten en cuenta que esto no tenía la intención de ser malicioso!

Entiendo que podría haber hecho un mejor trabajo para no enviar todos los datos del usuario. La razón por la que envié más metadatos es que anteriormente, al investigar problemas de confusión de dependencias, en muchos casos no era posible identificar a las víctimas por su nombre de host, nombre de usuario y CWD. Esa es la razón por la que esta vez decidí enviar más datos, pero reflexionando, esta fue una decisión equivocada y debería haber sido más cuidadoso.

Acepto la culpa y pido disculpas. Al mismo tiempo quiero asegurar que no fue mi intención robar los secretos de nadie. Ya reporté esta vulnerabilidad a Facebook el 29 de diciembre (casi tres días antes del anuncio) luego de haber verificado que la vulnerabilidad efectivamente existe. También hice numerosos informes a través de sus programas en HackerOne a otras empresas  que se vieron afectadas. Si mis intenciones hubieran sido maliciosas, nunca habría llenado ningún informe de recompensas por errores y simplemente habría vendido los datos al mejor postor.

Una vez más, me disculpo por causar interrupciones, aseguro que todos los datos que recibí han sido eliminados.

Por cierto, en mi informe de error a Facebook ya les ofrecí transferirles el paquete PyPi, pero hasta ahora no he recibido ninguna respuesta de ellos”.

Mitigaciones

El equipo de PyTorch cambió el nombre de la dependencia ‘torchtriton’ a ‘pytorch-triton’ y reservó un paquete ficticio en PyPI para evitar ataques similares. El grupo busca reclamar la propiedad del ‘torchtriton’ existente en PyPI para desactivar el ataque actual.

PyTorch cambió el nombre de la dependencia para evitar más ataques 

Para desinstalar la cadena de dependencia maliciosa, los usuarios deben ejecutar el siguiente comando:

$ pip3 uninstall -y torch torchvision torchaudio torchtriton
$ pip3 cache purge

Ejecutar el siguiente comando buscará la presencia de binarios maliciosos y revelará si estás afectado:

python3 -c "import pathlib;import importlib.util;s=importlib.util.find_spec('triton');
affected=any(x.name == 'triton' for x in (pathlib.Path(s.submodule_search_locations[0] 
if s is not None else '/' ) / 'runtime').glob('*'));
print('You are {}affected'.format('' if affected else 'not '))"

El hash SHA256 del binario ELF ‘triton’ es: 2385b29489cd9e35f92c072780f903ae2e517ed422eae67246ae50a5cc738a0e.

Deja un comentario

Adquiere tu Membresía Anual Wiser

Adquiere tu Membresía Anual Wiser y adquiere grandes beneficios

Más información