Introducción
El 15 de marzo de 2025, equipos de seguridad de StepSecurity, Aikido Security y Socket reportaron un ataque de supply chain contra cuatro repositorios del ecosistema Laravel Lang: laravel-lang/lang, laravel-lang/http-statuses, laravel-lang/attributes y laravel-lang/actions. A diferencia de los ataques típicos que publican versiones maliciosas de paquetes, los atacantes reescribieron etiquetas Git existentes para apuntar a commits en forks controlados por ellos. Esto permitió que Composer instalara automáticamente código malicioso al descargar versiones que parecían legítimas.
El vector de ataque explotó una combinación de permisos comprometidos en GitHub y el mecanismo de etiquetado de versiones, que es crítico en entornos de desarrollo donde los paquetes de localización se instalan masivamente. Según Aikido Security, se vieron afectadas 233 versiones en tres repositorios, mientras que Socket estimó que 700 versiones históricas podrían haber sido impactadas. El malware resultante, un infostealer escrito en PHP y Go, recolectó credenciales de AWS, Kubernetes, Vault, GitHub, Slack, VPNs y hasta configuraciones de .env, cifrándolas y enviándolas a un servidor de command and control (C2) en flipboxstudio[.]info.
Qué ocurrió
El abuso de las etiquetas Git como vector de infección
El ataque no modificó el código fuente original de los repositorios, sino que reescribió las etiquetas Git para que apuntaran a commits maliciosos en forks del mismo proyecto. Este método es particularmente sigiloso porque:
- No requiere cambios en el código fuente: Las etiquetas Git en repositorios de terceros (como Laravel Lang) son confiables porque se asumen como verificadas por la comunidad.
- Se ejecuta automáticamente al instalar con Composer: Al hacer
composer require laravel-lang/lang, el sistema descarga el código asociado a la etiqueta, que ahora redirige a un commit malicioso. - Comparten identidad falsa: Todas las versiones maliciosas usan el mismo autor falso (
Mero) y los mismos archivos modificados (src/helpers.php), lo que sugiere que los atacantes tenían acceso de escritura a nivel de organización en GitHub.
El proceso de reescritura comenzó a las 22:32 UTC con laravel-lang/lang (el paquete principal, con 502 etiquetas) y terminó a las 00:00 UTC con laravel-lang/actions. Los paquetes afectados incluyen:
| Paquete | Versiones afectadas (según Aikido) | Descripción |
|---|---|---|
