Ir al contenido
Guide

Axios recibió una puerta trasera: paquetes de 5 npm para reemplazar con API HTTP

| 9 min read

Un actor vinculado a Corea del Norte envió un RAT dentro de axios 1.14.1 a 70 millones de instaladores semanales. Cinco paquetes npm de propósito único que puede eliminar hoy y reemplazar con llamadas API HTTP.

Server room with network cables representing supply chain infrastructure
Photo by Taylor Vick on Unsplash

El 31 de marzo de 2026, un operador vinculado a Corea del Norte publicó dos versiones con puerta trasera de axios a npm. Las versiones 1.14.1 y 0.30.4 se enviaron con una dependencia posterior a la instalación denominada plain-crypto-js que sacó un implante RAT específico de plataforma de sfrclak[.]com:8000. Los paquetes estuvieron activos durante tres horas. Axios obtiene 70 millones descargas semanales. Haz los cálculos.

Cada trabajo de CI que se ejecutó npm install durante esa ventana envió una carga útil a su compilación ambiente. Se filtraron secretos en las variables de entorno; Los tokens privados de GitHub se acostumbraron. lanzamientos de seguimiento perfectos; portátiles para desarrolladores en ejecución npm install localmente obtuve una RAT. El incidente pasó por alto 2FA porque la máquina del mantenedor ya estaba comprometida a través de un campaña de ingeniería social dirigida. 2FA en la cuenta npm no hace nada cuando el atacante es propietario la terminal que ejecuta npm publish.

No puedes eliminar esta clase de ataque, pero puedes reducir el radio de explosión. Cada paquete npm eso hace una pequeña cosa; validar un correo electrónico, analizar un número de teléfono, eliminar HTML, generar un código QR, firmando un JWT; es un paquete que puede eliminar y reemplazar con una llamada HTTPS a una API que Control mediante llave giratoria. Un paquete comprometido se ejecuta antes de que usted pueda reaccionar. Una clave API comprometida deja de funcionar en segundos.

Aquí hay cinco paquetes npm que puedes reemplazar esta semana, con la API HTTP que hace lo mismo. además de un protector de CI que impide que nuevos ganchos posteriores a la instalación lleguen a su archivo de bloqueo.

Audite su superficie de dependencia npm actual

Antes de borrar algo, sepa lo que tiene. This shell pass surfaces production dependencies con ganchos de instalación y comprueba si las versiones envenenadas de axios están en algún lugar de su árbol:

Si aparece alguna de las versiones de axios en su archivo de bloqueo, rote cada secreto de la máquina o CI afectado trabajo tenía acceso. No "revisar los registros". Girar. Supongamos que la exfiltración ocurrió en los 180 minutos. entre publicación y eliminación. Los secretos que se filtraron no se pueden revelar.

Google Threat Intelligence atribuye la operación a UNC1069, el mismo actor que ha ejecutado antes WAVESHAPER campañas. Su libro de jugadas apunta a las computadoras portátiles de mantenimiento a través de phishing, luego utiliza las credenciales del mantenedor para publicar. Su defensa tiene que asumir que al menos un mantenedor de al menos un departamento transitivo está a un phishing de ser un implante sistema de entrega.

Reemplazo 1: validador de correo electrónico → /v1/correo electrónico/validar

validator, email-validator, deep-email-validator, y disposable-email-domains aparecen en una gran proporción de los flujos de registro. juntos suman aproximadamente medio megabyte de peso de instalación, sus propios árboles transitivos y una lista mantenida de dominios desechables que se vuelven obsoletos en cuestión de semanas.

La API verifica la sintaxis, los registros DNS MX y una lista de dominios desechables en vivo en una sola llamada. Intercambio Los dos paquetes se ven así:

Pierde la capacidad de validar sin conexión. Obtienes una verificación MX mantenida, una lista desechable en vivo, y cero paquetes con ganchos postinstalación en su árbol. Para registro, pago y webhook campos de correo electrónico, esa compensación favorece a la API.

Reemplazo 2: libphonenumber-js → /v1/teléfono

libphonenumber-js es un puerto de Google libphonenumber. Pesa 147KB minificado. La versión "mini" cae a 79 KB pero pierde metadatos en la mayoría de los países. Los metadatos completos El paquete devuelve el peso a 2 MB sin empaquetar. En Cloudflare Workers o un Lambda frío, esto es Latencia real que pagas en cada invocación.

One POST devuelve formato E.164, país, número nacional, tipo de línea y zona horaria. si el numero no es válido, data.valid es false y el resto es nulo. Tu lado del servidor El flujo de registro llama a esto entre "leer formulario" y "escribir en la base de datos". El viaje de ida y vuelta API de 60 ms se encuentra dentro de la ventana de escritura de base de datos existente.

Reemplazo 3: qrcode → /v1/qr/generar

La qrcode El paquete npm en sí está bien: 34 KB, sin enlace postinstalación. Lo que no está bien es el canvas dependencia de pares a la que te empujan la mitad de los tutoriales, que envuelve código nativo, instala node-gyp y tiene diez años de CVE en su cadena de herramientas de compilación. cada nativo npm dep es una costura de la cadena de suministro.

La respuesta es SVG sin formato. Conéctelo a un archivo, introdúzcalo en una plantilla de factura o preséntelo en línea en un componente de React con dangerouslySetInnerHTML. Sin módulos nativos, sin compilación cadena de herramientas, sin árbol transitivo.

Reemplazo 4: jsonwebtoken → /v1/jwt/generar y /v1/jwt/decodificar

jsonwebtoken es una de las bibliotecas JWT más copiadas en Node. También es la biblioteca. la mayoría de la gente lo configura mal: algoritmo incorrecto, falta de reclamo de audiencia, sin vencimiento. Un algoritmo equivocado verificar la llamada más un encabezado controlado por un atacante reintroduce el JWT de la era 2015 none vulnerabilidad. La API aplica listas blancas de algoritmos y rechaza tokens sin firmar en el punto final:

Utilice esto para tokens de corta duración emitidos por un servicio backend: enlaces de restablecimiento de contraseña, únicos descargar URL, tokens portadores de servicio a servicio. No utilice un servicio externo para la sesión del usuario. JWT en la ruta activa de cada solicitud autenticada; para aquellos, mantenga una biblioteca verificada en proceso y bloquear el algoritmo.

Reemplazo 5: html a texto → /v1/html-a-texto/convertir

html-to-text, sanitize-html, node-html-parser, y sus Los amigos existen porque cada API que acepta contenido de usuario eventualmente necesita eliminar HTML para convertirlo en texto sin formato. vistas previas, resúmenes de correo electrónico o indexación de búsqueda. Su peso combinado es de 500 KB a 1,2 MB; ellos tiran parse5 o htmlparser2 a través de la puerta, que cada uno tiene su propio superficie mantenedora.

Para una producción más rica, /v1/html-to-markdown devuelve Markdown con sabor a GitHub y /v1/html-sanitize devuelve HTML limpio con una lista de permitidos configurable. Elige el que que coincida con cómo su consumidor intermedio quiere almacenar el contenido.

Agregue un protector de CI que bloquee nuevos ganchos posteriores a la instalación

Eliminar paquetes es un trabajo que se realiza una sola vez. Mantenerse delgado es continuo. Esta verificación de acciones de GitHub falla el PR si una actualización del archivo de bloqueo introduce una nueva postinstall o preinstall gancho en cualquier parte del árbol:

La verificación es económica, se ejecuta en cada PR y obliga a una revisión humana antes de que llegue cualquier nuevo script. Combínalo con npm config set ignore-scripts true sobre CI y listas permitidas explícitas para paquetes que sabes que necesitas esbuild-postinstalación de estilo (TypeScript, Puppeteer, bcrypt).

A qué renunciaste y cuándo devolverlo

Mover la validación a una llamada HTTP tiene costos reales. Los estás cambiando por una dependencia menor. superficie:

Compensación paquete npm API HTTP
Estado latente Microsegundos 50 a 150 ms desde el borde
Uso sin conexión No
Instalar riesgo La postinstalación ejecuta código arbitrario Sin paso de instalación
Revocación Reconstruir, republicar, redespliegue Gire la clave API en segundos
Pista de auditoría Ninguno por defecto Solicitar registro por llamada
Deriva de versión Anclar o renovar Encabezado de versión, contrato estable

La respuesta correcta es "ambas, con intención". Mantenga las bibliotecas de rutas críticas en proceso (sesión JWT verificación, cripto primitivas, middleware de autenticación). Mover la larga cola de servicios públicos de propósito único fuera de su archivo de bloqueo y en un punto final HTTPS firmado que pueda revocar.

Conclusiones clave

  • Supongamos que un mantenedor está a un phishing de un implante. Axios obtuvo 70 millones semanales descargas y aún tenía su cuenta npm comprometida a través de un ataque de ingeniería social en un computadora portátil personal.
  • Audite los ganchos posteriores a la instalación hoy. Cualquier departamento que ejecute código arbitrario durante npm install es una costura en la cadena de suministro. Haga un inventario y luego elimínelos o incluyalos en la lista de permitidos.
  • Elimine primero los paquetes de propósito único. Correo electrónico, teléfono, QR, firma JWT, HTML conversión; cada uno tiene un reemplazo HTTP de una línea con una clave revocable.
  • Rotar, no investigar, después de la exposición. Si axios envenenados aterrizara en tu árbol, rotar cada secreto que el entorno afectado tocó. La exfiltración ocurre en minutos.
  • Añade un guardia de CI. Bloquear nuevo postinstall ganchos de aterrizar en su lockfile sin una revisión humana. El compromiso de Axios habría hecho tropezar a esta guardia.

Botoi proporciona reemplazos HTTP para los cinco paquetes anteriores y alrededor de 145 paquetes más de propósito único. utilidades: hash, generación de UUID, pruebas de expresiones regulares, conversión de marcas de tiempo, validación de esquemas JSON, generación de códigos de barras, renderizado de PDF y el resto. Una clave API, 5 solicitudes/min en el nivel gratuito, no instalar ganchos. Navega por el documentos interactivos o cablear el servidor MCP en tu Agente de codificación de IA para llamar a los mismos puntos finales desde Claude Code o Cursor sin salir del editor.

FAQ

¿Qué pasó con el paquete axios npm en marzo de 2026?
Entre las 00:21 y las 03:20 UTC del 31 de marzo de 2026, un atacante utilizó una cuenta de mantenedor comprometida para publicar axios 1.14.1 y 0.30.4 con una dependencia postinstalación maliciosa llamada Plain-crypto-js. La dependencia descargó implantes RAT específicos de la plataforma desde sfrclak[.]com:8000. Google Threat Intelligence atribuye la operación a UNC1069, un actor nexo con Corea del Norte. Los paquetes estuvieron activos durante aproximadamente tres horas, tiempo suficiente para aterrizar en cachés de CI y computadoras portátiles de desarrolladores en todo el mundo.
¿Reemplazar los paquetes npm con API HTTP reduce el riesgo?
Reduce la superficie de ataque de dos maneras. Primero, elimina un enlace posterior a la instalación que ejecuta código arbitrario en su servidor de compilación. En segundo lugar, mueve la lógica de validación de la computadora portátil del desarrollador a un punto final firmado solo HTTPS que controla mediante la rotación de claves API. Un paquete envenenado se ejecuta antes de que puedas reaccionar; una clave API revocada deja de funcionar en segundos.
¿Es una llamada HTTP más lenta que un paquete npm local?
Para una sola llamada en una solicitud en frío, sí; La latencia típica de la API de Botoi es de 50 a 150 ms desde un cliente en América del Norte hasta el borde de Cloudflare. Para la mayoría de los flujos del lado del servidor (registro, pago, procesamiento de webhooks) que se superponen con las llamadas a la base de datos que ya realiza, no agrega nada medible. Para rutas de alto rendimiento, almacene en caché la respuesta mediante hash de entrada para el mismo perfil de latencia que un paquete local.
¿Cómo audito mi repositorio en busca de paquetes npm riesgosos ahora mismo?
Ejecute npm audit --omit=dev para mostrar las dependencias de producción, luego inspeccione cualquier paquete con un enlace postinstalación o preinstalación usando los scripts npm ls y npm view {name}. Los paquetes que hacen una pequeña cosa (validación de correo electrónico, generación de QR, firma JWT, análisis de teléfonos, eliminación de HTML) son fuertes candidatos para pasar a una llamada HTTP. Los paquetes que realizan criptografía o recuperan activamente contenido de la red son los objetivos de auditoría de mayor prioridad.
¿Qué pasa si un proveedor de API HTTP se ve comprometido en lugar de npm?
El radio de explosión es menor y la detección más rápida. Usted controla la clave API y puede revocarla en una sola llamada. Su proveedor expone una página de estado, un RSS de incidente y respuestas firmadas a través de HTTPS. Compare eso con un paquete que se ejecuta dentro de su compilación donde la detección requiere leer cada enlace posterior a la instalación en su árbol de dependencia transitiva. Tampoco el riesgo es cero; uno te da palancas, el otro no.

Empieza a construir con botoi

150+ endpoints de API para consultas, procesamiento de texto, generacion de imagenes y utilidades para desarrolladores. Plan gratuito, sin tarjeta de credito.