Cadena de suministro
¿Qué es el typosquatting?
El typosquatting es un ataque que registra un nombre parecido a otro popular y espera a que alguien lo escriba mal. Empezó con los dominios web. En el software, los atacantes publican paquetes maliciosos con nombres como crossenv en lugar de cross-env, y una sola errata en un comando de instalación ejecuta su código en el equipo de un desarrollador o en un pipeline de CI.
Actualizado el
Cómo funciona el typosquatting de paquetes
- Elige un objetivo. El atacante escoge un paquete popular, en el que incluso una tasa pequeña de erratas acaba sumando.
- Registra un nombre cercano. Difiere en una letra, un guion que falta, un carácter intercambiado o un sufijo verosímil.
- Oculta la carga maliciosa. El paquete suele envolver al auténtico, de modo que todo sigue funcionando y nada parece ir mal.
- Se ejecuta al instalar. Los gestores de paquetes pueden ejecutar scripts durante la instalación, así que el código se ejecuta antes de que nadie lo invoque, con acceso a variables de entorno y tokens.
- Roba y se propaga. Las credenciales robadas permiten al atacante publicar más paquetes o llegar a más sistemas.
Técnicas habituales de typosquatting
| Técnica | Paquete real | Imitación |
|---|---|---|
| Separador omitido | cross-env |
crossenv |
| Sufijo añadido | jquery |
jquery.js |
| Letras intercambiadas | ffmpeg |
ffmepg |
| Letra omitida | mongoose |
mongose |
| Prefijo añadido | sqlite |
node-sqlite |
Todas las imitaciones anteriores proceden de una campaña real, que se describe a continuación.
Un ejemplo real: crossenv
En 2017, un usuario de npm llamado hacktask publicó crossenv, que imitaba al popular
cross-env. Conservaba el comportamiento del paquete real y además enviaba al servidor del atacante las
variables de entorno de quien lo instalaba. En un build, los tokens residen en las variables de entorno.
El análisis de Snyk descubrió que era uno de
más de 30 paquetes maliciosos de la misma cuenta, y que pasó inadvertido durante unas dos semanas hasta que un
ingeniero lo detectó.
Por qué los asistentes de programación con IA lo empeoran
Un asistente de IA puede sugerir un paquete que no existe. Si un atacante registra ese nombre, la siguiente persona que acepte la sugerencia instalará el malware. A esto a veces se le llama slopsquatting. Los agentes automatizados que instalan dependencias sin que una persona lea el nombre aumentan aún más lo que está en juego.
Typosquatting frente a confusión de dependencias
Ambos explotan cómo se resuelven los nombres de paquetes, pero el error es diferente.
| Typosquatting | Confusión de dependencias | |
|---|---|---|
| De quién es el error | Una persona escribe mal un nombre | Un sistema de build elige el registro equivocado |
| El nombre | Parecido al de un paquete público | Idéntico al de un paquete privado e interno |
| Cómo se impone | Alguien lo instala por accidente | Una versión pública con un número más alto tiene prioridad |
| Principal defensa | Lockfiles y revisión de las dependencias nuevas | Paquetes con ámbito y una configuración del registro que mantenga privados los nombres internos |
La confusión de dependencias se hizo famosa en 2021, cuando el investigador Alex Birsan la utilizó para ejecutar código dentro de más de 35 organizaciones, entre ellas Apple, Microsoft y PayPal, en el marco de programas de bug bounty o con su permiso.
Cómo prevenir el typosquatting
-
Instale a partir de un lockfile en CI. Use
npm ciy sus equivalentes. Así, una errata solo puede llegar a través de un cambio revisado. Consulte lo que hace y lo que no hace un lockfile. - Revise las dependencias nuevas en las pull requests. Fíjese en el propio nombre y lea el diff del lockfile en lugar de saltárselo.
- Compruebe antes de instalar. Compare el nombre con la documentación del propio proyecto y desconfíe de un paquete con pocas descargas, una primera publicación reciente o sin enlace al repositorio.
- Limite los scripts de instalación. Desactívelos donde su build lo permita.
- Espere antes de adoptar paquetes nuevos. Los paquetes maliciosos suelen detectarse y retirarse poco después de aparecer.
- Limite a qué puede acceder un build. Un build que solo puede comunicarse con hosts conocidos no puede enviar sus secretos a un atacante, aunque se ejecute un paquete malicioso. Consulte la política de egress de GitHub Actions.
- Compruebe cada sugerencia de la IA. Confirme que un paquete existe y que es el que quería antes de instalarlo.
Tenga en cuenta que un paquete de typosquatting no tiene CVE el día en que aparece, por lo que un escaneo SCA basado en avisos no lo señalará. Para más información, consulte las buenas prácticas de seguridad de la cadena de suministro de software.
Typosquatting de dominios
La forma original del ataque, también llamada URL hijacking, registra un dominio como la versión mal escrita de un banco o de una página de inicio de sesión. Los visitantes que se equivocan al escribir la dirección llegan a una copia del sitio creada para robar credenciales o servir malware. Las defensas son distintas: registre las erratas habituales de sus propios dominios, vigile los registros de dominios parecidos y use un gestor de contraseñas, que no autocompletará en el dominio equivocado.
Cómo limita CRACI los daños
CRACI no detecta nuevos paquetes maliciosos por su comportamiento o reputación, así que use un firewall de paquetes o una herramienta de análisis de comportamiento para ello. Lo que hace es contenerlos. Como su runner de GitHub Actions, aplica una política de egress que bloquea las conexiones que su build no necesita, de modo que un paquete que roba secretos no tiene adónde enviarlos, incluso cuando nadie haya visto antes el ataque. Cada paquete que descargó un job queda registrado, así que, una vez conocido un ataque, puede ver qué builds lo descargaron, y las versiones con una CVE publicada se señalan y pueden bloquearse con controles de política. Consulte qué es un ataque a la cadena de suministro.
Typosquatting: preguntas frecuentes
¿Qué es el typosquatting en palabras sencillas?
Es registrar un nombre casi igual a otro popular, como un paquete o un sitio web, y esperar a que alguien lo escriba mal. La imitación distribuye entonces malware o roba credenciales.
¿Qué ejemplo hay de typosquatting?
En 2017, el paquete de npm crossenv imitó al popular cross-env. Funcionaba como el paquete real y además enviaba las variables de entorno de los usuarios al servidor del atacante.
¿Cuál es la diferencia entre typosquatting y confusión de dependencias?
El typosquatting depende de que una persona escriba mal el nombre de un paquete público. La confusión de dependencias usa el nombre exacto de un paquete privado y depende de que un sistema de build descargue en su lugar una versión pública.
¿Es ilegal el typosquatting?
Publicar malware o robar credenciales es ilegal en la mayoría de los lugares. El typosquatting de dominios también puede infringir el derecho de marcas, como la Anticybersquatting Consumer Protection Act de EE. UU.
¿Qué es el slopsquatting?
Una variante en la que un atacante registra un nombre de paquete que los asistentes de IA tienden a inventar. Quien instala el paquete sugerido obtiene el código del atacante.
¿Cómo se detecta el typosquatting?
Revise las dependencias nuevas por su nombre y sus metadatos, y utilice una herramienta que compare los nombres de los paquetes con los más populares o que analice su comportamiento. Los escáneres basados en avisos solo ayudan una vez que el paquete se ha notificado.
Contenga el paquete que no detectó
Bloquee las conexiones salientes que sus builds no necesitan y conserve un registro de cada paquete que descargaron.
Reservar una demo