technology 6 min de lectura

Plugin4Shell: Los agentes de codificación con IA confían en el hash equivocado

Una vulnerabilidad crítica de verificación en los plugins de agentes de codificación con IA permite a los atacantes reemplazar código verificado por código malicioso sin intervención del usuario. Cuatro plataformas importantes se ven afectadas, aunque no hay indicios de explotación en el mundo real.

  • UAT-10147
  • agente de codificación con IA
  • RCE sin interacción
  • fijación SHA

El hash en el que confiaban no era el hash que ejecutaban

Se ha expuesto una grieta silenciosa pero estructuralmente profunda en la forma en que los agentes de codificación con IA verifican sus propias extensiones. AIR Security lo llamó Plugin4Shell, y el nombre capta exactamente cuál es el problema: los agentes tratan un hash de commit fijado como una garantía permanente, pero luego no confirman que el código que realmente descargaron coincida con ese hash.

El resultado es una vía de ejecución remota de código sin interacción del usuario (zero-click RCE) que no requiere ingeniería social, phishing ni ningún tipo de interacción por parte del usuario más allá de que el agente actualice un plugin en segundo plano.

Cuatro plataformas principales están involucradas: Claude Code de Anthropic, Codex de OpenAI, GitHub Copilot y Gemini CLI de Google. A fecha del 18 de septiembre, Anthropic y OpenAI ya han publicado correcciones. Las respuestas de GitHub y Google siguen siendo incompletas o poco claras. No se asignó ningún CVE en el momento de la divulgación, y no ha habido evidencia pública de explotación en entorno real. Esa brecha entre la gravedad y la actividad es algo que merece una observación muy cercana.

Cómo falló el pinning de SHA

Los repositorios de plugins en estos agentes dependen de un mecanismo llamado pinning de SHA. Cuando un desarrollador instala o actualiza un plugin, el agente registra un hash de commit específico de git y asume que cualquier recuperación posterior devolverá el mismo código. El modelo es simple y sólido en teoría: fija el hash y no podrás ejecutar código que no hayas verificado explícitamente.

La falla reside en el hueco entre el fijado y la verificación. Según AIR Security, algunos agentes solicitan el commit fijado pero no vuelven a calcular el hash del contenido descargado para confirmar que coincide. Si un atacante controla el repositorio, puede alojar un commit cuyo hash parezca correcto superficialmente mientras los archivos reales difieren de lo que se revisó originalmente.

Esto no es un caso teórico marginal. La superficie de ataque se abrió de dos formas según la implementación de git de cada plataforma.

Para Claude Code, Codex y Copilot, los investigadores explotaron la manera en que git acepta nombres de rama que se parecen a hashes de commit. GitHub endureció sus reglas y ahora rechaza nombres de rama que se asemejan a cadenas hexadecimales de 40 caracteres, lo que significa que los plugins alojados directamente en GitHub están parcialmente protegidos. Pero Bitbucket y los servidores git autoalojados no aplican la misma restricción, dejando esos entornos expuestos.

Gemini CLI cayó ante un tipo diferente de evasión de verificación. El mecanismo difiere, pero el resultado es idéntico: el código fijado y el código ejecutado ya no son lo mismo.

Por qué la automatización convierte un bug en exploit

La vulnerabilidad por sí sola ya es grave. La funcionalidad de actualización automática la transforma en un arma.

Tanto Claude Code como Codex descargan actualizaciones de plugins en silencio y en segundo plano. Una vez que un atacante toma el control de un repositorio de plugins o compromete la cuenta de un desarrollador, el agente empuja una actualización maliciosa y el código se ejecuta dentro del entorno del desarrollador con plenos privilegios: sin diálogo de confirmación, sin aprobación manual.

AIR Security clasificó la vía como RCE zero-click porque el usuario no necesita instalar nada nuevo. Un plugin previamente seguro simplemente se actualiza y ejecuta código hostil. Los dos patrones de ataque realistas son:

  1. Un atacante publica un plugin limpio, espera a que sea adoptado y luego cambia el repositorio para entregar malware una vez que la base de usuarios es lo suficientemente amplia.
  2. Un atacante compromete la cuenta del desarrollador o el repositorio de un plugin de confianza existente y empuja código malicioso directamente.

El multiplicador de autoridad

Una extensión de IDE estándar ya conlleva un riesgo significativo. Un agente de codificación con IA carries mucho más.

Estos agentes leen código fuente, modifican archivos del proyecto, ejecutan comandos en la terminal y acceden a repositorios git, tokens de autenticación, credenciales de nube, claves SSH, pipelines de CI/CD e infraestructura interna de desarrollo. Un plugin malicioso no necesita escalar privilegios porque el agente ya los tiene.

El enfoque de AIR Security es preciso: hay que tratar el plugin no como un pequeño complemento, sino como una aplicación que hereda la autoridad completa del usuario. Ese modelo de herencia es lo que hace que Plugin4Shell sea cualitativamente diferente de una vulnerabilidad típica de extensión.

Estado de los parches y los agujeros pendientes

Anthropic corrigió el problema en Claude Code 2.1.179. OpenAI lo abordó en Codex 0.146.0. Ambas correcciones están disponibles y las organizaciones que usan estas herramientas deben actualizarse de inmediato.

GitHub Copilot no ha publicado un parche dedicado. La mitigación práctica depende de la restricción de nombres de rama de GitHub, que bloquea el ataque de commit-que-semeja-rama para los plugins almacenados en el propio GitHub. Sin embargo, los equipos que usan marketplaces externos, Bitbucket o servidores git privados siguen expuestos, y la guía de GitHub sobre esos entornos es inexistente.

La respuesta de Google’s Gemini CLI es ambigua. Los informes indican que Google ha dirigido a los usuarios hacia un nuevo entorno de agente en lugar de parchear el CLI existente, pero la documentación no aclara si la falla subyacente de verificación está resuelta en todas las configuraciones de despliegue.

Lo que esto revela sobre la cadena de suministro de agentes de IA

Plugin4Shell no es un incidente aislado. Es una advertencia estructural sobre cómo se está construyendo la cadena de suministro de software de agentes de IA. A medida que estas herramientas pasan de talleres de desarrollo experimentales a flujos de trabajo empresariales, los mismos riesgos de cadena de suministro que devastaron al software tradicional reaparecerán en nuevas formas.

Dos lecciones ya son claras:

  • Fijar sin re-verificación no es seguridad. Cualquier sistema que fija un hash pero nunca confirma el artefacto descargado contra ese hash está fundamentalmente roto. La solución es directa: validar el hash después de cada descarga, antes de cualquier ejecución.

  • Las actualizaciones automáticas sin límites de confianza granulares son una superficie de ataque. Las actualizaciones en segundo plano eliminan fricción tanto para los usuarios como para los atacantes. Los entornos empresariales necesitan válvulas de aprobación explícitas para las actualizaciones de plugins, especialmente cuando esos plugins heredan privilegios elevados.

Qué deben hacer las organizaciones ahora

Los pasos inmediatos son prácticos:

  • Actualizar Claude Code a la versión 2.1.179 o posterior y Codex a 0.146.0 o posterior.
  • Auditar qué plugins están instalados, qué versiones están fijadas y qué repositorios los alojan.
  • Restringir la instalación a marketplaces de plugins aprobados y bloquear fuentes externas no autorizadas a nivel de política.
  • Monitorear cambios en la propiedad de repositorios y la seguridad de cuentas de mantenedores de los plugins de confianza que se utilizan.
  • Reducir los permisos del agente donde sea posible, especialmente en torno a credenciales de CI/CD y acceso a infraestructura interna.
  • Para los equipos que usan Bitbucket o servidores git autoalojados, asumir exposición hasta que los fabricantes publiquen directrices de remediación más claras.

La pregunta sin respuesta

Sin CVE. Sin ataques confirmados en entorno real. Esa combinación es inusual para una falla de esta magnitud y plantea una pregunta: ¿permanecerá Plugin4Shell en letargo, o se está acumulando?

La arquitectura que posibilitó esta vulnerabilidad — fijar sin re-verificación, privilegio heredado, actualizaciones automáticas sin supervisión — se está replicando en todo el ecosistema más amplio de agentes de IA. Las plataformas que aún no han parcheado, o que han parcheado de forma incompleta, están efectivamente ejecutando el mismo modelo frágil.

Plugin4Shell no será el último fallo de este tipo. Debería ser el primero que las organizaciones tomen en serio.