Lücke in Container-Runtime runc ermöglicht Host-Übernahme
Eine Sicherheitslücke in der Container-Runtime runc ermöglicht es Angreifern, aus privilegierten Containern auszubrechen und Root-Rechte zu erlangen.
- Merlin Schumacher
Angreifern ist es aufgrund einer Lücke in runc, der Container-Runtime von Docker, Kubernetes, containerd und weiteren Container-Systemen, möglich, aus privilegierten Containern auszubrechen und den Host zu übernehmen. Die runc-Entwickler haben inzwischen einen Patch bereitgestellt. Docker Inc. hat Version 18.09.2 von Docker veröffentlicht, die das Problem beseitigt. Anwender sollten ihre Container-Runtimes schnellstmöglich aktualisieren.
Vor der Lücke schützen die Standardkonfigurationen von AppArmor und SELinux nicht, wohl aber Namespaces, die so konfiguriert sind, dass der Root-User des Hostsystems nicht in den Container gemappt ist. Diese (eigentlich korrekte) Konfiguration von Namespaces ist nicht überall der Fall.
Ausbruch über symbolische Links
Laut der zugehörigen CVE-2019-5736 können Angreifer aus einem laufenden Container heraus das runc-Binary überschreiben. Der Linux-Kernel setzt für jeden Prozess den symbolischen Link /proc/self/exe
, der auf das Binary verweist, das für den Prozess gestartet wurde. Wenn nun ein Angreifer innerhalb des Containers etwa /bin/bash
durch ein Shell-Skript ersetzt, das auf #!/proc/self/exe
verweist, zeigt dieser symbolische Link auf das runc-Binary.
Schafft der Angreifer es nun, dieses Binary über dessen Filedescriptor unterhalb von /proc/self/fd
zu überschreiben, kann er eigenen Code ausführen. Da runc mit Root-Rechten läuft, hat der Angreifer sofort volle Kontrolle über das Hostsystem. Voraussetzung für den Angriff sind die Möglichkeit, Programme innerhalb des Containers als Root auszuführen, sowie falsch konfigurierte Container-Namespaces.
Wie bereits die Lücke beim "Docker-Spielplatz" Play with Docker zeigt auch diese Lücke, dass man beim Einsatz von privilegierten Containern äußerte Vorsicht walten lassen sollte. (mls)