Ataque a la cadena de suministro en npm: fezbox oculta malware en códigos QR

CyberSecureFox 🦊

Investigadores de Socket identificaron en el registro de npm el paquete malicioso fezbox, que emplea una técnica poco habitual para entregar su carga útil: oculta JavaScript ofuscado dentro de una imagen QR descargada desde un servidor controlado por los atacantes. Antes de ser retirado por los administradores de npm, el paquete acumuló al menos 327 descargas, un recordatorio de la persistente exposición de la cadena de suministro de JavaScript a campañas de malvertising y typosquatting.

Paquete malicioso en npm: fezbox y su técnica con códigos QR

De acuerdo con Socket, fezbox incorpora instrucciones para recuperar un archivo JPG con un código QR y procesarlo de forma programática, desencadenando la segunda fase de la intrusión: la ejecución de código ofuscado. Según BleepingComputer, la lógica principal se concentra en dist/fezbox.cjs (por ejemplo, en la versión 1.3.0). Aunque el archivo está minificado, un formateo básico permite comprender su comportamiento con mayor claridad.

Cadena de infección en dos etapas ocultas en una imagen

Etapa 1: descarga y parseo de un QR “denso”

El paquete inicia la obtención de una imagen QR inusualmente “densa”. Este QR no está pensado para ser leído por una cámara de móvil; su finalidad es el parsing automatizado por el propio paquete, que extrae instrucciones ofuscadas del patrón del código.

Etapa 2: retraso, comprobaciones y ejecución del payload

Tras una espera de 120 segundos y varias verificaciones de entorno —incluida la detección de entornos de desarrollo o virtualizados—, se extrae el contenido y se ejecuta. La funcionalidad maliciosa busca document.cookie para robar cookies de sesión y, cuando están presentes, intenta capturar usuario y contraseña. Los datos se envían mediante POST por HTTPS al endpoint https://my-nest-app-production[.]up[.]railway[.]app/users. Si no hay información que merezca la pena, el código finaliza sin ruido, dificultando su detección.

Evasión y ocultamiento: reverso de cadenas y URL camufladas

Fezbox recurre a técnicas simples pero eficaces para evadir análisis estático: reversa de cadenas para ocultar tokens sensibles (por ejemplo, “drowssap” → “password”) y URL invertidas para eludir firmas que buscan patrones como http(s)://. Estas tácticas, combinadas con la ofuscación y la carga diferida, complican tanto el análisis automático como el supervisado.

Exfiltración de datos y blancos potenciales

El robo de cookies abre la puerta al secuestro de sesiones y al acceso no autorizado a áreas autenticadas de aplicaciones web. El riesgo aumenta en proyectos donde dependencias de terceros se ejecutan en el cliente o se incluyen en el bundle sin controles estrictos. La exfiltración hacia dominios aparentemente legítimos (como subdominios en plataformas PaaS) añade una capa de camuflaje de tráfico, ya que las solicitudes a imágenes o a servicios conocidos suelen pasar sin alertas.

Implicaciones para la cadena de suministro de JavaScript

El uso de imágenes como portadoras de payload ayuda a enmascarar el canal bajo peticiones de recursos estáticos. Incidentes previos como event-stream (2018) o el compromiso de ua-parser-js (2021) demostraron que la popularidad de npm convierte a la cadena de suministro en un objetivo sistemático. Este caso refuerza la necesidad de políticas de “confianza mínima” y validación continua de dependencias, especialmente en pipelines automatizados de CI/CD.

Medidas de mitigación recomendadas para equipos de desarrollo

Endurecer la gestión de dependencias: fijar versiones con lockfiles, utilizar espejos confiables, aplicar herramientas SCA y revisar scripts postinstalación. Limitar o deshabilitar la ejecución de scripts de terceros en entornos de build.

Proteger cookies de sesión: activar HttpOnly, Secure, SameSite. El flag HttpOnly impide el acceso vía document.cookie, mitigando robos incluso en escenarios cercanos a XSS.

Monitorear tráfico y telemetría: vigilar descargas inusuales de JPG seguidas de ejecución dinámica de código o de POST hacia dominios desconocidos. Registrar y bloquear destinos sospechosos desde CI/CD mediante políticas deny-by-default.

Higiene de la cadena de suministro: auditar periódicamente dependencias, eliminar paquetes no utilizados y aplicar el principio de mínimo conjunto de bibliotecas. Aislar entornos de build y restringir conexiones salientes.

Si su proyecto pudo incorporar fezbox, revise logs de red, busque llamadas a Railway.app relacionadas y asegure que las cookies críticas tienen HttpOnly. La combinación de vigilancia continua, controles en CI/CD y endurecimiento de cookies reduce de forma significativa la superficie de ataque ante nuevas variantes que abusen de imágenes, QR u otros vectores encubiertos.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.