Added some CWE links.

This commit is contained in:
Johannes Findeisen 2026-09-29 10:04:38 +02:00
commit 21ee05cecd
14 changed files with 55 additions and 55 deletions

View file

@ -3,7 +3,7 @@
Un laboratorio de seguridad en C99 en dos mitades:
- **`food.c`** — un demonio TCP deliberadamente vulnerable. Tiene un
desbordamiento de búfer de pila real, de libro de texto (CWE-120), más un par
desbordamiento de búfer de pila real, de libro de texto ([CWE-120](https://cwe.mitre.org/data/definitions/120.html)), más un par
de errores de propina.
- **`fooc.c`** — un exploit contra él. Calcula el offset del desbordamiento
desensamblando el programa objetivo en tiempo de ejecución, lee las fugas de
@ -244,7 +244,7 @@ columna derecha muestra qué hace realmente con la cadena de eventos.
| **PIE + ASLR** | `-fPIE` + ASLR=2 (ambos por defecto) | Las direcciones hardcodeadas de ret2win. Todo se mueve en cada ejecución | Todo donde el atacante tenga una fuga. ASLR sube el precio de un exploit; no es un fix. Nota que la pila, el heap y mmap se randomizan, pero el *contenido* del binario principal no — eso es lo que usan las cadenas ROP |
| **No fugues** | ningún `printf("%p")` a clientes; inicializa antes de imprimir | La fuga de información que hace que ASLR sea "gratis" en vez de "caro" | — |
| **No uses `printf(user_data)`** | `printf("%s", buf)` en lugar de `printf(buf)` | Errores de cadena de formato: lecturas de pila `%x`, escrituras arbitrarias `%n` — un *otro* camino a RCE | — |
| **No uses rutas no confiables** | valida y `openat()` bajo un directorio fijo | Path traversal (CWE-22) | — |
| **No uses rutas no confiables** | valida y `openat()` bajo un directorio fijo | Path traversal ([CWE-22](https://cwe.mitre.org/data/definitions/22.html)) | — |
| **CET / shadow stack** | `-fcf-protection=full`, soporte de kernel y CPU | El `ret` en sí: la shadow stack recuerda la *verdadera* dirección de retorno y falla ante un desajuste. Atrapa cadenas ROP que usan el `ret` de hardware | Ataques que nunca `ret` (call-oriented, o sobrescribir el objetivo de un puntero de función con una cadena de gadgets que no necesita retorno) |
| **Lenguajes seguros** | Rust, Go, C# para código nuevo | Toda la clase. Las comprobaciones de límites se imponen en ejecución, no se esperan en la revisión | — |
@ -423,4 +423,4 @@ pkill -x sh # solo si tienes shells sueltos de una prueba que salió mal
Nota: `pkill -x food` coincide exactamente con el **nombre** del proceso. No
uses `pkill -f ./food` — ese patrón también coincide con el shell donde lo
escribes y mata tu propia sesión. No es una hipótesis; ocurrió mientras se
construía este laboratorio.
construía este laboratorio.