Shocker: Sicherheitslücke in Docker

Unter dem Namen Shocker steht seit Kurzem ein Programm zur Verfügung, das aus Docker-Containern ausbrechen kann.

Docker ist ein High-Level API für LXC (Linux Containers) und erweitert teilweise deren Funktionalität. Docker isoliert Prozesse voneinander und macht das Installieren von Software dadurch sehr einfach. Hauptziel von Docker ist es, Software einfach zu verteilen. Dazu werden so genannte Docker-Images der Software bereitgestellt, welche ein anderer Anwender mit Hilfe eines einzigen Befehls rasch installieren kann. Im Prinzip sind Container vereinfachte virtuelle Maschinen, die keine Vollvirtualisierung bieten und sich aus verschiedenen Schichten (Layers) zusammensetzen. Container sind von anderen Containern und vom Hostsystem isoliert: Jeder Container besitzt sein eigenes Dateisystem, seinen eigenen Netzwerkstack und so weiter.

Das C-Programm Shocker dient als Proof-of-Concept, wie man das Hostsystem einer Docker-Umgebung aus dem Container attackieren kann. Der Angreifer erhält dabei Zugriff auf Dateien des Hosts. Das Problem besteht darin, dass Docker Bind-mount verwendet, wodurch die Dateisystemstruktur des Tasks mit dem Hosts geteilt wird. Das Programm nutzt genau dies aus. Hierzu ruft es zunächst die Funktion “find_handle()” auf, welche das Datei-Handle der gewünschten Datei sucht. Dieses Handle ist typischerweise ein 64-Bit-String, welcher auch die 32-Bit-Inode-Nummer enthält. Ist das Handle erst einmal gefunden, gibt der Code die Datei mit Hilfe der “dump_handle()”-Funktion aus.

Betroffen von dieser Schwachstelle sind nur Docker-Versionen bis 0.11. Insbesondere funktioniert Shocker nicht für die derzeit stabile und empfohlene Version 1.0.

Nach oben