
Reproduktion der Kernel-Sicherheitslücke CVE-2017-5123, die eine lokale Privilegieneskalation durch einen Speicherschreibvorgang des waitid-Systemaufrufs ermöglicht, demonstriert mit einem Docker-Container-Ausbruch unter Linux 4.13.
Hinweis: Der Code in diesem Repository dient der Demonstration der Isolierung sicherer Pod-Sandbox-Technologien wie kata containers und beabsichtigt nicht, Plattformen anzugreifen.
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)
Die waitid-Implementierung in Upstream-Kernels schränkte das Ziel, in das die Ergebnisinformationen kopiert werden, nicht ein. Dies kann es lokalen Benutzern ermöglichen, in ansonsten geschützten Kernel-Speicher zu schreiben, was zu einer Privilegienausweitung führen kann.
Der Fehler wurde am 21.05.2017 eingeführt und am 09.10.2017 behoben.
Dieses CVE wurde bereits in späteren Veröffentlichungen des 4.13-Zweigs und neueren Mainline-Kernels behoben. Es kann jedoch ähnliche CVEs geben, die eine Privilegienausweitung ermöglichen. Das CVE selbst ist tatsächlich dem berühmten dirty cow, CVE-2016-5195 sehr ähnlich.
CVE-2017-5123.c nutzt diese Sicherheitslücke aus, um den Wert von /proc/sys/vm/mmap_min_addr zu ändern. Dann lässt es den Linux-Kernel Shellcode aufrufen, um die Dateizugriffsberechtigung des Host-Roots zu erlangen.