Plugin4Shell: un RCE sin un solo clic golpea a Claude Code, Codex, Copilot y Gemini CLI

La firma de seguridad Air afirma que todos los grandes agentes de programación confían en una versión anclada del plugin que nunca verifican

|6 min de lectura0
Source code on a developer's screen — Plugin4Shell turns a routine git checkout inside AI coding agents into remote code execution.
Source code on a developer's screen — Plugin4Shell turns a routine git checkout inside AI coding agents into remote code execution.

La firma de seguridad Air reveló el jueves una vulnerabilidad que permite a un atacante ejecutar código en remoto en las máquinas de los desarrolladores que usan asistentes de programación con IA, sin que el usuario tenga que hacer nada. Bautizada Plugin4Shell en el informe de investigación de la compañía, afecta a Claude Code de Anthropic, Codex de OpenAI, GitHub Copilot y Gemini CLI de Google.

Dos de esos cuatro proveedores han publicado un parche. Anthropic lo corrigió en Claude Code 2.1.179 y OpenAI en Codex 0.146.0, mientras que Microsoft no ha lanzado nada para Copilot y Google afirma que no parcheará Gemini CLI, cuyo soporte ya ha finalizado.

Nada del ataque toca el modelo ni el razonamiento del agente. Se sitúa una capa por debajo, en la fontanería del mercado de extensiones que deposita los complementos en un portátil de trabajo; y un plugin se ejecuta con los mismos permisos que tenga el ingeniero que opera el agente.

Claves

  • Los investigadores de Air Or Nevo, Dor Granat y Niv Hoffman encontraron el mismo paso de verificación ausente en Claude Code, Codex, GitHub Copilot y Gemini CLI.
  • Anthropic publicó la corrección en Claude Code 2.1.179 y OpenAI en Codex 0.146.0; Microsoft no ha lanzado nada para Copilot y Google no parcheará Gemini CLI.
  • La actualización automática de plugins en segundo plano, activada por defecto en Claude Code y Codex, es lo que elimina el clic del ataque.

Por qué el anclaje a un SHA debía haber zanjado esto

El anclaje existe porque la alternativa ya había fracasado en público. Buena parte de las pruebas las aportó el trabajo previo de la propia Air: una habilidad deliberadamente maliciosa que publicó en un mercado de confianza alcanzó más de 26.000 agentes, y un estudio posterior secuestró 925 habilidades que ya estaban en uso y llegó a 134.000 agentes. La respuesta del sector fue dejar de confiar en los nombres. Una rama o una etiqueta de versión pueden moverse; un hash de commit de 40 caracteres, no.

El razonamiento es sólido, y es exactamente el razonamiento que ha fallado aquí. El anclaje solo cumple su promesa si alguien comprueba el resultado, y resultó que el código del cliente que realiza la instalación comprobaba la petición en su lugar. Las empresas que más lejos llegaron —revisar el código del plugin, anclar un commit auditado, tratar el hash como evidencia de auditoría— heredaron el fallo de la forma más completa, porque todo su control dependía del paso que se estaba omitiendo.

Dónde desaparece la comprobación

Git es inusualmente permisivo con los nombres que admite para una rama. Su propio validador de formato de referencias acepta un nombre compuesto por 40 caracteres hexadecimales y, cuando una cadena es a la vez una referencia válida y un identificador de objeto verosímil, git elige la referencia y rebaja el conflicto a un aviso que nadie lee. Un atacante que controle el repositorio del plugin puede, por tanto, crear una rama cuyo nombre coincida carácter por carácter con el hash anclado, convertirla en la rama por defecto del repositorio y ver cómo se instala el contenido que él elija mientras el agente informa de que todo ha ido bien en el commit esperado. Claude Code, Codex y GitHub Copilot caen ante esa variante.

Gemini CLI se rompe por otra costura. Descarga correctamente el objeto anclado y lo escribe en el archivo FETCH_HEAD del repositorio, pero después hace un checkout de FETCH_HEAD por nombre: un nombre que un repositorio hostil puede reclamar libremente como su rama por defecto, momento en el que el commit correctamente descargado simplemente se descarta.

Lo que cierra ambas variantes es una única comprobación: una vez completado el checkout, resolver HEAD, compararlo con el hash solicitado y abortar si difieren. La distinción decisiva es verificar el resultado resuelto y no la referencia que se pidió, que es precisamente por donde se cuela la variante de Gemini.

El multiplicador de la actualización automática

Un fallo limitado al momento de la instalación ya sería grave. Este es peor porque los agentes repiten ese mismo checkout según su propio calendario. Claude Code y Codex refrescan los plugins instalados en segundo plano de forma predeterminada, así que un cambio de hash aguas arriba se propaga sin instalación, sin aviso y sin ningún evento visible. El atacante no necesita convencer a nadie de que instale nada: el plugin que le hace falta ya está en la máquina objetivo y ya goza de confianza.

De ahí se derivan dos vías de entrada, y ninguna exige comprometer un mercado. Un atacante puede publicar algo genuinamente útil, superar la revisión y cambiar su contenido más adelante. O puede apoderarse del repositorio que hay detrás de un plugin escrito por otra persona, el escenario exacto que el anclaje se adoptó para contener. Ambas mitades ya se han demostrado por separado, y eso es lo que hace que la cadena sea creíble y no teórica.

Dos proveedores parchearon, dos no

Air avisó a los cuatro proveedores en junio bajo divulgación coordinada, y las respuestas divergieron con claridad. Anthropic y OpenAI publicaron correcciones. Google declinó: dijo a los investigadores que Gemini CLI está descontinuado y remitió a los usuarios a su entorno Antigravity, que no tiene anclaje de plugins de mercado que subvertir. Microsoft, según los investigadores, nunca llegó a responder.

GitHub discute estar expuesto. Un portavoz declaró a The Register que la plataforma bloquea los nombres de ramas y etiquetas que se parecen a hashes de commit, de modo que la técnica no funciona allí. La respuesta de Air es que los agentes no solo consumen mercados alojados en GitHub: la documentación de Anthropic incluye Bitbucket y git autoalojado entre los backends admitidos, y estos aceptan con normalidad nombres de rama con forma de hash. Con Microsoft citando una adopción de Copilot cercana al 90 % entre las empresas del Fortune 500, la superficie sin parchear no es pequeña.

Qué significa para la gobernanza de plugins

El punto estructural incómodo es que ningún mercado puede arreglar esto en nombre de sus usuarios. El anclaje se evalúa en el cliente, así que la garantía que anuncia un mercado se aplica en un lugar donde no tiene código ejecutándose. Eso invierte el supuesto que sostiene buena parte de las compras corporativas actuales, donde un mercado aprobado se trata como la frontera de control. Iniciativas como el estándar Agent Plugins, neutral respecto al proveedor, pueden ayudar al convertir el comportamiento de verificación en algo especificable en lugar de dejarlo a criterio de cada fabricante. Por ahora el consejo práctico es acotado: actualizar Claude Code y Codex y, en el caso de Copilot y Gemini CLI, inventariar qué hay instalado y dónde está alojado. Quien siguiera el gusano ChainDrop que envenenó 444 paquetes npm con firmas válidas reconocerá el patrón: el mecanismo de integridad estaba presente, y su presencia se confundió con su aplicación.

Preguntas frecuentes

¿Me afecta Plugin4Shell?

Está expuesto si usa Claude Code, OpenAI Codex, GitHub Copilot o Gemini CLI con plugins instalados desde un mercado. Claude Code 2.1.179 y Codex 0.146.0 incluyen correcciones, así que actualizar cierra el problema en esos dos. Copilot y Gemini CLI no tienen parche disponible por ahora.

¿Me protege usar plugins alojados en GitHub?

En parte. GitHub rechaza nombres de rama y etiqueta con forma de hash de commit, lo que bloquea la variante principal en esa plataforma. Los investigadores de Air señalan que los agentes también admiten mercados en Bitbucket y en servidores git autoalojados, donde el truco sigue funcionando, y que la regla de GitHub no hace nada frente a la variante independiente de Gemini CLI.

¿Puede un mercado resolver esto por su cuenta?

No. El commit anclado se resuelve en la máquina del cliente cuando el agente ejecuta su checkout, así que solo un paso de verificación en el lado del agente puede garantizar que el anclaje se respetó. Un mercado puede restringir qué servidores git permite, pero eso reduce las configuraciones admitidas sin cerrar el fallo de fondo.

¿Qué te parece este artículo?

SJ
Cargando...

Artículos relacionados

Agentes de IA inundaron RubyGems con 2.000 paquetes y el registro cerró las altas cuatro días
Developer Tools

Agentes de IA inundaron RubyGems con 2.000 paquetes y el registro cerró las altas cuatro días

Un informe forense reconstruye la campaña GemStuffer de mayo, en la que agentes de IA subieron más de 2.000 gems y forzaron a RubyGems a congelar las nuevas altas cuatro días.

Seung Junghace 6 días
HydraFusion de GitHub deja de elegir un modelo: monta un flujo de trabajo
Developer Tools

HydraFusion de GitHub deja de elegir un modelo: monta un flujo de trabajo

Project HydraFusion, de GitHub, arma un plan multimodelo para cada petición de Copilot y cambia la sencillez de un único modelo por un coste mucho más bajo.

Seung Junghace 5 días
Meta deja la configuración de WhatsApp Business en manos de Claude y Codex vía MCP
Developer Tools

Meta deja la configuración de WhatsApp Business en manos de Claude y Codex vía MCP

Meta abrió la configuración de cuentas de WhatsApp Business a los agentes de programación con IA: su servidor MCP de WhatsApp Business Tools deja que Claude Code y Codex registren números y configuren plantillas y webhooks.

Seung Junganteayer
Las empresas ya licencian su código fuente privado como datos de evaluación de IA
Developer Tools

Las empresas ya licencian su código fuente privado como datos de evaluación de IA

Specific Labs licenció repositorios privados de una empresa de producto de consumo y una plataforma fintech para construir Real-SWE, convirtiendo código propietario en datos de evaluación imposibles de rastrear.

Seung Junghace 3 días
Los reparadores con LLM rompieron código que funcionaba diez veces más a menudo de lo que arreglaron el defectuoso
Developer Tools

Los reparadores con LLM rompieron código que funcionaba diez veces más a menudo de lo que arreglaron el defectuoso

Un estudio en arXiv midió un bucle de reparación con LLM dañando programas correctos a 0,261 y arreglando los defectuosos a 0,023, y halló la dirección interna que lo impulsa.

Seung Junghace 5 días
Shopify compra Tailwind Labs mientras la IA erosiona el negocio del framework
Developer Tools

Shopify compra Tailwind Labs mientras la IA erosiona el negocio del framework

Shopify adquirió Tailwind Labs, creadora de Tailwind CSS. El framework mantiene su licencia MIT mientras Tailwind Plus y ui.sh dejan de aceptar nuevas suscripciones.

Seung Junghace 6 días