В инструмента за управление на изолирани 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
