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

В инструмента за управление на изолирани Linux контейнери Docker открита е уязвимост (CVE-2018-15664), който при определени обстоятелства позволява достъп до хост околната среда от контейнера при наличие на възможност за стартиране на свои образи в системата или при достъп до изпълнявания контейнер. Проблемът се проявява във всички версии на Docker и остава неизправен (предложен, но все още не приет, пач, реализиращ временно спиране на работата на контейнера по време на операции с ФС).

Уязвимостта позволява извличане на файлове от контейнера в произволна част от ФС на хост системата при изпълнение на командата «docker cp». Извличането на файлове се извършва с права root, което дава възможност за четене или запис на всякакви файлове в хост околната среда, което е достатъчно за получаване на контрол над хост системата (например, може да бъде презаписан /etc/shadow).

Атаката може да бъде извършена само по време на изпълнението на командата «docker cp» от администратора за копиране на файлове в контейнера или от него. Така атакуващият трябва да убеди администратора на Docker за необходимостта от изпълнение на тази операция и да предвиди използвания при копирането път. От друга страна, атаката може да бъде извършена, например, при предоставяне на облачни услуги за копиране на файлове с конфигурация в контейнера, построени с помощта на командата «docker cp».

Проблемът е причинен от недоразумение в прилагането на функцията FollowSymlinkInScope, изчисляваща абсолютния път в основната ФС на база на относителния път, вземащ предвид местоположението на контейнера. В процеса на изпълнение на командата «docker cp» възниква краткотрайно състояние на състезание, при което пътят вече е проверен, но операцията все още не е изпълнена. Тъй като копирането се извършва в контекста на основната ФС на хост системата, в указания период от време е възможно да бъде подменен линкът на друг път и да се инициира копиране на данни в произволно място в файловата система извън контейнера.

Тъй като времевият прозорец на проявление на състезанието е силно ограничен в подготвения прототип на експлоита При извършване на операции по копиране от контейнера, беше постигната успешна атака в по-малко от 1% от случаите при циклична подмяна на символичната връзка в пътя, използван в операцията по копиране (успешната атака беше извършена след около 10 секунди проби, непрекъснато опитвайки се да копираме файла с командата „docker cp“).

При извършване на операция по копиране в контейнера, може да се постигне повтаряща се атака за презапис на файл в хост системата само след няколко итерации. Възможността за атака е свързана с факта, че при копирането в контейнера се прилага концепцията „chrootarchive“, съгласно която процесът archive.go извлича архива не в chroot корена на контейнера, а в chroot родителската директория на целевия път, контролиран от атакуващия, и не спира изпълнението на контейнера (chroot се използва като индикатор за експлоатация на състоянието на състезанието).

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

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