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

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

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

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

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

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

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

  • CVE-2024-23651 е условие за състезание в пакета BuildKit, използван от Docker за преобразуване на изходния код в артефакти за компилация. Уязвимостта е причинена от използването на една обща точка на монтиране с кеш („-mount=type=cache,source=”) в едновременно изпълнени етапи на изграждане, което позволява, когато се обработва специално проектиран Dockerfile в BuildKit, достъп до файлове в хост средата от контейнера за изграждане. Уязвимостта е коригирана в 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