flawopen.com/Simulators/Heap Use-After-Free
Modelo de memória visual interativo demonstrando ponteiros pendentes após kfree(), reaproveitamento de chunks e escalonamento de privilégios no kernel Linux.
Imagine sair do quarto 304 de um hotel, devolver o cartão na recepção, mas guardar uma chave cópia secreta. O hotel aluga o quarto 304 para outro hóspede. Mais tarde, você abre o quarto com a chave cópia e acessa os pertences dele! Essa chave cópia é um ponteiro pendente (dangling pointer).
// Vulnerable cleanup routine
void release_session(struct session_mgr *mgr) {
if (mgr->active_session) {
kfree(mgr->active_session);
// FLAW: mgr->active_session remains dangling!
}
}
// Hardened cleanup routine
void release_session(struct session_mgr *mgr) {
struct user_session *sess;
sess = xchg(&mgr->active_session, NULL);
if (sess) {
memzero_explicit(sess, sizeof(*sess));
kfree(sess);
}
}