Bienvenida al curso
Bienvenido a OWASP A03: inyección. Esta línea es del registro de acceso del buscador de trámites de una municipalidad ficticia:
203.0.113.77 - - [14/Oct/2026:22:41:09 -0600] "GET /tramites/buscar?q=%27+OR+%271%27%3D%271 HTTP/1.1" 200 48211Decodificada, la búsqueda dice ' OR '1'='1. Lo grave no es el intento, que tarde o temprano le llega a cualquier buscador público, sino el final de la línea: código 200 y 48 211 bytes, cuando una búsqueda normal devuelve unos pocos miles. La consulta devolvió la tabla entera. Eso delata el código: alguien pegó el texto del usuario dentro de la sentencia SQL, y la base de datos no tuvo forma de distinguir el dato de la instrucción.
Ese mismo error, mezclar datos con instrucciones, explica también la inyección de comandos y el XSS. Aquí lo escribe, lo revisa, lo corrige y lo detecta en registros como el de arriba.
Qué va a lograr
- Explicar por qué la inyección SQL, la de comandos y el XSS nacen del mismo error: mezclar datos con instrucciones.
- Reconocer en código Python y Flask los patrones vulnerables y sus versiones seguras.
- Revisar código con el método de los sumideros,
grep, Bandit y Semgrep. - Corregir con consultas parametrizadas, llamadas sin shell, codificación de salida y CSP, y demostrarlo con pruebas en pytest.
- Detectar intentos en registros de acceso y WAF, y redactar un reporte de hallazgo con CWE y OWASP ASVS.
Para quién es y qué necesita
Para quien desarrolla, revisa código o trabaja en un SOC y quiere entender la inyección desde la raíz. Conviene haber hecho Seguridad web con OWASP Top 10 y leer algo de Python; si nunca ha programado, empiece por Python para ciberseguridad.
Necesita Python 3.10 o superior, una terminal (Bash o PowerShell) y un editor como VS Code. Semgrep se instala con pip en el módulo 2; en algunos equipos con Windows da problemas, y en ese caso el laboratorio se completa con Bandit y grep.
Cómo está organizado
| Módulo | Qué aprende | Laboratorio |
|---|---|---|
| 1. Qué es la inyección y por qué pasa | Datos e instrucciones, historia, CWE, contextos, y las herramientas Python, sqlite3, Flask y curl | Escribir su tienda vulnerable en localhost |
| 2. Cómo se ve en el código y cómo se revisa | SQL y execute, subprocess, Jinja2, grep, Bandit y Semgrep | Revisar código con Bandit y Semgrep |
| 3. Cómo se previene y se corrige | Parametrizar, mínimo privilegio, evitar la shell, CSP, validación, ASVS y pytest | Corregir la tienda y probarlo con pytest |
| 4. Detectar, monitorear y reportar | Registros, WAF, eventos de seguridad, reglas Sigma y la conclusión | Detectar intentos y redactar el reporte |
| Evaluación | 6 preguntas sobre todo el curso | Aprueba con 70 % |
Cómo aprovecharlo
Todo gira alrededor de Café Tarrazú Lab, una tienda de tres funciones que usted escribe en el primer laboratorio con una inyección distinta en cada una: SQL, comandos y XSS. Escriba la consulta concatenada a mano, sin copiarla: así la reconoce después en un pull request ajeno.
El laboratorio del módulo 3 es el que más tiempo pide: corregir las tres funciones y escribir pruebas en pytest que fallen contra la versión vulnerable. Si una prueba pasa antes y después de corregir, no prueba nada.
La evaluación final tiene 6 preguntas; con 70 % recibe el certificado y la insignia del curso.
Tiempo estimado
Unas 5 horas en total. Reserve unos 45 minutos sin interrupciones para cada laboratorio.