Los bugs de corrupción de memoria siguen siendo una de las clases más persistentes de vulnerabilidades en software de sistemas, y entender la mecánica detrás de ellas es esencial para cualquiera que trabaje en investigación de vulnerabilidades, codificación segura o mitigación de exploits. "PUDA" es un término usado informalmente en algunas comunidades de seguridad para describir Premature Use of Dangling Access — una categoría de bugs donde un programa referencia memoria (un pointer, handle, u object reference) después de que esa memoria ha sido liberada, realocada o invalidada de otra manera. Esto está estrechamente relacionado con, y a menudo se usa indistintamente con, use-after-free (UAF) e issues de dangling pointer. Ya sea que encuentres el término PUDA en un writeup de CTF, en un paper de investigación o en un bug tracker interno, el concepto subyacente es el mismo: una referencia obsoleta siendo usada como si todavía fuera válida.
Qué Causa una Condición PUDA
En esencia, un bug PUDA surge de una discrepancia entre la vida útil real de un objeto y la vida útil asumida por el código que lo referencia. Las causas raíz comunes incluyen:
- Missing null-out after free: un pointer es liberado pero no se establece a
NULL, dejándolo dangling y reutilizable por error. - Race conditions: en código multithreaded, un thread libera un objeto mientras otro thread aún sostiene y usa una referencia a él (un escenario clásico adyacente a TOCTOU).
- Callback and event-driven logic: un objeto es destruido durante un callback, pero el código que llama continúa operando sobre él después de que el callback retorna.
- Reference counting errors: el reference count de un objeto se decrementa incorrectamente, causando que sea liberado mientras aún está