Gestionar un registro de código abierto significa resolver problemas urgentes. La cuenta de otro mantenedor es comprometida, otro paquete malicioso. La eliminación siempre va un upload por detrás. El trabajo nunca termina, y la mayoría de los registros, gestionados por equipos pequeños con pocos recursos, a menudo están demasiado sobrecargados para hacer mucho más que mantenerse al día. Pero últimamente, hemos estado viendo cambios más positivos en el mundo del código abierto, con ecosistemas realizando los cambios estructurales que impiden que un tipo de ataque funcione en absoluto.
El pequeño equipo que mantiene Packagist.org y Composer, el registro y gestor de paquetes del mundo PHP, ha estado realizando un trabajo de seguridad deliberado y preventivo, y haciendo mejoras significativas. Aikido apoya firmemente este esfuerzo. El feed Intel de Aikido impulsa el bloqueo de malware en Composer para las descargas. Está activado por defecto para Composer 2.10 y versiones superiores para todos. Esto se suma a una serie de otros cambios que Packagist hizo y está haciendo, cada uno trabajando para acabar con categorías enteras de ataques en lugar de perseguir paquetes individuales.
Estamos empezando a ver esta tendencia de mejoras en los registros de paquetes, y estamos entusiasmados de poder apoyar estas iniciativas. Los desarrolladores de PHP pueden estar más tranquilos ahora, sabiendo que hay más salvaguardas implementadas para evitar que instalen malware accidentalmente.
Bloqueo de malware en Composer
El logro más sencillo es evitar que los usuarios instalen una versión de paquete que ya se sabe que es maliciosa. Gracias a Aikido Intel, Composer ahora sabe qué versiones han sido marcadas y no las instalará.
Cuando Aikido marca una versión de paquete maliciosa, esa marca reside dentro de los metadatos del paquete que Composer descarga. El marco de políticas de dependencias de Composer 2.10 extrae la versión marcada del pool de resolución, por lo que <code>composer update</code>, <code>composer require</code> y <code>composer create-project</code> no la seleccionarán. La comprobación más importante es la de <code>composer install</code>, porque una versión marcada después de que se escribiera su lockfile fallará en la siguiente instalación. Si, por alguna razón, un usuario aún quiere descargar un paquete bloqueado, puede anularlo manualmente.
Esta integración funciona porque es:
- Abierto: El feed que Aikido proporciona a Packagist tiene licencia CC-BY, por lo que la protección no está ligada a un contrato de seis cifras, y la puerta permanece abierta para que otros proveedores de datos se integren. La seguridad que solo los bien financiados pueden permitirse no nos protege.
- Activado por defecto: Una protección que requiere que la gente se adhiera no protege a casi nadie (porque es difícil conseguir que la gente se adhiera). Los valores por defecto son donde reside la seguridad del ecosistema, y el valor por defecto de la versión 2.10 no requiere nada de los usuarios para que se beneficien.
- Suficientemente rápido: Las versiones maliciosas suelen ser eliminadas en pocas horas, por lo que un feed que las marca en minutos protege a los usuarios en la ventana entre la detección y la eliminación. Dado que el bloqueo solo funciona cuando se detecta algo, una detección lenta no ayudaría mucho.
- Automatizado: Debido a que el paquete malicioso se bloquea tan pronto como Aikido lo detecta, no hay retraso adicional esperando a que alguien ponga en la lista negra o elimine el paquete manualmente, por lo que los usuarios están protegidos más rápidamente.
Integrar la detección de Aikido en cada instalación fue solo una de las mejoras que Packagist ha implementado recientemente.
Cerrando puertas en lugar de parcheando agujeros
A continuación, el re-etiquetado. Publicar en Packagist siempre ha significado empujar una etiqueta git, y el registro extrae aquello a lo que apunta esa etiqueta. Ese sistema permitió a los atacantes que secuestraron una cuenta de confianza re-etiquetar una versión publicada y apuntarla a código malicioso, de modo que ese número de versión ahora lleva una carga útil (lo que vimos en el reciente ataque a Laravel-Lang). La respuesta de Packagist, la inmutabilidad de la versión estable, significa que una versión estable publicada ya no puede ser reescrita. Eso pone fin a los ataques de re-etiquetado en su totalidad. GitHub tiene el equivalente, pero lo hizo opcional. Packagist lo hizo obligatorio.
Finalmente, intentar que la gente actualice el software es una tarea ardua. Un bloqueo por defecto solo ayuda a las personas que ejecutan una versión actual de Composer, y muchas personas no lo hacen. Una imagen CI o un agente de IA a menudo ejecuta una versión de hace años, por lo que Private Packagist puede requerir una versión actual de Composer para conectarse. También se niega a servir los archivos de una versión marcada a cualquier cliente, antiguo o nuevo.
Packagist.org aún no ha terminado, y tienen algunas mejoras de seguridad en camino. Planean una edad mínima de lanzamiento, lo que mitigaría los ataques que dependen de una ventana corta antes de que la detección los alcance (mientras tanto, puedes obtener una protección similar con Aikido Safe Chain, también gratuito). También están creando una propiedad organizativa, lo que permitirá la MFA obligatoria, así como lanzamientos por etapas, que npm lanzó recientemente.
Avanzando hacia registros de paquetes más seguros
Esta no es solo una historia de PHP. Como mencionamos, npm se está moviendo en la misma dirección con la publicación por etapas, pero también desactivando los scripts de instalación automáticos. PyPI hizo obligatoria la 2FA y construyó un sistema de cuarentena, y crates.io y RubyGems adoptaron la publicación de confianza a través de un diseño compartido de OpenSSF. Los ecosistemas se están moviendo en la dirección correcta. Queremos ver mucho más de esto, y más rápido, y seguimos apoyando donde podemos.
¿Eres desarrollador PHP? Los clientes de Composer anteriores a la versión 2.10 no disponen de esta característica, así que asegúrate de actualizar hoy si aún no lo has hecho. ¿No utilizas PHP? Aikido Safe Chain es una herramienta de código abierto que también evita la instalación de paquetes nuevos o maliciosos antes de que lleguen a tu dispositivo.
Independientemente de los ecosistemas de los que dependas, puedes consultar lo que Aikido Intel está detectando en la red. El feed es público y gratuito en intel.aikido.dev.

