В инструментариума за стартиране на изолирани контейнери 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="), което позволява при обработката в BuildKit на специално оформен 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
