BookinglyTech News
Ciberseguridad

Gitleaks y semgrep no detectan ninguno de los 118 payloads dirigidos a agentes

Un benchmark enfrenta escáneres de secretos y SAST con un detector orientado a agentes: los primeros no tienen reglas para instrucciones en lenguaje natural, el segundo alcanza un 85% de recall.

2 min de lecturaDev.to0 vistas

Un estudio mide qué detectan los escáneres clásicos de repositorios frente a payloads diseñados para manipular agentes de IA. Resultado: nada. Gitleaks 8.21.2 y semgrep 1.176.1 (con los paquetes p/default, p/python y p/trailofbits) marcan cero de los 118 payloads hostiles del corpus. El detector InjectionGate de Sentinel, orientado a agentes, acierta 100 de 118: un 85%.

El corpus son 192 archivos, 134 sintéticos y 58 externos, más dos controles positivos para los escáneres. De ahí salen 118 payloads dirigidos a agentes (90 sintéticos, 28 externos) y 72 controles limpios. Los sintéticos vienen de un manifiesto escrito antes del escaneo, con clase, canal y marca de hostilidad; los externos se etiquetaron a mano según la intención del autor. Los snapshots son Prompt-Injection-Everywhere, ChatGPT_DAN y llm-security.

Antes de medir, el autor comprueba que su banco de pruebas funciona: gitleaks detecta el secreto plantado y semgrep el archivo con eval y bind a 0.0.0.0. Eso descarta que los ceros sean una mala configuración. Es alcance: ninguna regla de las configuraciones de semgrep probadas busca instrucciones en lenguaje natural dirigidas a un agente. No es un fallo del escáner, es que no se diseñó para eso.

Lo que sí caza un detector de agentes

El desglose por clase va del 100% al 64%. Direct override, cambio de persona, instrucciones escondidas en documentación e instrucciones sin palabra clave llegan al 100%. Le siguen exfiltración de datos (92%), manipulación de herramientas (91%), mensaje de sistema falso (72%), ofuscación o typo (70%), petición de pago (67%) y multi-etapa, que se queda en el 64%.

Por canal, la documentación da un 83% sobre 47 payloads y el código un 86% sobre 71. Por origen, los sintéticos suben al 90% y los externos bajan al 68%. Sobre los 72 controles limpios no marca ninguno. Las señales que más disparan son instruction_in_data_region (67), override_previous (31) y persona_switch (13).

Qué pasa después del aviso

Un ejecutor en modo sombra pasa los 192 archivos por processFile con el LLM, GitLab y la red stubbeados. Cero llamadas de red, cero commits, cero secretos colados en el prompt y cero payloads persistidos en memoria. En 43 archivos hostiles del canal de código, la copia que iba al prompt salió saneada.

Quedan dos agujeros que el informe señala. En 51 casos un fragmento coincidente llegó literal al prompt, todos en la banda suspect, que no se sanea por diseño. Y en 20 archivos hostiles no se matcheó ningún span, así que el archivo entero llegó al modelo sin tocar.

El autor se cura en salud: esto no demuestra que ningún producto comercial sea vulnerable, ni que Sentinel sea completo, ni que detectar equivalga a manejar con seguridad. La deriva de decisión no se pudo medir en la ruta SKIP y se reporta como no medida. Es un banco propio, de una sola ejecución y sin revisión externa; los números son suyos.