Un importante ataque a la cadena de suministro afectó a NPM (Javascript) después de que 17 paquetes populares de Gluestack '@react-native-aria', con más de un millón de descargas, se vieran comprometidos e incluyeran código malicioso que actúa como un troyano de acceso remoto (RAT).
BleepingComputer determinó que la vulneración comenzó el 6 de junio a las 16:33 EST, cuando se publicó una nueva versión del paquete @react-native-aria/focus en NPM. Desde entonces, 17 de los 20 paquetes de Gluestack @react-native-aria se han visto comprometidos en NPM, y los actores de amenazas publicaron una nueva versión hace apenas dos horas.

El ataque a la cadena de suministro fue descubierto por la empresa de ciberseguridad Aikido Security, que descubrió código ofuscado inyectado en el archivo lib/index.js para los siguientes paquetes:
Package Name | Version | Weekly Downloads |
@react-native-aria/button | 0.2.11 | 51,000 |
@react-native-aria/checkbox | 0.2.11 | 81,000 |
@react-native-aria/combobox | 0.2.10 | 51,000 |
@react-native-aria/disclosure | 0.2.9 | 3 |
@react-native-aria/focus | 0.2.10 | 100,000 |
@react-native-aria/interactions | 0.2.17 | 125,000 |
@react-native-aria/listbox | 0.2.10 | 51,000 |
@react-native-aria/menu | 0.2.16 | 22,000 |
@react-native-aria/overlays | 0.3.16 | 96,000 |
@react-native-aria/radio | 0.2.14 | 78,000 |
@react-native-aria/switch | 0.2.5 | 477 |
@react-native-aria/toggle | 0.2.12 | 81,000 |
@react-native-aria/utils | 0.2.13 | 120,000 |
@gluestack-ui/utils | 0.1.17 | 55,000 |
@react-native-aria/separator | 0.2.7 | 65 |
@react-native-aria/slider | 0.2.13 | 51,000 |
@react-native-aria/tabs | 0.2.14 | 70,000 |
Estos paquetes son muy populares, con aproximadamente 1.020.000 descargas semanales, lo que los convierte en un ataque masivo a la cadena de suministro con consecuencias generalizadas.
La misma firma Aikido Security descubrió ya en el mes de mayo el compromiso de un paquete NPM llamado "rand-user-agent". El paquete fue infectado con rutinas de descargas de un RAT y los investigadores confirmaron que todo aquel que utilizara el paquete sería infectado por transición.
El código malicioso está altamente ofuscado y se adjunta a la última línea del código fuente del archivo, con muchos espacios, por lo que no es fácil de detectar al usar el visor de código del sitio web de NPM.
Aikido informó que el código malicioso es casi idéntico a un troyano de acceso remoto presente en otra vulnerabilidad de NPM que descubrieron el mes pasado. El análisis del investigador de la campaña anterior explica que el troyano de acceso remoto se conectará al servidor de comando y control de los atacantes y recibirá comandos para ejecutar.
Estos comandos incluyen:
- cd - Change current working directory
- ss_dir - Reset directory to script’s path
- ss_fcd:<path> - Force change directory to <path>
- ss_upf:f,d - Upload single file f to destination d
- ss_upd:d,dest - Upload all files under directory d to destination dest
- ss_stop - Sets a stop flag to interrupt current upload process
- Any other input - Treated as a shell command, executed via child_process.exec()
El troyano también secuestra la ruta PATH de Windows anteponiendo una ruta falsa de Python (%LOCALAPPDATA%\Programs\Python\Python3127) a la variable de entorno PATH, lo que permite al malware anular silenciosamente comandos legítimos de Python o PIP para ejecutar binarios maliciosos.
El investigador de seguridad de Aikido, Charlie Eriksen, ha intentado contactar con Gluestack para informarle sobre la vulnerabilidad creando issues de GitHub en cada uno de los repositorios del proyecto. El creador de las librerías, la firma GlueStack, ha marcado como obsoletos los paquetes para evitar el indeseado efecto de eliminar una dependencia y romper los miles de proyectos que hacen uso de ellas. Una maniobra paradójica, en la que se necesita un paquete, pero este está infectado, y se marca como obsoleto para llamar la atención y hacer que el administrador lo actualice.
GlueStack ha revocado un token de acceso utilizado para publicar los paquetes comprometidos, que ahora están marcados como obsoletos en NPM. "Desafortunadamente, no fue posible anular la publicación de la versión comprometida debido a los paquetes dependientes", publicó un desarrollador de GlueStack en GitHub. "Como medida de mitigación, desactivé las versiones afectadas y actualicé a la etiqueta más reciente para que apunte a una versión anterior y segura".
Aikido también atribuye este ataque a los mismos actores de amenazas que comprometieron otros cuatro paquetes de NPM a principios de esta semana: biatec-avm-gas-station, cputil-node, lfwfinance/sdk y lfwfinance/sdk-dev.
Actualización: Tras publicar esta noticia, se descubrió que otro paquete de NPM de GlueStack, @react-native-aria/tabs, estaba comprometido, lo que elevó el total de descargas semanales a más de un millón.
Fuente: BC