Luka w runc, umożliwiająca wydostanie się z kontenerów Docker i Kubernetes

W narzędziu do uruchamiania izolowanych kontenerów runc, stosowanym w Dockerze i Kubernetes, znaleziono lukę CVE-2024-21626, która umożliwia dostęp do systemu plików hosta z izolowanego kontenera. W trakcie ataku napastnik może nadpisać niektóre pliki wykonywalne w środowisku hosta i tym samym uzyskać możliwość wykonania swojego kodu poza kontenerem. W runtime crun i youki, które używają runc, oraz w LXC problem ten się nie pojawia. Luka została naprawiona w wersji runc 1.1.12.

W przypadku wykorzystania narzędzi Docker lub Kubernetes atak może być przeprowadzony przez przygotowanie specjalnie skonstruowanego obrazu kontenera, po zainstalowaniu i uruchomieniu którego z kontenera można uzyskać dostęp do zewnętrznego systemu plików. W przypadku użycia Dockera istnieje możliwość wykorzystania przez specjalnie przygotowany Dockerfile. Luka może być także eksploatowana w przypadku uruchamiania procesów w kontenerze za pomocą polecenia „runc exec” poprzez powiązanie katalogu roboczego z przestrzenią nazw środowiska hosta.

Luka spowodowana jest wyciekaniem wewnętrznych deskryptorów plików. Przed uruchomieniem kodu w kontenerze w runc następuje zamknięcie wszystkich deskryptorów plików za pomocą flagi O_CLOEXEC. Niemniej jednak, po późniejszym wywołaniu funkcji setcwd() pozostaje otwarty deskryptor pliku wskazujący na katalog roboczy, który wciąż jest dostępny po uruchomieniu kontenera. Zaproponowano kilka podstawowych scenariuszy ataku na środowisko hosta, wykorzystując pozostający deskryptor pliku.

Na przykład, napastnik może w obrazie kontenera określić parametr process.cwd, wskazujący na „/proc/self/fd/7/”, co spowoduje powiązanie z procesem pid1 w kontenerze katalogu roboczego znajdującego się w przestrzeni montowania środowiska hosta. W ten sposób w obrazie kontenera można skonfigurować uruchomienie „/proc/self/fd/7/../../../bin/bash” i przez wykonanie skryptu powłoki nadpisać zawartość „/proc/self/exe”, która odnosi się do hostowej kopii /bin/bash.

Inna forma ataku pozwala napastnikowi, ograniczonemu wewnątrz kontenera, uzyskać dostęp do katalogu środowiska hosta, jeśli w określonym kontenerze uruchomione są procesy z uprawnieniami za pomocą komendy „runc exec” z opcją „—cwd”. Napastnik może podmienić ścieżkę uruchamianego procesu na symboliczną linkę, wskazującą na „/proc/self/fd/7/” i uzyskać dostęp do „/proc/$exec_pid/cwd” dla systemu plików po stronie hosta. Napastnik może również osiągnąć zapis wykonywalnych plików po stronie środowiska hosta, organizując uruchomienie pliku wykonywalnego z środowiska hosta („/proc/self/fd/7/../../../bin/bash”) z następującym zapisem pliku „/proc/$pid/exe”, który odnosi się do uruchomionego pliku.

Ponadto w składnikach narzędzia Docker zidentyfikowano pięć dodatkowych podatności:

  • CVE-2024-23651 — stan wyścigu w pakiecie BuildKit, stosowanym w Dockerze do przekształcania kodu źródłowego w artefakty budowlane. Podatność jest spowodowana używaniem w równocześnie wykonywanych etapach budowy jednego wspólnego punktu montowania z cachem („—mount=type=cache,source=”), co umożliwia uzyskanie dostępu do plików w środowisku hosta z kontenera budowlanego przy przetwarzaniu specjalnie przygotowanego Dockerfile. Podatność została usunięta w BuildKit 0.12.5.
  • CVE-2024-23652 — błąd przy usuwaniu pustych plików, utworzonych dla punktu montowania przy używaniu opcji „—mount”, pozwala na usunięcie pliku poza kontenerem podczas przetwarzania specjalnie przygotowanego Dockerfile. Podatność została usunięta w BuildKit 0.12.5.
  • CVE-2024-23653 — błąd w implementacji API w BuildKit pozwala na uruchomienie kontenera z podwyższonymi uprawnieniami, niezależnie od ustawienia security.insecure. Podatność została usunięta w BuildKit 0.12.5.
  • CVE-2024-23650 — złośliwy klient lub interfejs frontendowy BuildKit może spowodować awaryjne zakończenie procesu w tle BuildKit. Podatność została usunięta w BuildKit 0.12.5.
  • CVE-2024-24557 — możliwość zatrucia cache w Moby, składniku do budowania specjalistycznych systemów izolacji kontenerowej. Podczas przetwarzania specjalnie przygotowanego obrazu kontenera można doprowadzić do umieszczenia w cache danych, które mogą być używane w następnych etapach budowy. Podatność została usunięta w Moby 25.0.2 i 24.0.9.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster