В інструментарії для керування ізольованими 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
