
Riproduzione della vulnerabilità del kernel CVE-2017-5123 che consente l'escalation locale dei privilegi tramite scrittura di memoria nella syscall waitid, dimostrata con fuga dal container Docker su Linux 4.13.
Nota: Il codice in questo repository serve a dimostrare l'isolamento delle tecnologie di sandbox sicure per pod, come kata containers, e non ha intenzione di attaccare alcuna piattaforma.
echo 0 > /proc/sys/kernel/kptr_restrict
cat /proc/kallsyms
(gdb) p &(((struct task_struct *)0)->fs)
(gdb) p &(((struct task_struct *)0)->parent)
(gdb) p &(((struct fs_struct *)0)->root)
L'implementazione di waitid nei kernel upstream non limitava la destinazione in cui copiare i risultati delle informazioni. Ciò può consentire agli utenti locali di scrivere in memoria del kernel altrimenti protetta, portando a escalation dei privilegi.
Il bug è stato introdotto il 2017-05-21 e corretto il 2017-10-09.
Questa CVE è già stata corretta nelle successive release del ramo 4.13 e nei kernel mainline più recenti. Tuttavia, potrebbero esistere CVE simili che consentono l'escalation dei privilegi. La CVE stessa è in realtà abbastanza simile alla famosa dirty cow, CVE-2016-5195 .
CVE-2017-5123.c usa questa vulnerabilità per modificare il valore di /proc/sys/vm/mmap_min_addr. Quindi fa sì che il kernel Linux chiami lo shellcode per ottenere i permessi di accesso ai file della root dell'host.