В инструментариума за управление на изолирани Linux контейнери Docker уязвимост (), който при определени обстоятелства позволява достъп до хост-средата от контейнера при наличие на възможност за стартиране на собствени образи в системата или при достъп до изпълняващия се контейнер. Проблемът се проявява във всички версии на Docker и остава непоправен (предложен, но все още не приет, , реализация на временно спиране на работата на контейнера по време на операции с ФС).
Уязвимостта позволява извличане на файлове от контейнера на произволно място от ФС на хост-системата при изпълнение на командата „docker cp“. Извличането на файлове се извършва с права root, което позволява четене или запис на всякакви файлове в хост-средата, което е достатъчно за получаване на контрол над хост-системата (например, може да се препише /etc/shadow).
Атаката може да бъде извършена само по време на изпълнение от администратора на командата „docker cp“ за копиране на файлове в контейнера или от него. Следователно атакуващият трябва по някакъв начин да убеди администратора на Docker в необходимостта от извършване на тази операция и да предвиди използвания маршрут при копирането. От друга страна, атаката може да бъде извършена, например, при предоставяне от облачните услуги на средства за копиране на конфигурационни файлове в контейнера, изградени с използване на командата „docker cp“.
Проблемът е причинен от недостатък в приложението на функцията , изчисляваща абсолютния маршрут в основната ФС на основание относителния маршрут, вземащ предвид разположението на контейнера. По време на изпълнението на командата „docker cp“ възниква краткотрайно , при което маршрутът вече е проверен, но операцията все още не е изпълнена. Тъй като копирането се извършва в контекста на основната ФС на хост-системата в указания период от време, може да се успее да се подмени линка на друг маршрут и да се инициира копирането на данни на произволно място извън контейнера.
Тъй като времевият прозорец за проявление на състоянието на състезание е силно ограничен в подготвения При извършване на операции по копиране от контейнера, успяхме да проведем успешна атака в по-малко от 1% от случаите, при циклична подмяна на символичната връзка в пътя, използван в операцията по копиране (успешната атака беше осъществена след около 10 секунди опити за непрекъснато циклично копиране на файл с командата „docker cp“).
При извършване на операция по копиране в контейнера може да се постигне повторима атака за презапис на файл в хост системата само за няколко итерации. Възможността за атака е свързана с това, че при копиране в контейнера се прилага концепцията „chrootarchive“, съгласно която процесът archive.go извлича архива не в chroot корена на контейнера, а в chroot родителския каталог на целевия път, под контрола на атакуващия, и не спира изпълнението на контейнера (chroot се използва като индикатор за експлоатация на състезателно състояние).
Източник: opennet.ru
