BookinglyTech News
Ciberseguridad

Un prompt no basta para cazar fallos de seguridad en código generado por IA

Un desarrollador comprueba que pedirle al modelo que tenga cuidado solo aguanta una sesión. Movió la detección a un gate pre-commit con cinco pasadas.

2 min de lecturar/devops0 vistas

El aviso no llegó por un incidente en producción. Llegó porque alguien vio una clave de Stripe en vivo (sk_live_...) a punto de entrar en un commit: el código pasaba las pruebas, así que nadie lo había mirado dos veces. Días después apareció la misma raíz con otra forma, una consulta SQL montada con un f-string y la entrada del usuario cayendo directamente en el WHERE. La conclusión es incómoda para quien confía en pedirle al modelo que tenga cuidado.

El prompt se olvida, el gate no

El primer intento fue el más barato: añadir instrucciones sobre secretos e inyección al system prompt del asistente. Funcionó durante una sesión. Al día siguiente, en un chat nuevo, los mismos atajos volvieron. El modelo no recuerda la charla anterior, así que una corrección a nivel de prompt no se acumula: cada conversación empieza de cero.

Lo que sí aguantó fue mover la comprobación a un gate que se ejecuta sobre cada diff antes del commit, en lugar de un escaneo en CI que llega cuando el código ya salió de la cabeza de quien lo escribió. Son cinco pasadas, en este orden:

  • Escaneo de secretos por entropía alta, con los formatos de token de Stripe, OpenAI, AWS y GitHub, más valores sueltos de .env.
  • Lectura del flujo de control para inyección y fallos del OWASP: SQLi, inyección de comandos, BOLA/IDOR. Traza dónde acaba la entrada del usuario en lugar de quedarse en el regex.
  • Comprobación de backtracking en expresiones regulares para patrones ReDoS.
  • Generación del arreglo como parche aplicable, no como un número de línea.
  • Veredicto plano: pass, warn o fail.

El autor es explícito con los límites. Esto no sustituye a un pipeline SAST de verdad ni a un equipo de seguridad; no pilla lo mismo que Semgrep o que un pentest. Lo describe como los cinco segundos de fricción que antes no existían, justo antes del commit que antes pasaba sin más.

Lo que queda abierto

La pregunta que deja el hilo es de mantenimiento. Los formatos de clave cambian, aparecen proveedores nuevos y las reglas de entropía se quedan viejas sin que nadie se dé cuenta. Un gate así necesita su propio ciclo de revisión o se queda atrás en silencio, que es la peor forma de quedarse atrás: sigue diciendo pass y tú te lo crees.