{"id":11463,"date":"2026-05-13T06:43:34","date_gmt":"2026-05-13T12:43:34","guid":{"rendered":"https:\/\/beaconlab.us\/?p=11463"},"modified":"2026-05-13T06:51:07","modified_gmt":"2026-05-13T12:51:07","slug":"alerta-critica-campana-mini-shai-hulud-exfiltra-secretos-y-se-propaga-via-pipelines-ci-cd-de-tanstack","status":"publish","type":"post","link":"https:\/\/beaconlab.us\/es\/alerta-critica-campana-mini-shai-hulud-exfiltra-secretos-y-se-propaga-via-pipelines-ci-cd-de-tanstack\/","title":{"rendered":"Alerta cr\u00edtica: campa\u00f1a Mini Shai\u2011Hulud exfiltra secretos y se propaga v\u00eda pipelines CI\/CD de TanStack"},"content":{"rendered":"\n<p>Recientemente se report\u00f3 una \u00a0campa\u00f1a de ataque de cadena de suministro bautizada como Mini Shai\u2011Hulud. Se trata de un malware del tipo worm o gusano, que ha comprometido m\u00faltiples paquetes <a>npm<\/a>, empezando por el ecosistema\u00a0@tanstack\/*, publicando versiones maliciosas a trav\u00e9s de los propios pipelines de GitHub Actions de los proyectos utilizando tokens OIDC robados. Estas versiones maliciosas incluyen\u00a0<em>payloads<\/em>\u00a0ofuscados que roban credenciales de CI\/CD, cloud, repositorios y herramientas de desarrollo, se mantienen persistentes en m\u00e1quinas de desarrolladores y se auto\u2011propagan a otros paquetes utilizando tokens npm y OIDC v\u00e1lidos.<\/p>\n\n\n\n<p><strong>npm<\/strong> es el principal registry de paquetes para el ecosistema JavaScript y TypeScript, y se ha convertido en una pieza cr\u00edtica de la cadena de suministro de software moderna. Millones de aplicaciones y pipelines CI\/CD consumen autom\u00e1ticamente nuevas versiones de paquetes publicados en npm, lo que convierte cualquier compromiso de cuentas de mantenedores o de sus pipelines en un vector de impacto masivo y transversal. Esta dependencia estructural hace imprescindible aplicar controles de seguridad adicionales (registries intermedios, validaci\u00f3n de versiones, pol\u00edticas de publicaci\u00f3n y observabilidad) en lugar de confiar ciegamente en que todo lo que llega desde npm es confiable.<\/p>\n\n\n\n<p>La gravedad es&nbsp;<strong>cr\u00edtica<\/strong>&nbsp;porque el worm puede leer memoria del runner de GitHub Actions y extraer absolutamente todos los secretos de un pipeline (incluyendo secretos \u201cmascarados\u201d), abusar de OIDC para publicar nuevos paquetes maliciosos con&nbsp;<strong>SLSA Build Level 3<\/strong>&nbsp;v\u00e1lido, y adem\u00e1s establece persistencia en estaciones de desarrollo e IDEs. En la pr\u00e1ctica, cualquier entorno que haya instalado versiones comprometidas debe asumir&nbsp;<strong>compromiso total de todos los secretos accesibles<\/strong>&nbsp;desde esa m\u00e1quina o pipeline.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Paquete comprometidos<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Paquete<\/strong><strong><\/strong><\/td><td><strong>Ecosistema<\/strong><strong><\/strong><\/td><td><strong>Versiones comprometidas <\/strong><strong><\/strong><\/td><td><strong>Comentario r\u00e1pido<\/strong><strong><\/strong><\/td><\/tr><tr><td>@tanstack\/react-router<\/td><td>npm<\/td><td>1.169.5, 1.169.8<\/td><td>Router React muy utilizado en front\u2011end.<\/td><\/tr><tr><td>@tanstack\/solid-router<\/td><td>npm<\/td><td>1.169.5, 1.169.8<\/td><td>Router para aplicaciones SolidJS.<\/td><\/tr><tr><td>@tanstack\/vue-router<\/td><td>npm<\/td><td>1.169.5, 1.169.8<\/td><td>Router para aplicaciones Vue.<\/td><\/tr><tr><td>@tanstack\/react-start<\/td><td>npm<\/td><td>1.167.68, 1.167.71<\/td><td>Framework full\u2011stack sobre React.<\/td><\/tr><tr><td>@tanstack\/solid-start<\/td><td>npm<\/td><td>1.167.65, 1.167.68<\/td><td>Framework full\u2011stack sobre Solid.<\/td><\/tr><tr><td>@tanstack\/vue-start<\/td><td>npm<\/td><td>1.167.61, 1.167.64<\/td><td>Framework full\u2011stack sobre Vue.<\/td><\/tr><tr><td>@mistralai\/mistralai<\/td><td>npm<\/td><td>2.2.3, 2.2.4<\/td><td>SDK TypeScript oficial de Mistral AI.<\/td><\/tr><tr><td>mistralai<\/td><td>PyPI<\/td><td>2.4.6<\/td><td>SDK Python de Mistral AI.<\/td><\/tr><tr><td>guardrails-ai<\/td><td>PyPI<\/td><td>0.10.1<\/td><td>Librer\u00eda popular para guardrails de LLM.<\/td><\/tr><tr><td>@opensearch-project\/opensearch<\/td><td>npm<\/td><td>3.6.2<\/td><td>Cliente de OpenSearch.<\/td><\/tr><tr><td>@uipath\/cli<\/td><td>npm<\/td><td>1.0.1<\/td><td>CLI de UiPath usada en automatizaci\u00f3n\/RPA.<\/td><\/tr><tr><td>@uipath\/robot<\/td><td>npm<\/td><td>1.3.4<\/td><td>Componente de robot UiPath.<\/td><\/tr><tr><td>@uipath\/project-packager<\/td><td>npm<\/td><td>1.1.16<\/td><td>Paquete clave en proyectos UiPath.<\/td><\/tr><tr><td>@draftlab\/auth<\/td><td>npm<\/td><td>0.24.1, 0.24.2<\/td><td>Auth para aplicaciones DraftLab.<\/td><\/tr><tr><td>@squawk\/airport-data<\/td><td>npm<\/td><td>0.7.4, 0.7.5, 0.7.7<\/td><td>Datos aeron\u00e1uticos, usado en soluciones de aviaci\u00f3n.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Detalles t\u00e9cnicos del ataque<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Vector de compromiso y publicaci\u00f3n de paquetes<\/h3>\n\n\n\n<p>El grupo de amenazas TeamPCP lanz\u00f3 una nueva ola del worm Mini Shai\u2011Hulud dirigida contra TanStack y otros proyectos de alto valor. Para ello, el atacante cre\u00f3 un fork malicioso del repositorio TanStack\/router usando la cuenta voicproducoes y a\u00f1adi\u00f3 dos artefactos clave: un paquete falso @tanstack\/setup y un archivo de gran tama\u00f1o y fuertemente ofuscado llamado tanstack_runner.js. Este paquete @tanstack\/setup se declara como dependencia opcional mediante una URL github: con un commit hash que aparenta pertenecer al repositorio oficial de TanStack, pero que en realidad apunta a ese fork malicioso.<\/p>\n\n\n\n<p>En cada paquete comprometido se observaron dos cambios caracter\u00edsticos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se agreg\u00f3 en&nbsp;package.json&nbsp;un bloque&nbsp;optionalDependencies&nbsp;apuntando a&nbsp;@tanstack\/setup&nbsp;a trav\u00e9s de una URL&nbsp;github:tanstack\/router#&lt;commit-malicioso&gt;.<\/li>\n\n\n\n<li>Se a\u00f1adi\u00f3 un archivo grande&nbsp;router_init.js&nbsp;en la ra\u00edz del paquete, que no deber\u00eda estar presente seg\u00fan el campo&nbsp;files&nbsp;(que solo lista&nbsp;dist&nbsp;y&nbsp;src), evidenciando manipulaci\u00f3n del tarball fuera del proceso de build normal.<\/li>\n<\/ul>\n\n\n\n<p>La publicaci\u00f3n de los paquetes maliciosos no se hizo con credenciales robadas a un maintainer, sino comprometiento el propio&nbsp;<strong>pipeline de GitHub Actions<\/strong>, aprovechando el token&nbsp;<strong>OIDC<\/strong>&nbsp;del runner para publicar directamente en npm. Como parte de la campa\u00f1a, los paquetes maliciosos incluyen&nbsp;<strong>attestations SLSA v1 de nivel 3<\/strong>&nbsp;emitidas por la infraestructura de firmado de npm (Sigstore\/Fulcio\/Rekor), de forma que parecen leg\u00edtimos a pesar de haber sido generados por un pipeline ya comprometido.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Caracter\u00edsticas del gusano y del payload<\/h3>\n\n\n\n<p>El archivo&nbsp;<strong>router_init.js<\/strong>:<\/p>\n\n\n\n<p>(hash SHA\u2011256&nbsp;ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266c) contiene un payload de unas 2,3 MB altamente ofuscado que implementa un&nbsp;<strong>stealer multi\u2011stage con capacidades de worm<\/strong>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Principales capacidades:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ofuscaci\u00f3n avanzada:<\/strong>&nbsp;tres capas de ofuscaci\u00f3n, incluyendo tabla de strings ofuscada, un cifrado de sustituci\u00f3n con PBKDF2\u2011SHA256 y cargas secundarias cifradas con&nbsp;<strong>AES\u2011256\u2011GCM<\/strong>&nbsp;que se descomprimen con&nbsp;Bun.gunzipSync.<\/li>\n\n\n\n<li><strong>Uso del runtime Bun:<\/strong>&nbsp;el payload instala y utiliza&nbsp;<strong>Bun 1.3.13<\/strong>&nbsp;en vez de Node.js, evadiendo herramientas de seguridad centradas en hooks de Node (&#8211;require, etc.).<\/li>\n\n\n\n<li><strong>Scraping de memoria del runner de GitHub Actions:<\/strong>&nbsp;un payload en Python lee&nbsp;\/proc\/&lt;pid&gt;\/mem&nbsp;del proceso&nbsp;Runner.Worker&nbsp;para extraer JSON internos del tipo&nbsp;{\u00abvalue\u00bb:\u00bb&#8230;\u00bb,\u00bbisSecret\u00bb:true}, obteniendo todos los secretos configurados en el workflow, aunque est\u00e9n enmascarados o nunca se escriban a disco.<\/li>\n\n\n\n<li><strong>Robo de credenciales cloud:<\/strong>&nbsp;invoca metadatos de AWS (169.254.169.254&nbsp;IMDSv2), ECS (169.254.170.2), y sockets locales de HashiCorp Vault (127.0.0.1:8200) para obtener credenciales temporales, tokens y secretos.<\/li>\n\n\n\n<li><strong>Recolecci\u00f3n de ficheros de credenciales:<\/strong>&nbsp;recorre m\u00e1s de 100 rutas conocidas para extraer tokens npm, PATs de GitHub, claves de AWS, GCP, Azure, archivos de wallets de criptomonedas, historiales de shell y configuraciones de herramientas de IA y mensajer\u00eda.<\/li>\n\n\n\n<li><strong>Persistencia en estaciones de trabajo:<\/strong>&nbsp;crea archivos en&nbsp;.claude\/&nbsp;y&nbsp;.vscode\/&nbsp;para engancharse a eventos de apertura de sesi\u00f3n en Claude Code y apertura de carpeta en VS Code, y adem\u00e1s instala servicios tipo&nbsp;gh-token-monitor&nbsp;v\u00eda LaunchAgents en macOS o systemd user en Linux.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Auto\u2011propagaci\u00f3n<\/h4>\n\n\n\n<p>Mini Shai\u2011Hulud se comporta como un&nbsp;gusano (<strong>worm) de npm<\/strong>, utilizando tokens robados para comprometer m\u00e1s paquetes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Busca tokens npm con&nbsp;bypass_2fa&nbsp;true (publicaci\u00f3n sin 2FA) y, si los encuentra, enumera todos los paquetes del mismo maintainer usando la API de b\u00fasqueda de npm.<\/li>\n\n\n\n<li>En entornos CI\/CD, intercambia tokens OIDC de GitHub por tokens de publicaci\u00f3n npm por paquete mediante el endpoint de&nbsp;oidc\/token\/exchange, evitando el flujo est\u00e1ndar de autenticaci\u00f3n.<\/li>\n\n\n\n<li>Publica artefactos infectados para todos los paquetes con permisos suficientes, replicando la infecci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p>Adem\u00e1s, inyecta workflows maliciosos en&nbsp;<strong>.github\/workflows\/codeql_analysis.yml&nbsp;<\/strong>que utilizan&nbsp;toJSON(secrets)&nbsp;para serializar todos los secretos del repositorio y exfiltrarlos directamente a infraestructura de C2 (por HTTP POST) o como artefactos subidos en acciones aparentemente leg\u00edtimas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exfiltraci\u00f3n y ransom<\/h3>\n\n\n\n<p>La exfiltraci\u00f3n de datos combina dos canales principales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Session Protocol CDN:<\/strong>&nbsp;subida de blobs cifrados a&nbsp;filev2.getsession.org, parte de la infraestructura de la red Session, usando cifrado h\u00edbrido RSA\u20114096 + AES\u2011256\u2011GCM.<\/li>\n\n\n\n<li><strong>Dead\u2011drop en GitHub:<\/strong>&nbsp;usa la API GraphQL de GitHub para crear commits en repositorios controlados por el atacante, firmados como&nbsp;claude@users.noreply.github.com, con mensajes&nbsp;chore: update dependencies&nbsp;y ramas que imitan la convenci\u00f3n de Dependabot (dependabot\/github_actions\/format\/&lt;palabra-dune&gt;).<\/li>\n<\/ul>\n\n\n\n<p>La campa\u00f1a incluye tambi\u00e9n un componente de&nbsp;<strong>extorsi\u00f3n\/ransom<\/strong>: el malware crea tokens npm con descripci\u00f3n&nbsp;IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner, indicando que revocar el token puede disparar una rutina destructiva que borra el equipo del propietario.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Detecci\u00f3n e indicadores claves<\/h3>\n\n\n\n<p>A nivel de sysadmin\/DevOps, son indicadores muy pr\u00e1cticos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Presencia de&nbsp;<strong>router_init.js<\/strong>&nbsp;en&nbsp;<strong>node_modules<\/strong>&nbsp;o en la ra\u00edz de paquetes&nbsp;@tanstack\/*.<\/li>\n\n\n\n<li>package.json&nbsp;con&nbsp;optionalDependencies&nbsp;apuntando a&nbsp;<strong>github:tanstack\/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c<\/strong>.<\/li>\n\n\n\n<li>Crecimiento inusual del tama\u00f1o del tarball (paquetes ~900 KB frente a ~190 KB para versiones limpias).<\/li>\n\n\n\n<li>Procesos&nbsp;bun&nbsp;ejecut\u00e1ndose durante&nbsp;npm install&nbsp;de paquetes que normalmente no usan Bun.<\/li>\n\n\n\n<li>Procesos&nbsp;python3&nbsp;leyendo&nbsp;\/proc\/*\/mem&nbsp;en runners de CI.<\/li>\n\n\n\n<li>Conexiones de red desde&nbsp;npm install&nbsp;o jobs de CI hacia&nbsp;filev2.getsession.org,&nbsp;api.masscan.cloud&nbsp;o&nbsp;git-tanstack.com.<\/li>\n\n\n\n<li>Tokens npm con descripci\u00f3n &nbsp;IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner.<\/li>\n\n\n\n<li>Commits inesperados firmados como&nbsp;claude@users.noreply.github.com&nbsp;con ramas tipo&nbsp;dependabot\/github_actions\/format\/&lt;palabra-dune&gt;.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><td>Tipo<\/td><td>Valor<\/td><td>Descripci\u00f3n \/ uso sugerido<\/td><\/tr><\/thead><tbody><tr><td>SHA\u2011256<\/td><td>ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266c<\/td><td>Hash de router_init.js (payload principal en paquetes TanStack). Bloquear\/alertar en EDR, AV y b\u00fasquedas forenses.<\/td><\/tr><tr><td>Proceso<\/td><td>bun<\/td><td>Ejecuciones de bun durante npm install o jobs de CI en repos que no usan Bun de forma leg\u00edtima. Crear regla de detecci\u00f3n\/anomal\u00eda.<\/td><\/tr><tr><td>Fichero local<\/td><td>router_init.js<\/td><td>Archivo malicioso a\u00f1adido en la ra\u00edz de paquetes @tanstack\/*. Buscar en disco, contenedores y artefactos.<\/td><\/tr><tr><td>Fichero local<\/td><td>.claude\/router_runtime.js, .claude\/setup.mjs<\/td><td>Persistencia en entornos de desarrollo (Claude Code). Revisar y eliminar.<\/td><\/tr><tr><td>Fichero local<\/td><td>.vscode\/setup.mjs<\/td><td>Persistencia en VS Code v\u00eda tareas\/extensiones. Revisar y eliminar.<\/td><\/tr><tr><td>Servicio<\/td><td>gh-token-monitor<\/td><td>Servicio de usuario (systemd \/ LaunchAgent) usado para monitorizar tokens. Buscar y deshabilitar.<\/td><\/tr><tr><td>Dominio C2<\/td><td>filev2.getsession.org<\/td><td>CDN de la red Session usado para exfiltrar datos cifrados. Bloquear o alertar en proxy\/firewall.<\/td><\/tr><tr><td>Dominio\/C2<\/td><td>api.masscan.cloud<\/td><td>Infraestructuras relacionadas usadas en campa\u00f1as previas de la misma familia. Monitorizar conexiones salientes.<\/td><\/tr><tr><td>Infra GitHub<\/td><td>Commits con autor claude@users.noreply.github.com en ramas dependabot\/github_actions\/format\/&lt;palabra-dune&gt;<\/td><td>Dead\u2011drop en repos de la v\u00edctima. Crear hunting query en GitHub \/ c\u00f3digo fuente.<\/td><\/tr><tr><td>Red interna<\/td><td>http:\/\/169.254.169.254<\/td><td>Acceso a AWS IMDS (robo de credenciales). Alertar si se ve desde contenedores\/runners que no deber\u00edan tocar metadatos.<\/td><\/tr><tr><td>Red interna<\/td><td>http:\/\/169.254.170.2<\/td><td>Endpoint ECS\/Task metadatos. Idem anterior.<\/td><\/tr><tr><td>Red interna<\/td><td>http:\/\/127.0.0.1:8200<\/td><td>Intentos de acceso a HashiCorp Vault local. Monitorizar en runners de CI.<\/td><\/tr><tr><td>Token npm<\/td><td>Descripci\u00f3n IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner<\/td><td>Tokens maliciosos creados por el malware. Enumerar tokens npm y tratarlos como indicador de compromiso cr\u00edtico.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Mitigaci\u00f3n recomendada<\/strong><\/h2>\n\n\n\n<p><strong>Evaluar exposici\u00f3n (dev y CI\/CD)<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Revisar&nbsp;package-lock.json&nbsp;\/&nbsp;pnpm-lock.yaml&nbsp;\/&nbsp;yarn.lock&nbsp;por versiones afectadas de&nbsp;@tanstack\/*&nbsp;y otros paquetes listados (UiPath, DraftLab, etc.).<\/li>\n\n\n\n<li>Buscar&nbsp;router_init.js&nbsp;y referencias a&nbsp;@tanstack\/setup&nbsp;en&nbsp;node_modules&nbsp;y repos locales.<\/li>\n\n\n\n<li>Revisar logs de GitHub Actions (o CI) por:\n<ul class=\"wp-block-list\">\n<li>menciones a&nbsp;@tanstack\/setup,<\/li>\n\n\n\n<li>uso de&nbsp;bun run tanstack_runner.js&nbsp;u otros comandos Bun,<\/li>\n\n\n\n<li>conexiones de red inusuales durante la instalaci\u00f3n de dependencias.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Contenci\u00f3n y an\u00e1lisis forense<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Aislar cualquier dev machine o runner CI que haya hecho&nbsp;<strong>npm install&nbsp;<\/strong>con versiones comprometidas de&nbsp;@tanstack\/*.<\/li>\n\n\n\n<li>Obtener imagen forense antes de limpiar, sobre todo si hay tokens npm con el mensaje de amenaza.<\/li>\n\n\n\n<li>No revocar de inmediato tokens npm con&nbsp;IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner&nbsp;hasta aislar y analizar el equipo.<\/li>\n<\/ul>\n\n\n\n<p><strong>Eliminaci\u00f3n de persistencia<\/strong>:<\/p>\n\n\n\n<p><strong>En equipos de desarrollo<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Claude \/ VS Code:\n<ul class=\"wp-block-list\">\n<li>Borrar&nbsp;.claude\/router_runtime.js&nbsp;y&nbsp;.claude\/setup.mjs.<\/li>\n\n\n\n<li>Revisar\/restaurar&nbsp;.claude\/settings.json.<\/li>\n\n\n\n<li>Revisar&nbsp;.vscode\/tasks.json&nbsp;y borrar&nbsp;.vscode\/setup.mjs.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Servicios de monitorizaci\u00f3n de tokens:\n<ul class=\"wp-block-list\">\n<li>macOS:&nbsp;launchctl unload ~\/Library\/LaunchAgents\/com.user.gh-token-monitor.plist&nbsp;y borrar plist,&nbsp;~\/.local\/bin\/gh-token-monitor.sh&nbsp;y&nbsp;~\/.config\/gh-token-monitor.<\/li>\n\n\n\n<li>Linux:&nbsp;systemctl &#8211;user stop\/disable gh-token-monitor&nbsp;y borrar&nbsp;~\/.config\/systemd\/user\/gh-token-monitor.service.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>En repositorios<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Auditar&nbsp;.github\/workflows\/codeql_analysis.yml&nbsp;y workflows recientes que usen&nbsp;toJSON(secrets)&nbsp;o hagan POST a dominios no esperados, y eliminarlos o corregirlos.<\/li>\n<\/ul>\n\n\n\n<p><strong>Rotaci\u00f3n de secretos<\/strong><\/p>\n\n\n\n<p>Asumiendo compromiso donde se instal\u00f3 una versi\u00f3n maliciosa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rotar:\n<ul class=\"wp-block-list\">\n<li>tokens npm (incluidos los de CI),<\/li>\n\n\n\n<li>PATs y tokens de GitHub (usuario y Actions),<\/li>\n\n\n\n<li>credenciales de AWS, GCP, Azure, Vault y otros clouds,<\/li>\n\n\n\n<li>claves SSH usadas en esos equipos o runners.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Si hay wallets de criptomonedas, mover fondos a nuevas wallets.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Soluci\u00f3n y recomendaciones de hardening<\/strong><\/h2>\n\n\n\n<p><strong>Actualizaci\u00f3n \/ limpieza de dependencias<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pin a versiones seguras<\/strong>&nbsp;de&nbsp;@tanstack\/*&nbsp;seg\u00fan las tablas de versiones limpias publicadas por TanStack y los reportes de StepSecurity\/Snyk; la regla operativa es regresar a la \u00faltima versi\u00f3n anterior a las fechas del ataque (11 de mayo de 2026 para TanStack) y eliminar versiones publicadas en esa ventana.<\/li>\n\n\n\n<li>Tras ajustar versiones, ejecutar:\n<ul class=\"wp-block-list\">\n<li>rm -rf node_modules<\/li>\n\n\n\n<li>npm install&nbsp;(o equivalente en pnpm\/yarn) para regenerar el \u00e1rbol con versiones no comprometidas.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Endurecer pipelines CI\/CD<\/strong><\/p>\n\n\n\n<p>Buenas pr\u00e1cticas espec\u00edficas para este caso:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Restringir al m\u00ednimo los permisos de tokens OIDC en workflows (id-token: write&nbsp;solo donde sea imprescindible) y usar jobs separados con pol\u00edticas de menor<strong> <\/strong>privilegio para publicaci\u00f3n en registries.<\/li>\n\n\n\n<li>Implementar un&nbsp;cooldown&nbsp;para versiones nuevas de paquetes (p.ej. 3\u201310 d\u00edas) en un registry intermedio (Artifactory, Nexus, o soluciones como&nbsp;StepSecurity Secure Registry), de modo que paquetes publicados hace minutos no se consuman autom\u00e1ticamente en CI.<\/li>\n\n\n\n<li><strong>I<\/strong>mplementar egress<strong> <\/strong>control en runners de CI (whitelists de dominios permitidos), de forma similar a soluciones como&nbsp;Harden\u2011Runner, que bloquean conexiones a dominios de C2 en tiempo real.<\/li>\n\n\n\n<li>Automatizar comprobaciones de reputaci\u00f3n de paquetes y firmas (SLSA, Sigstore) entendiendo que la&nbsp;provenance no garantiza ausencia de compromiso, solo identifica el pipeline que gener\u00f3 el artefacto.<\/li>\n<\/ul>\n\n\n\n<p><strong>Controles adicionales en desarrollo<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Introducir escaneo continuo de dependencias para malware y campa\u00f1as conocidas (Mini Shai\u2011Hulud, Shai\u2011Hulud 2.0, etc.) utilizando feeds de inteligencia actualizados de proveedores de seguridad.<\/li>\n\n\n\n<li>Limitar el uso de dependencias&nbsp;github:&nbsp;en&nbsp;package.json, sobre todo cuando apuntan a commits de forks, y establecer revisiones manuales en PRs que introduzcan este patr\u00f3n.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Referencias<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.stepsecurity.io\/blog\/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem\" target=\"_blank\" rel=\"noreferrer noopener\"><em>StepSecurity \u2013 \u201cTeamPCP&#8217;s Mini Shai\u2011Hulud Is Back: A Self-Spreading Supply Chain Attack Compromises TanStack npm Packages\u201d<\/em><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/tanstack.com\/blog\/npm-supply-chain-compromise-postmortem\" target=\"_blank\" rel=\"noreferrer noopener\"><em>TanStack \u2013 \u201cPostmortem: TanStack npm supply-chain compromise\u201d<\/em><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/advisories\/GHSA-g7cv-rxg3-hmpx\" target=\"_blank\" rel=\"noreferrer noopener\"><em>GitHub Security Advisory \u2013 GHSA\u2011g7cv\u2011rxg3\u2011hmpx: Malware in @tanstack\/* packages exfiltrates cloud credentials<\/em><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/snyk.io\/blog\/tanstack-npm-packages-compromised\/\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Snyk \u2013 \u201cTanStack npm Packages Hit by Mini Shai\u2011Hulud\u201d<\/em><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.wiz.io\/blog\/mini-shai-hulud-strikes-again-tanstack-more-npm-packages-compromised\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Wiz \u2013 \u201cMini Shai\u2011Hulud Strikes Again: TanStack + more npm packages compromised\u201d<\/em><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/saiyampathak.substack.com\/p\/how-an-attacker-hijacked-84-tanstack\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Saiyam Pathak \u2013 \u201cHow an Attacker Hijacked 84 TanStack Packages\u201d<\/em><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/TanStack\/router\/issues\/7383\" target=\"_blank\" rel=\"noreferrer noopener\"><em>GitHub \u2013 TanStack\/router issue #7383 \u201cSeveral npm latest releases are compromised\u201d<\/em><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/advisories.gitlab.com\/npm\/%40tanstack\/solid-start-client\/CVE-2026-45321\/\" target=\"_blank\" rel=\"noreferrer noopener\"><em>GitLab \/ GitHub Advisory Mirror \u2013 CVE\u20112026\u201145321: Malware in @tanstack\/* packages<\/em><\/a><\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Anexo \u2013 Todos los paquetes comprometidos<\/h1>\n\n\n\n<p>En total, la campa\u00f1a Mini Shai\u2011Hulud afect\u00f3 a 170 paquetes distintos y dio lugar a al menos 348 artefactos maliciosos publicados en los registries <strong>npm<\/strong> y <strong>PyPI<\/strong> durante esta ola.<br><br><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>#<\/strong><\/td><td><strong>Scope \/ paquete<\/strong><\/td><td><strong>Versiones comprometidas<\/strong><\/td><td><strong>Ecosistema<\/strong><\/td><td><strong>Notas relevantes<\/strong><\/td><\/tr><tr><td>1<\/td><td>@mistralai\/mistralai<\/td><td>2.2.3, 2.2.4<\/td><td>npm<\/td><td>SDK TypeScript oficial de Mistral AI<\/td><\/tr><tr><td>2<\/td><td>@mistralai\/mistralai-azure<\/td><td>1.7.2, 1.7.3<\/td><td>npm<\/td><td>Cliente para despliegues en Azure<\/td><\/tr><tr><td>3<\/td><td>@mistralai\/mistralai-gcp<\/td><td>1.7.2, 1.7.3<\/td><td>npm<\/td><td>Cliente para despliegues en GCP<\/td><\/tr><tr><td>4<\/td><td>mistralai<\/td><td>2.4.6<\/td><td>PyPI<\/td><td>SDK Python de Mistral; tratar entornos como comprometidos<\/td><\/tr><tr><td>5<\/td><td>guardrails-ai<\/td><td>0.10.1<\/td><td>PyPI<\/td><td>Librer\u00eda de guardrails para LLM afectada en la campa\u00f1a<\/td><\/tr><tr><td>6<\/td><td>@opensearch-project\/opensearch<\/td><td>3.6.2<\/td><td>npm<\/td><td>Cliente relacionado con OpenSearch<\/td><\/tr><tr><td>7<\/td><td>@tanstack\/router-utils<\/td><td>1.161.11, 1.161.14<\/td><td>npm<\/td><td>Parte del stack de routing de TanStack<\/td><\/tr><tr><td>8<\/td><td>@tanstack\/router-core<\/td><td>1.169.5, 1.169.8<\/td><td>npm<\/td><td>N\u00facleo del router TanStack<\/td><\/tr><tr><td>9<\/td><td>@tanstack\/history<\/td><td>1.161.9, 1.161.12<\/td><td>npm<\/td><td>Gesti\u00f3n de historial para el router<\/td><\/tr><tr><td>10<\/td><td>@tanstack\/react-router<\/td><td>1.169.5, 1.169.8<\/td><td>npm<\/td><td>Router React, muy usado en front\u2011end<\/td><\/tr><tr><td>11<\/td><td>@tanstack\/react-router-devtools<\/td><td>1.166.16, 1.166.19<\/td><td>npm<\/td><td>Devtools del router React<\/td><\/tr><tr><td>12<\/td><td>@tanstack\/react-router-ssr-query<\/td><td>1.166.15, 1.166.18<\/td><td>npm<\/td><td>Integraci\u00f3n SSR + queries<\/td><\/tr><tr><td>13<\/td><td>@tanstack\/react-start<\/td><td>1.167.68, 1.167.71<\/td><td>npm<\/td><td>Framework full\u2011stack react\u2011start<\/td><\/tr><tr><td>14<\/td><td>@tanstack\/react-start-client<\/td><td>1.166.51, 1.166.54<\/td><td>npm<\/td><td>Cliente de react\u2011start<\/td><\/tr><tr><td>15<\/td><td>@tanstack\/react-start-rsc<\/td><td>0.0.47, 0.0.50<\/td><td>npm<\/td><td>Soporte React Server Components<\/td><\/tr><tr><td>16<\/td><td>@tanstack\/react-start-server<\/td><td>1.166.55, 1.166.58<\/td><td>npm<\/td><td>Servidor react\u2011start<\/td><\/tr><tr><td>17<\/td><td>@tanstack\/router-cli<\/td><td>1.166.46, 1.166.49<\/td><td>npm<\/td><td>CLI del router TanStack<\/td><\/tr><tr><td>18<\/td><td>@tanstack\/router-devtools<\/td><td>1.166.16, 1.166.19<\/td><td>npm<\/td><td>Devtools del router (core)<\/td><\/tr><tr><td>19<\/td><td>@tanstack\/router-devtools-core<\/td><td>1.167.6, 1.167.9<\/td><td>npm<\/td><td>N\u00facleo de devtools para router<\/td><\/tr><tr><td>20<\/td><td>@tanstack\/router-generator<\/td><td>1.166.45, 1.166.48<\/td><td>npm<\/td><td>Generador de rutas<\/td><\/tr><tr><td>21<\/td><td>@tanstack\/router-plugin<\/td><td>1.167.38, 1.167.41<\/td><td>npm<\/td><td>Plugin de router<\/td><\/tr><tr><td>22<\/td><td>@tanstack\/router-ssr-query-core<\/td><td>1.168.3, 1.168.6<\/td><td>npm<\/td><td>Core para SSR + queries<\/td><\/tr><tr><td>23<\/td><td>@tanstack\/router-vite-plugin<\/td><td>1.166.53, 1.166.56<\/td><td>npm<\/td><td>Plugin de Vite para router<\/td><\/tr><tr><td>24<\/td><td>@tanstack\/solid-router<\/td><td>1.169.5, 1.169.8<\/td><td>npm<\/td><td>Router para SolidJS<\/td><\/tr><tr><td>25<\/td><td>@tanstack\/solid-router-devtools<\/td><td>1.166.16, 1.166.19<\/td><td>npm<\/td><td>Devtools para Solid router<\/td><\/tr><tr><td>26<\/td><td>@tanstack\/solid-router-ssr-query<\/td><td>1.166.15, 1.166.18<\/td><td>npm<\/td><td>SSR + queries para Solid<\/td><\/tr><tr><td>27<\/td><td>@tanstack\/solid-start<\/td><td>1.167.65, 1.167.68<\/td><td>npm<\/td><td>Framework Solid Start<\/td><\/tr><tr><td>28<\/td><td>@tanstack\/solid-start-client<\/td><td>1.166.50, 1.166.53<\/td><td>npm<\/td><td>Cliente Solid Start<\/td><\/tr><tr><td>29<\/td><td>@tanstack\/solid-start-server<\/td><td>1.166.54, 1.166.57<\/td><td>npm<\/td><td>Servidor Solid Start<\/td><\/tr><tr><td>30<\/td><td>@tanstack\/start-client-core<\/td><td>1.168.5, 1.168.8<\/td><td>npm<\/td><td>Core cliente TanStack Start<\/td><\/tr><tr><td>31<\/td><td>@tanstack\/start-fn-stubs<\/td><td>1.161.9, 1.161.12<\/td><td>npm<\/td><td>Stubs de funciones Start<\/td><\/tr><tr><td>32<\/td><td>@tanstack\/start-plugin-core<\/td><td>1.169.23, 1.169.26<\/td><td>npm<\/td><td>Core de plugins Start<\/td><\/tr><tr><td>33<\/td><td>@tanstack\/start-server-core<\/td><td>1.167.33, 1.167.36<\/td><td>npm<\/td><td>Core de servidor Start<\/td><\/tr><tr><td>34<\/td><td>@tanstack\/start-static-server-functions<\/td><td>1.166.44, 1.166.47<\/td><td>npm<\/td><td>Funciones de servidor est\u00e1tico<\/td><\/tr><tr><td>35<\/td><td>@tanstack\/start-storage-context<\/td><td>1.166.38, 1.166.41<\/td><td>npm<\/td><td>Contexto de almacenamiento Start<\/td><\/tr><tr><td>36<\/td><td>@tanstack\/arktype-adapter<\/td><td>1.166.12, 1.166.15<\/td><td>npm<\/td><td>Adaptador de tipos ArkType<\/td><\/tr><tr><td>37<\/td><td>@tanstack\/valibot-adapter<\/td><td>1.166.12, 1.166.15<\/td><td>npm<\/td><td>Adaptador Valibot<\/td><\/tr><tr><td>38<\/td><td>@tanstack\/virtual-file-routes<\/td><td>1.161.10, 1.161.13<\/td><td>npm<\/td><td>Rutas basadas en archivos virtuales<\/td><\/tr><tr><td>39<\/td><td>@tanstack\/vue-router<\/td><td>1.169.5, 1.169.8<\/td><td>npm<\/td><td>Router para Vue<\/td><\/tr><tr><td>40<\/td><td>@tanstack\/vue-router-devtools<\/td><td>1.166.16, 1.166.19<\/td><td>npm<\/td><td>Devtools Vue router<\/td><\/tr><tr><td>41<\/td><td>@tanstack\/vue-router-ssr-query<\/td><td>1.166.15, 1.166.18<\/td><td>npm<\/td><td>SSR + queries para Vue<\/td><\/tr><tr><td>42<\/td><td>@tanstack\/vue-start<\/td><td>1.167.61, 1.167.64<\/td><td>npm<\/td><td>Framework Vue Start<\/td><\/tr><tr><td>43<\/td><td>@tanstack\/vue-start-client<\/td><td>1.166.46, 1.166.49<\/td><td>npm<\/td><td>Cliente Vue Start<\/td><\/tr><tr><td>44<\/td><td>@tanstack\/vue-start-server<\/td><td>1.166.50, 1.166.53<\/td><td>npm<\/td><td>Servidor Vue Start<\/td><\/tr><tr><td>45<\/td><td>@tanstack\/zod-adapter<\/td><td>1.166.12, 1.166.15<\/td><td>npm<\/td><td>Adaptador Zod<\/td><\/tr><tr><td>46<\/td><td>@tanstack\/eslint-plugin-router<\/td><td>1.161.9, 1.161.12<\/td><td>npm<\/td><td>Plugin ESLint para router<\/td><\/tr><tr><td>47<\/td><td>@tanstack\/eslint-plugin-start<\/td><td>0.0.4, 0.0.7<\/td><td>npm<\/td><td>Plugin ESLint para Start<\/td><\/tr><tr><td>48<\/td><td>@squawk\/airways<\/td><td>0.4.2, 0.4.3, 0.4.5<\/td><td>npm<\/td><td>Parte del ecosistema aeron\u00e1utico Squawk<\/td><\/tr><tr><td>49<\/td><td>@squawk\/airport-data<\/td><td>0.7.4, 0.7.5, 0.7.7<\/td><td>npm<\/td><td>Datos de aeropuertos<\/td><\/tr><tr><td>50<\/td><td>@squawk\/airports<\/td><td>0.6.2, 0.6.3, 0.6.5<\/td><td>npm<\/td><td>API de aeropuertos<\/td><\/tr><tr><td>51<\/td><td>@squawk\/airspace<\/td><td>0.8.1, 0.8.2, 0.8.4<\/td><td>npm<\/td><td>Datos de espacio a\u00e9reo<\/td><\/tr><tr><td>52<\/td><td>@squawk\/airspace-data<\/td><td>0.5.3, 0.5.4, 0.5.6<\/td><td>npm<\/td><td>Dataset de espacio a\u00e9reo<\/td><\/tr><tr><td>53<\/td><td>@squawk\/airway-data<\/td><td>0.5.4, 0.5.5, 0.5.7<\/td><td>npm<\/td><td>Dataset de aerov\u00edas<\/td><\/tr><tr><td>54<\/td><td>@squawk\/fix-data<\/td><td>0.6.4, 0.6.5, 0.6.7<\/td><td>npm<\/td><td>Puntos de navegaci\u00f3n (fixes)<\/td><\/tr><tr><td>55<\/td><td>@squawk\/fixes<\/td><td>0.3.2, 0.3.3, 0.3.5<\/td><td>npm<\/td><td>API de fixes<\/td><\/tr><tr><td>56<\/td><td>@squawk\/flight-math<\/td><td>0.5.4, 0.5.5, 0.5.7<\/td><td>npm<\/td><td>Utilidades de c\u00e1lculo de vuelo<\/td><\/tr><tr><td>57<\/td><td>@squawk\/flightplan<\/td><td>0.5.2, 0.5.3, 0.5.5<\/td><td>npm<\/td><td>Planificaci\u00f3n de vuelos<\/td><\/tr><tr><td>58<\/td><td>@squawk\/geo<\/td><td>0.4.4, 0.4.5, 0.4.7<\/td><td>npm<\/td><td>Funciones geoespaciales<\/td><\/tr><tr><td>59<\/td><td>@squawk\/icao-registry<\/td><td>0.5.2, 0.5.3, 0.5.5<\/td><td>npm<\/td><td>Registro ICAO<\/td><\/tr><tr><td>60<\/td><td>@squawk\/icao-registry-data<\/td><td>0.8.4, 0.8.5, 0.8.7<\/td><td>npm<\/td><td>Dataset ICAO<\/td><\/tr><tr><td>61<\/td><td>@squawk\/mcp<\/td><td>0.9.1, 0.9.2, 0.9.4<\/td><td>npm<\/td><td>Herramientas MCP<\/td><\/tr><tr><td>62<\/td><td>@squawk\/navaid-data<\/td><td>0.6.4, 0.6.5, 0.6.7<\/td><td>npm<\/td><td>Datos de radio\u2011ayudas<\/td><\/tr><tr><td>63<\/td><td>@squawk\/navaids<\/td><td>0.4.2, 0.4.3, 0.4.5<\/td><td>npm<\/td><td>API de navaids<\/td><\/tr><tr><td>64<\/td><td>@squawk\/notams<\/td><td>0.3.6, 0.3.7, 0.3.9<\/td><td>npm<\/td><td>NOTAMs<\/td><\/tr><tr><td>65<\/td><td>@squawk\/procedure-data<\/td><td>0.7.3, 0.7.4, 0.7.6<\/td><td>npm<\/td><td>Datos de procedimientos<\/td><\/tr><tr><td>66<\/td><td>@squawk\/procedures<\/td><td>0.5.2, 0.5.3, 0.5.5<\/td><td>npm<\/td><td>API de procedimientos<\/td><\/tr><tr><td>67<\/td><td>@squawk\/types<\/td><td>0.8.1, 0.8.2, 0.8.4<\/td><td>npm<\/td><td>Tipos compartidos<\/td><\/tr><tr><td>68<\/td><td>@squawk\/units<\/td><td>0.4.3, 0.4.4, 0.4.6<\/td><td>npm<\/td><td>Unidades de medida<\/td><\/tr><tr><td>69<\/td><td>@squawk\/weather<\/td><td>0.5.6, 0.5.7, 0.5.9<\/td><td>npm<\/td><td>Datos meteorol\u00f3gicos<\/td><\/tr><tr><td>70<\/td><td>@uipath\/* (m\u00faltiples paquetes)<\/td><td>Versiones listadas en tu texto original<\/td><td>npm<\/td><td>M\u00e1s de 50 paquetes en el scope @uipath afectados<\/td><\/tr><tr><td>71<\/td><td>@draftauth\/client<\/td><td>0.2.1, 0.2.2<\/td><td>npm<\/td><td>Cliente de autenticaci\u00f3n DraftAuth<\/td><\/tr><tr><td>72<\/td><td>@draftauth\/core<\/td><td>0.13.1, 0.13.2<\/td><td>npm<\/td><td>N\u00facleo DraftAuth<\/td><\/tr><tr><td>73<\/td><td>@draftlab\/auth<\/td><td>0.24.1, 0.24.2<\/td><td>npm<\/td><td>Auth de DraftLab<\/td><\/tr><tr><td>74<\/td><td>@draftlab\/auth-router<\/td><td>0.5.1, 0.5.2<\/td><td>npm<\/td><td>Router de autenticaci\u00f3n<\/td><\/tr><tr><td>75<\/td><td>@draftlab\/db<\/td><td>0.16.1, 0.16.2<\/td><td>npm<\/td><td>Capa de datos DraftLab<\/td><\/tr><tr><td>76<\/td><td>@beproduct\/nestjs-auth<\/td><td>0.1.2\u20130.1.17, 0.1.19<\/td><td>npm<\/td><td>M\u00faltiples versiones comprometidas<\/td><\/tr><tr><td>77<\/td><td>@dirigible-ai\/sdk<\/td><td>0.6.2, 0.6.3<\/td><td>npm<\/td><td>SDK Dirigible AI<\/td><\/tr><tr><td>78<\/td><td>@ml-toolkit-ts\/preprocessing<\/td><td>1.0.2, 1.0.3<\/td><td>npm<\/td><td>Parte de ml\u2011toolkit\u2011ts<\/td><\/tr><tr><td>79<\/td><td>@ml-toolkit-ts\/xgboost<\/td><td>1.0.3, 1.0.4<\/td><td>npm<\/td><td>Binding XGBoost<\/td><\/tr><tr><td>80<\/td><td>ml-toolkit-ts<\/td><td>1.0.4, 1.0.5<\/td><td>npm<\/td><td>Paquete principal<\/td><\/tr><tr><td>81<\/td><td>@tallyui\/* (components, core, etc.)<\/td><td>Versiones indicadas en tu lista<\/td><td>npm<\/td><td>Scope @tallyui afectado en bloque<\/td><\/tr><tr><td>82<\/td><td>@mesadev\/rest<\/td><td>0.28.3<\/td><td>npm<\/td><td>Parte del ecosistema MesaDev<\/td><\/tr><tr><td>83<\/td><td>@mesadev\/saguaro<\/td><td>0.4.22<\/td><td>npm<\/td><td>Paquete MesaDev<\/td><\/tr><tr><td>84<\/td><td>@mesadev\/sdk<\/td><td>0.28.3<\/td><td>npm<\/td><td>SDK MesaDev<\/td><\/tr><tr><td>85<\/td><td>safe-action<\/td><td>0.8.3, 0.8.4<\/td><td>npm<\/td><td>Paquete de acciones seguras<\/td><\/tr><tr><td>86<\/td><td>@supersurkhet\/cli<\/td><td>0.0.2\u20130.0.7<\/td><td>npm<\/td><td>CLI Supersurkhet<\/td><\/tr><tr><td>87<\/td><td>@supersurkhet\/sdk<\/td><td>0.0.2\u20130.0.7<\/td><td>npm<\/td><td>SDK Supersurkhet<\/td><\/tr><tr><td>88<\/td><td>cmux-agent-mcp<\/td><td>0.1.3\u20130.1.8<\/td><td>npm<\/td><td>Herramienta MCP<\/td><\/tr><tr><td>89<\/td><td>git-git-git<\/td><td>1.0.8\u20131.0.10, 1.0.12<\/td><td>npm<\/td><td>Utilidades git<\/td><\/tr><tr><td>90<\/td><td>git-branch-selector<\/td><td>1.3.3\u20131.3.5, 1.3.7<\/td><td>npm<\/td><td>Selector de ramas git<\/td><\/tr><tr><td>91<\/td><td>nextmove-mcp<\/td><td>0.1.3\u20130.1.5, 0.1.7<\/td><td>npm<\/td><td>Cliente MCP<\/td><\/tr><tr><td>92<\/td><td>agentwork-cli<\/td><td>0.1.4, 0.1.5<\/td><td>npm<\/td><td>CLI AgentWork<\/td><\/tr><tr><td>93<\/td><td>wot-api<\/td><td>0.8.1, 0.8.2, 0.8.4<\/td><td>npm<\/td><td>API WoT<\/td><\/tr><tr><td>94<\/td><td>cross-stitch<\/td><td>1.1.3, 1.1.4, 1.1.6<\/td><td>npm<\/td><td>Librer\u00eda utilitaria<\/td><\/tr><tr><td>95<\/td><td>ts-dna<\/td><td>3.0.1, 3.0.2, 3.0.4<\/td><td>npm<\/td><td>Paquete TypeScript<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><a id=\"_msocom_1\"><\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recientemente se report\u00f3 una \u00a0campa\u00f1a de ataque de cadena de suministro bautizada como Mini Shai\u2011Hulud. Se trata de un malware del tipo worm o gusano, que ha comprometido m\u00faltiples paquetes npm, empezando por el ecosistema\u00a0@tanstack\/*, publicando versiones maliciosas a trav\u00e9s de los propios pipelines de GitHub Actions de los proyectos utilizando tokens OIDC robados. Estas [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":11464,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[48],"tags":[],"class_list":["post-11463","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/posts\/11463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/comments?post=11463"}],"version-history":[{"count":2,"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/posts\/11463\/revisions"}],"predecessor-version":[{"id":11467,"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/posts\/11463\/revisions\/11467"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/media\/11464"}],"wp:attachment":[{"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/media?parent=11463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/categories?post=11463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/tags?post=11463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}