В инструментарии для управления изолированными Linux-контейнерами Docker выявлена (https://www.openwall.com/lists/oss-security/2019/05/28/1) уязвимость (CVE-2018-15664 (https://security-tracker.debian.org/tracker/CVE-2018-15664)), которая при определённом стечении обстоятельств позволяет получить доступ к хост-окружению из контейнера при наличии возможности запуска своих образов в системе или при доступе к выполняемому контейнеру. Проблема проявляется во всех версиях Docker и остаётся неисправленной (предложен, но пока не принят, патч (https://github.com/moby/moby/pull/39252), реализующий приостановку работы контейнера на время выполнения операций с ФС).Уязвимость позволяет извлечь файлы из контейнера в произвольную часть ФС хост-системы при выполнении команды "docker cp". Извлечение файлов выполняется с правами root, что даёт возможность прочитать или записать любые файлы в хост-окружении, чего достаточно для получения контроля за хост-системой (например, можно переписать /etc/shadow). Атака может быть совершена только в момент выполнения администратором команды "docker cp" для копирования файлов в контейнер или из него. Таким образом атакующему необходимо каким-то образом убедить администратора Docker в необходимости выполнения этой операции и предугадать используемый при копировании путь.
Проблема вызвана ошибкой в функции FollowSymlinkInScope (https://github.com/moby/moby/blob/master/pkg/symlink/fs.go#L... вычисляющей абсолютный путь в основной ФС на основании относительного пути, учитывающего размещение контейнера. В процессе выполнения команды "docker cp" возникает кратковременное состояние гонки (https://ru.wikipedia.org/wiki/%D0%A1%D0%... при котором путь уже проверен, но операция ещё не выполнена. Так как копирование производится в контексте основной ФС хост-системы в указанный промежуток времени можно успеть подменить ссылку на другой путь и инициировать копирование данных в произвольное место файловой системы вне контейнера.
Так как временное окно проявления состояния гонки сильно ограничено в подготовленном прототипе эксплоита (https://www.openwall.com/lists/oss-security/2019/05/28/1/1) при выполнении операций копирования из контейнера удалось добиться проведения успешной атаки в менее 1% случаев при цикличной подмене символической ссылки в пути, используемом в операции копирования (успешная атака была совершена после примерно 10 секунд попыток непрерывно в цикле скопировать файл командой "docker cp").
При выполнении операции копирования в контейнер можно добиться повторяемой атаки по перезаписи файла в хост-системе, для проведения которой достаточно всего нескольких итераций. Возможность атаки связана с тем, что при копировании в контейнер применяется концепция "chrootarchive", в соответствии с которой процесс archive.go извлекает архив не в chroot корня контейнера, а в chroot родительского каталога целевого пути, подконтрольного атакующему (chroot используется как признак для эксплуатации состояния гонки). С практической стороны атака может быть совершена, например, при предоставлении облачными сервисами средств для копирования файлов конфигурации в контейнер, построенных с использованием команды docker cp".
URL: https://www.openwall.com/lists/oss-security/2019/05/28/1
Новость: https://www.opennet.ru/opennews/art.shtml?num=50765