Уязвимост в runc, позволяваща избягване на контейнери Docker и Kubernetes

В инструментария за стартиране на изолирани контейнери runc, използван в Docker и Kubernetes, е открита уязвимост CVE-2024-21626, която позволява достъп до файловата система на хост средата от изолирания контейнер. По време на атаката, злонамерените лица могат да презапишат някои изпълними файлове в хост средата и по този начин да изпълнят собствен код извън контейнера. В runtime crun и youki, които използват runc, както и в LXC, проблемът не се проявява. Уязвимостта е отстранена в версия runc 1.1.12.

При използване на инструменти Docker или Kubernetes, атаката може да бъде извършена чрез подготвяне на специално форматиран образ на контейнера, след инсталиране и стартиране на който от контейнера може да се обърне към външната ФС. При използване на Docker има възможност за експлоатация чрез специално оформен Dockerfile. Уязвимостта може също да бъде експлоатирана при стартиране на процеси в контейнера с командата „runc exec“ чрез свързване на работната директория към пространството на именовани хостови среди.

Уязвимостта е причинена от изтичане на вътрешни файлови дескриптори. Преди стартиране на кода вътре в контейнера, в runc се затварят всички файлови дескриптори с флага O_CLOEXEC. Въпреки това, след последващо изпълнение на функцията setcwd(), остава отворен файлов дескриптор, сочещ към работната директория и продължаващ да е достъпен след стартиране на контейнера. Предложени са няколко основни сценария на нападение върху хост средата, използвайки останалия файлов дескриптор.

Например, нападателят може да укаже в образа на контейнера параметъра process.cwd, сочещ към „/proc/self/fd/7/“, което ще доведе до привързване на процеса pid1 в контейнера към работната директория в пространството на монтиране на хост средата. По този начин в образа на контейнера може да се настрои стартиране на „/proc/self/fd/7/../../../../bin/bash“ и чрез изпълнение на shell скрипт да се презапише съдържанието на „/proc/self/exe“, което сочи към хостовата версия на /bin/bash.

Друг вариант на атака позволява на злонамерен потребител, ограничен в контейнера, да получи достъп до директорията на хостовата среда, ако в посочения контейнер се стартират привилегировани процеси с командата „runc exec с опцията „—cwd“. Атакуващият може да подмени пътя на стартиращия се процес с символична връзка, сочеща към „/proc/self/fd/7/“ и да постигне отваряне на „/proc/$exec_pid/cwd“ за достъп до файловата система на хоста. Атакуващият също може да постигне презапис на изпълнимите файлове на хостовата среда, чрез организиране на стартиране на изпълним файл от хостовата среда („/proc/self/fd/7/../../../../bin/bash“) с последващия презапис на файла „/proc/$pid/exe“, сочещ към стартирания файл.

Освен това, в компонентите на инструментария Docker са открити още пет уязвимости:

  • CVE-2024-23651 — състояние на гонка в пакета BuildKit, използван в Docker за преобразуване на изходния код в сборъчни артефакти. Уязвимостта е причинена от използването на обща точка на монтиране с кеш в паралелно изпълнявани етапи на сглобяване („—mount=type=cache,source=“), което позволява при обработка на специално оформен Dockerfile да се получи достъп до файлове в хостовата среда от сборъчния контейнер. Уязвимостта е отстранена в BuildKit 0.12.5.
  • CVE-2024-23652 — грешка при изтриване на празни файлове, създадени за точка на монтиране при използване на опцията „—mount“, позволява изтриване на файл извън контейнера при обработка на специално оформен Dockerfile. Уязвимостта е отстранена в BuildKit 0.12.5.
  • CVE-2024-23653 — грешка в реализирането на API в BuildKit позволява изпълнението на контейнер с повишени привилегии, независимо от състоянието на настройката security.insecure. Уязвимостта е отстранена в BuildKit 0.12.5.
  • CVE-2024-23650 — злонамерен клиент или фронтенд на BuildKit може да предизвика аварийно прекратяване на фоновия процес на BuildKit. Уязвимостта е отстранена в BuildKit 0.12.5.
  • CVE-2024-24557 — възможност за отравяне на кеша в Moby, компонент за изграждане на специализирани системи за контейнерна изолация. При обработка на специално оформен образ на контейнер може да се постигне поставяне в кеш на данни, които могат да се използват на следващите етапи на сглобяване. Уязвимостта е отстранена в Moby 25.0.2 и 24.0.9.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster