L’atac a Laravel-Lang que va comprometre centenars de versions
Centenars d’etiquetes de paquets Laravel-Lang van apuntar a codi maliciós. Així funcionava l’atac i així es pot reduir el risc.
Un atac a diversos paquets comunitaris de Laravel va demostrar que PHP no està al marge de la crisi de seguretat de les dependències. Midudev repassa dues campanyes diferents: la reescriptura massiva d’etiquetes de Laravel-Lang i la inserció de scripts maliciosos en projectes distribuïts a través de Packagist. Després amplia el focus a npm, PyPI i Crates.io.
El missatge central és correcte: el risc no pertany a un llenguatge, sinó al procés que converteix un paquet de tercers en codi executat dins l’ordinador d’un desenvolupador o un sistema d’integració contínua. Alguns detalls del vídeo, però, se superposen i convé ordenar-los.
1. Què va passar amb Laravel-Lang
A 00:00, Midudev presenta l’incident com l’atac a PHP que ningú no esperava. Els objectius van ser laravel-lang/lang, http-statuses, attributes i actions: projectes de la comunitat, no components oficials del nucli de Laravel.
La investigació tècnica de StepSecurity situa l’activitat entre el 22 i el 23 de maig de 2026. Algú amb accés d’escriptura a l’organització va moure centenars d’etiquetes històriques perquè apuntessin a commits maliciosos. Això és especialment perillós perquè una versió aparentment antiga i coneguda podia deixar de correspondre al codi que els usuaris havien auditat.
El codi afegia src/helpers.php a autoload.files de Composer. Aquesta modalitat carrega el fitxer tan bon punt l’aplicació inclou vendor/autoload.php; no cal cridar cap classe infectada. En una prova aïllada, StepSecurity va observar la descàrrega d’una segona fase, l’intent d’exfiltrar secrets del procés i l’eliminació ràpida dels fitxers temporals.
El vídeo parla de més de 700 versions afectades. La xifra varia segons el moment i la font perquè es van comptar etiquetes i paquets diferents, però l’ordre de magnitud és real. L’important no és el número exacte: l’atacant va alterar l’historial publicat, no només una versió nova fàcil d’evitar.
2. Packagist, Composer i els scripts de Node
A 01:35, Midudev passa a una altra campanya que afectava vuit paquets PHP. En repositoris aparentment normals s’havia introduït un package.json amb un postinstall que descarregava i executava programari maliciós.
Cal distingir les eines. Composer resol les dependències PHP i Packagist n’és el registre principal; package.json i postinstall pertanyen a l’ecosistema de Node. Composer no executa per defecte un postinstall de npm. El perill apareix quan un projecte PHP inclou també una fase de construcció frontal i el desenvolupador o el CI executa npm install al repositori compromès.
Al vídeo, Midudev obre un exemple que descarrega un binari de Linux, el desa com un fals servei i l’executa en segon pla. La descripció de l’incident coincideix amb aquest mecanisme. Les dues campanyes comparteixen l’objectiu —executar codi de confiança aparent—, però utilitzen activadors diferents: l’autoload de Composer en Laravel-Lang i els scripts de cicle de vida de npm en els altres repositoris.
3. Per què instal·lar dependències és un punt crític
A 03:00, el vídeo celebra una proposta perquè npm deixi d’executar automàticament scripts d’instal·lació. La direcció es va concretar després: el canvi anunciat per a npm 12 bloqueja per defecte scripts de dependències i exigeix autoritzar explícitament els paquets que els necessiten.
És una millora important perquè converteix l’execució silenciosa en una decisió visible. També pot trencar compilacions natives o paquets legítims que depenen de install, postinstall o node-gyp. Els equips han de preparar una llista d’autoritzacions, no limitar-se a actualitzar el gestor i esperar que tot funcioni.
Composer té una superfície diferent. Els plugins i scripts es poden restringir, però Laravel-Lang va abusar del mecanisme d’autocàrrega que una aplicació necessita per funcionar. Per això cap única opció elimina tot el risc: el lockfile, els hashes immutables, la revisió de canvis i el control de xarxa continuen sent necessaris.
4. No és un problema exclusiu de JavaScript
A 04:00, Midudev recorda campanyes contra npm, PyPI i Crates.io. Els atacants poden comprometre el compte d’un mantenidor, robar un token de publicació, moure una etiqueta Git o crear un nom gairebé idèntic al d’una biblioteca popular.
El premi és molt gran. Un procés de desenvolupament pot veure claus SSH, tokens de GitHub, credencials d’AWS, variables d’entorn, carteres de criptomonedes i permisos del clúster on s’executa. Si el paquet infecta un runner de CI, pot intentar robar credencials de publicació i convertir una víctima en el següent esglaó de la campanya.
La popularitat tampoc no és una garantia. Un paquet desconegut facilita el typosquatting, però una biblioteca legítima amb milions de descàrregues és encara més atractiva si se’n compromet el mantenidor. La confiança s’ha de basar en identitat, procedència i integritat del codi concret, no només en el nom.
5. Mesures pràctiques i resposta a una possible infecció
A 05:00, el vídeo recull recomanacions atribuïdes al grup atacant TeamPCP: fixar dependències a un hash, usar tokens de privilegi mínim i restringir extensions de l’IDE. Són consells útils, encara que no cal esperar que els atacants els formulin.
En un projecte PHP, s’ha de conservar composer.lock, revisar qualsevol regeneració i verificar si conté els quatre paquets afectats amb commits del període maliciós. En Node, npm ci, el lockfile i la desactivació de scripts redueixen sorpreses, però el lockfile només protegeix si la referència és immutable i el registre no en pot canviar el contingut.
Els tokens de CI haurien de tenir abast i durada mínims. També convé separar compilació i desplegament, impedir sortides de xarxa inesperades i registrar DNS, processos i connexions. Un escàner de dependències pot avisar, però no substitueix aquestes barreres.
Si un entorn va carregar una versió afectada de Laravel-Lang, StepSecurity recomana tractar com a exposat qualsevol secret accessible, rotar credencials i buscar connexions al domini de comandament documentat. Reinstal·lar el paquet sense canviar les claus no repara una filtració anterior.
Conclusions
L’atac no demostra que PHP sigui insegur ni que npm sigui l’únic culpable. Demostra que una cadena de subministrament moderna connecta repositoris, etiquetes, registres, gestors, scripts, runners i credencials. Comprometre un sol punt pot donar execució en centenars de projectes.
La defensa més efectiva és acumulativa: dependències immutables, permisos mínims, aprovació d’scripts, procedència verificable, xarxa restringida i capacitat de rotar secrets ràpidament. L’actualització automàtica continua sent útil, però ja no pot ser confiança automàtica.
Contrast i context
Fonts consultades
- 01
-
02
StepSecurity Laravel-Lang supply chain attack
- 03
-
04
The Hacker News Packagist supply chain attack infects eight packages
Font de treball
Transcripció amb marques de temps
Consulta la transcripció
-
0:00
, obre el vídeo en una pestanya nova
Y lo que pasa en las mejores familias, tenemos que hablar de los ataques en el ecosistema de PHP. PHP, sí, muchas veces hablamos de JavaScript, mucha gente se queja de JavaScript. De hecho, me hizo mucha mucha gracia el comentario de Damián Catanzaro, no me salía el nombre del chico este. Damián Catanzaro me hizo mucha gracia porque, a ver si os lo encuentro a este este comentario, porque el otro día, por todos los ataques que
-
0:24
, obre el vídeo en una pestanya nova
había en el ecosistema de JavaScript comentaba esto, no estoy para volver a PHP con jQuery y luego dice, "No se está salvando un solo framework, se cancela volver a PHP. Nos quedamos en HTML con GQuery. ¿Y por qué? Porque resulta que hemos tenido un nuevo ataque, la cadena de suministro en la organización del Arabel. Más de 700 versiones históricas entre diferentes paquetes mantenidos por la comunidad del Arabel fueron
-
0:54
, obre el vídeo en una pestanya nova
comprometidos con puertas traseras para ejecución de código en remoto. algunos paquetes bastante importantes que son descargados cientos de miles de veces en el ecosistema de PHP, en Lara, Lara, Lang L, http statuses, attributes, actions, un montón y ha sido pues bastante bastante preocupante, bastante preocupante. Así que sí, esto es del otro día, algunas versiones que afectaban a la 12, 13, 14x, 15x, un
-
1:26
, obre el vídeo en una pestanya nova
montón de versiones y con un impacto bastante bastante bestia. Así que nada, ahí lo tenéis. Todas las versiones publicadas publicaron un montón, más de 700 versiones. O sea, una verdadera salvajada lo que hicieron de publicar versiones. Obviamente si instalaste una de estas, estás bien [ __ ] Pero lo peor es que no solo pilló el Arabel, sino que también pilló Composer, PHP Composer. Y en este caso el ataque de
-
1:54
, obre el vídeo en una pestanya nova
estos ocho paquetes fue por culpa, no por culpa, sino que utilizaron pack Jason. El tema es que Composer utiliza los packagons para ejecutar algunos scripts y a partir de eso aquí podéis ver los post install que estaba utilizando para inyectar el script y también poder infectarte. De hecho, aquí podemos ver, a ver si lo encuentro, githaub.com. Esto es lo que estaba ejecutando. Vamos
-
2:20
, obre el vídeo en una pestanya nova
a ver si lo podemos buscar por aquí. A ver si hay alguno infectado todavía. Aquí está. Aquí lo tenéis. ¿Ves este tracking expos de Facebook? Aquí podéis ver que lo tiene infectado. Todo esto está infectado. Todo esto está infectado. O sea, tú te descargas uno de estos repositorios, cualquiera de estos repositorios y ya está [ __ ] Está [ __ ] directamente. Y a lo mejor es un repositorio que, yo que sé. Mira, Travel
-
2:43
, obre el vídeo en una pestanya nova
Guide. Pues en este Travel Guide, en este package Jason, pues han metido aquí este package Jason, han metido aquí este post install y ahí está [ __ ] Entonces, ¿podemos probarlo? Claro que sí, Mateo. Puedes hacer un pmstol, pero por suerte tenemos una buena noticia, algo que me alegro ya que ya hace falta. Todos estos ataques son siempre los mismos, que es que con npm install se ejecuta por defecto el post install y es
-
3:06
, obre el vídeo en una pestanya nova
un rollo. Bueno, pues por suerte van a hacer por fin hay un RFC, es un request for changes para npm para que por fin por defecto no se ejecuten scripts, los preinstall, los install y los post install y que tengas manualmente que aprobar los scripts. Esto llegaría a npm por fin, ¿vale? para que no se ejecute automáticamente. ¿Qué es lo que ocurre hoy? Y es que, como ya sabéis, tanto los ataques de Shai Hulut, que es muy
-
3:36
, obre el vídeo en una pestanya nova
parecido a lo que estamos viendo ahora, como el ataque en Axios, en chalk, en the back y un montón de paquetes que han sido afectados, ha sido exactamente por lo mismo y parece ser que va a llegar eventualmente a MPM. Así que nada, vamos a ver si por fin ocurre, porque ya hace falta que esto pase para que por defecto sea seguro en PM. O sea, es un vector de ataque que hace demasiado tiempo que están utilizando, que están que están
-
4:00
, obre el vídeo en una pestanya nova
aprovechándose. Ya yo creo que es el momento de dejar esto atrás. Y lo peor, amigos, es que sé que mucha gente dice, "No, es que esto es el ecosistema de JavaScript, que no sé qué, no sé cuánto." Bueno, pues tenemos no ataque solo a PM, sino que también en PP, el Python Package Index, el sitio donde puedes encontrar paquetes de Python, pues también tienes. Y también en crates.Oio en el registro de paquetes de
-
4:25
, obre el vídeo en una pestanya nova
Rust. En todos, en todos, en todos han estado metiendo un montón de paquetes, más de 384 paquetes, que lo que hacían era robarte los cryptoallets, los las llaves SSH, credenciales AWS, tokens de GitHub y tal, o sea, tanto en el registro de Rust, en el de Python y como hemos visto también en el de PHP. O sea, que al final tienes que tener cuidado. Muchas veces lo hacen con paquetes que se parecen a paquetes que son paquetes
-
4:55
, obre el vídeo en una pestanya nova
conocidos. En otros pues paquetes utilizando paquetes que son conocidos y que les roban los tokens. Así que nada, ha llegado a todos, a Python, a Rust y también a MPM. Tengan mucho, pero mucho cuidado. ¿Y cómo pueden tener cuidado? Pues lo responde el Team PCP. El Team PCP es este grupo de hackers que ha estado hackeando un montón el ecosistema de de JavaScript y de Python. y le han hecho una entrevista donde le han
-
5:21
, obre el vídeo en una pestanya nova
preguntado qué deberían hacer los defensores para detener los ataques a la cadena de suministro, que son todos los ataques que han estado pasando estas semanas. Y su consejo es fijar versiones a un hash específico. Esto, por cierto, es una cosa que yo os he comentado muchas veces. Usar tokens de privilegio mínimo. Esto es de cajón. En lugar de utilizar un token que tenga eh superpoderes, utilizar tokens que sean
-
5:44
, obre el vídeo en una pestanya nova
muy específicos en concreto. Restringir extensiones del IDE, de esto también os comenté el otro día. Y luego textualmente dijeron, "La empresa Socket detectará el Marwell antes de que el paquete siquiera llegue a tu máquina." Y esto es porque Socket Security, esta gente de aquí, son los que siempre están detectando rápidamente el malware que llega a un montón de ecosistemas. tienen una herramienta que se llama SFW
-
6:07
, obre el vídeo en una pestanya nova
que te puede ayudar a detectar este tipo de paquetes para evitar que lleguen. No, no vamos a poner esto en la página de testimonios porque Feroz trabaja en Socket Security, pero al mismo tiempo si aún no estás utilizando Socket Security para proteger tu cadena de suministro, ¿a qué estás esperando? Curioso que han hecho una entrevista a los hackers y que encima te den consejos para no infectarte. Ya es el colmo del colmo.