Уразливість у 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

Додати коментар або відгук