SROP: falsificare un sigreturn
Quando un signal handler termina, il kernel chiama sigreturn, che ripristina l'intero contesto CPU da una struttura (sigcontext) sullo stack. Quella struttura, se la controlli, definisce ogni registro.
L'idea
Sigreturn-Oriented Programming: costruisci un falso sigcontext sullo stack con i registri che vuoi (incluso rip), poi invochi sigreturn (syscall 15). Il kernel carica i tuoi valori. Basta un gadget syscall; ret e sapere dove sta /bin/sh.
frame.rax = 59 # execve
frame.rdi = "/bin/sh"
frame.rip = syscall_gadgetPerché è potente
Con pochissimi gadget (spesso solo syscall) imposti tutti i registri: utile su binari minimali dove mancano i gadget classici. pwntools ha SigreturnFrame().
Difesa
Seccomp per limitare le syscall (bloccare execve), CET/shadow stack, e le solite ASLR/RELRO. Ridurre i gadget syscall esposti aiuta ma non elimina il vettore.