Saltar al contenido principal

Reto 5: Revisión segura de código generado por IA y agentes

Herramientas: Semgrep OSS (open source, LGPL 2.1) + Gitleaks (open source, MIT) · Frameworks: OWASP Top 10:2025 + CWE Top 25 · Tiempo: 3–4 h

Qué vas a construir

Un pipeline de revisión segura de código: generas código con un asistente de IA (Copilot, ChatGPT, Claude), reproduces deliberadamente las 6 clases de vulnerabilidad más comunes en código generado por IA, y luego las detectas y corriges con herramientas gratuitas de análisis estático. Este es el artefacto que demuestra que puedes ser el control humano para código escrito por IA — el requisito de mayor crecimiento en ofertas de Seguridad de IA.

Dónde ejecutas esto: en tu máquina, dentro del entorno del Paso 0. No necesitas cuenta de cloud.

Por qué importa para el empleo

Los asistentes de codificación con IA generan código más rápido de lo que los equipos pueden revisarlo, y estudios de Snyk, Veracode y Georgetown CSET encuentran consistentemente que una proporción relevante de muestras de código generado por IA contiene al menos una de las clases clásicas de vulnerabilidad OWASP/CWE — porque el modelo fue entrenado con código que también las contenía. Las ofertas de AI Security Engineer, AppSec Engineer y "desarrollo seguro asistido por IA" ahora piden explícitamente la capacidad de revisar, priorizar y corregir código generado por IA, no solo prompt-earlo. Este reto te da un proceso repetible y respaldado por herramientas para exactamente eso.

🎯 Las 6 clases de vulnerabilidad que vas a detectar

Cualquier asistente de codificación con IA puede reproducirlas — son debilidades antiguas y bien documentadas, no riesgos nuevos de "IA". Conocerlas a fondo, y saber encontrarlas automáticamente, es una habilidad central de AppSec que se transfiere directamente a la revisión de salidas de IA.

#VulnerabilidadCWECategoría OWASP Top 10:2025Error típico del código generado por IA
1SQL InjectionCWE-89A05:2025 – InjectionConsulta concatenada como string en vez de consulta parametrizada/ORM
2Cross-Site Scripting (XSS)CWE-79A05:2025 – InjectionRenderizar entrada del usuario en HTML/JS sin escapar
3Path TraversalCWE-22A01:2025 – Broken Access ControlConstruir una ruta de archivo desde entrada del usuario sin validar ../
4Auth BypassCWE-287 / CWE-306A07:2025 – Authentication FailuresFalta el chequeo de autenticación en un endpoint nuevo que el modelo generó
5Secretos en CódigoCWE-798A02:2025 – Security MisconfigurationAPI key/contraseña hardcodeada que el modelo usó como "ejemplo funcional"
6SSRFCWE-918A01:2025 – Broken Access ControlEl servidor obtiene una URL proporcionada por el usuario sin lista de permitidos

Números de categoría verificados contra la edición vigente OWASP Top 10:2025 — vuelve a verificarlos antes de citarlos en una entrevista, ya que OWASP renumera categorías periódicamente.

Pasos

# 1. Instala Semgrep (SAST) y Gitleaks (escaneo de secretos) en tu entorno virtual
python -m pip install semgrep
# Gitleaks: descarga el binario para tu OS desde
# https://github.com/gitleaks/gitleaks/releases (o `brew install gitleaks` en macOS)

# 2. Crea un repo de práctica y pide a un asistente de IA (Copilot/ChatGPT/Claude)
# que genere 6 fragmentos pequeños de código, uno por vulnerabilidad:
# "Write a Flask endpoint that looks up a user by ID in SQLite" → probable SQLi
# "Write a Flask route that renders a comment submitted by a user" → probable XSS
# "Write a function that serves a file given a filename from the query string" → Path Traversal
# "Write an admin endpoint that deletes a user by ID" → probable Auth Bypass
# "Write a script that calls the OpenAI API" → probable secreto hardcodeado
# "Write a function that fetches and returns the content of a URL provided by the user" → SSRF

# 3. Corre Semgrep con el ruleset de OWASP Top 10 sobre el repo completo
semgrep --config p/owasp-top-ten .

# 4. Corre un segundo ruleset más amplio de seguridad general
semgrep --config p/security-audit .

# 5. Corre Gitleaks para detectar secretos
gitleaks detect --source . --report-path reports/gitleaks-report.json

# 6. Guarda ambos reportes en reports/ — son tu evidencia
Mapeo: hallazgo de Semgrep/Gitleaks → clase de vulnerabilidad → CWE
HerramientaPatrón de regla/hallazgo (ejemplo)Clase de vulnerabilidadCWE
Semgrep p/owasp-top-tenpython.lang.security.audit.formatted-sql-querySQL InjectionCWE-89
Semgrep p/owasp-top-tenpython.flask.security.audit.xss.debug / render sin escaparXSSCWE-79
Semgrep p/security-auditpath-traversal-open / os.path.join con entrada sin validarPath TraversalCWE-22
Semgrep p/security-auditDecorador @login_required / @require_auth faltante en ruta sensibleAuth BypassCWE-287 / CWE-306
Gitleaksgeneric-api-key, openai-api-key, aws-access-keySecretos en CódigoCWE-798
Semgrep p/security-auditrequests.get(url_del_usuario) sin lista de permitidosSSRFCWE-918

Los IDs de reglas evolucionan con el registro de reglas de Semgrep — corre semgrep --config p/owasp-top-ten --json . e inspecciona check_id para ver los IDs exactos que reporta tu versión.

Herramientas gratuitas alternativas/complementarias
  • CodeQL (gratis para repos públicos y open source) — motor SAST de GitHub; fuerte en las 6 clases y se integra con GitHub code scanning + Copilot Autofix.
  • Bandit (gratis, específico de Python) — buen complemento a Semgrep para proyectos solo-Python, especialmente para secretos hardcodeados y mal uso de subprocess/eval.
  • TruffleHog (gratis, open source) — escáner de secretos alternativo con verificación en vivo de credenciales.
  • OWASP ASVS — checklist gratuito para verificar requisitos de autenticación/control de acceso más allá de lo que un escáner solo puede detectar (ej. auth bypass de lógica de negocio).

📦 Entregable

Un repositorio ai-code-security-review/ con:

  1. README.md — qué asistente de IA generó el código, los prompts que usaste, y una tabla resumen: vulnerabilidad → CWE → categoría OWASP → severidad.
  2. vulnerable/ — los fragmentos originales generados por IA, sin modificar (6 archivos, uno por clase de vulnerabilidad).
  3. fixed/ — tu versión corregida de cada fragmento, con un comentario de una línea explicando la corrección.
  4. reports/ — salida cruda de Semgrep y Gitleaks (JSON) como evidencia.
  5. Una breve sección "lecciones para hacer prompts": qué instrucción añadirías a tu prompt la próxima vez para reducir la probabilidad de que el asistente reproduzca cada vulnerabilidad (ej. "usa siempre consultas parametrizadas", "nunca hardcodees credenciales, usa variables de entorno").

✅ Criterios de éxito

  • Reprodujiste y detectaste las 6 clases de vulnerabilidad (SQLi, XSS, Path Traversal, Auth Bypass, Secretos en Código, SSRF).
  • Cada hallazgo está mapeado a su ID de CWE y categoría OWASP Top 10:2025.
  • Cada vulnerabilidad tiene una versión corregida correspondiente con explicación.
  • Corriste ambas herramientas, Semgrep y Gitleaks, y guardaste los reportes crudos como evidencia.
  • El README es entendible por un hiring manager no técnico en 2 minutos.
Usa solo ejemplos sintéticos y descartables

Genera y prueba únicamente en un repositorio local y desechable. Nunca apuntes estos escáneres a código de producción que no te pertenece, y nunca hagas commit de secretos reales (incluso los que parecen falsos pero están ligados a cuentas reales) en un repositorio público.


Anterior: ← Reto 4 · Volver al inicio del track

🎓 Terminaste el track — ¿ahora qué?

  1. Publica los 5 repos en tu GitHub y fíjalos (pin) en tu perfil.
  2. Escribe 1 post de LinkedIn por reto explicando qué aprendiste (esto genera visibilidad con reclutadores).
  3. Añade la línea de CV a tu currículum.
  4. Prepara una demo de 5 minutos de tu favorito para entrevistas.