Уязвимост в 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