Уязвимость в механизме GitHub Actions, допускающая подстановку команд

Подразделением информационной безопасности Project Zero из Google опубликована информация об уязвимости в GitHub. Речь идёт о методе эксплуатации уязвимости в механизме GitHub Actions, предназначенном для автоматизации различных операций в GitHub.

Уязвимость (CVE-2020-15228) вызвана тем, что обмен командами между процессом запуска Action и запускаемым действием производится через стандартный поток stdout. Actions Runner парсит стандартный поток вывода, формируемый в процессе выполнения действий, и выделяет в нём маркеры команд «##[command parameter1=data;]command-value…».

Проблема в том, что некоторые обработчики действий допускают передачу через тот же стандартный поток сторонних данных, например заголовок Issue или данные из коммитов. Злоумышленник может воспользоваться этой особенностью и осуществить подстановку своих команд, которые будут обработаны в Actions Runner. В частности, при помощи команды set-env можно выставить любую переменную окружения, в том числе определить переменную NODE_OPTIONS и организовать выполнение своего кода во время обработки действия в Node.js.

GitHub 1 октября 2020 года сообщил о переводе в разряд устаревших наиболее опасных команд set-env и add-path и выпустил обновление npm-пакета @actions/core, в который было добавлено предупреждение о возможных проблемах.

GitHub был уведомлён об уязвимости в июле и получил три месяца на её полное устранение, после чего — ещё 14 дополнительных дней, но всё равно не успел уложиться в срок, истекавший 2 ноября. В Project Zero отказались сместить дату ещё на 48 часов и опубликовали детали в намеченный день.

GitHub оперативно выпустил обновление Actions Runner 2.273.6, в котором заблокировал упомянутую в прототипе эксплойта команду set-env, но другие 13 поддерживаемых команд остаются незаблокированными. Для организации установки переменных окружения предложено использовать промежуточные файлы.

Источник: OpenNET