Компания Google раскрыла информацию о методе эксплуатации уязвимости (CVE-2020-15228) в механизме GitHub Actions, предназначенном для прикрепления обработчиков для автоматизации различных операций в GitHub. Например, при помощи GitHub Actions можно выполнить определённые проверки и тесты при совершении коммитов или автоматизировать обработку новых Issues. Уязвимость вызвана тем, что обмен командами между процессом запуска Action и запускаемым действием (Action) производится через стандартный поток (STDOUT) — Actions Runner парсит стандартный поток, формируемый в процессе выполнения действий, и выделяет в нём маркеры команд «##[command parameter1=data;]command-value…».
Проблема в том, что некоторые обработчики действий допускают передачу через тот же стандартный поток сторонних данных, например, передают через стандартный поток заголовок Issue или данные из коммитов. Злоумышленник может воспользоваться этой особенностью и осуществить подстановку своих команд, которые будут обработаны в Actions Runner. В частности, при помощи команды «set-env» можно выставить любую переменную окружения, в том числе определить переменную «NODE_OPTIONS» и организовать выполнение своего кода во время обработки действия в Node.js.
Например, проект VSCode запускает действие CopyCat для копирования новых issue в другой репозиторий. CopyCat выводит содержимое issue.title в stdout, что позволяет атаковать систему, на которой выполняется Actions Runner, через создание issue c заголовком вида «##[set-env name=NODE_OPTIONS;]—experimental-modules —experimental-loader=data:text/javascript,….».
1 октября GitHub сообщил о переводе в разряд устаревших наиболее опасных команд «set-env» и «add-path» и выпустил обновление npm-пакета @actions/core, в который было добавлено предупреждение о возможных проблемах. Полное устранение уязвимости было намечено на 2 ноября, но GitHub не успел подготовить изменение и попросил у выявивших проблему исследователей сдвинуть ранее намеченную дату раскрытия информации (GitHub был уведомлен о проблеме ещё в июле). Google Project Zero отказался от смещения даты, так как до этого уже было предоставлено 14 дополнительных дней сверх срока, и опубликовал детали в изначально намеченный день.
GitHub оперативно выпустил обновление Actions Runner 2.273.6, в котором заблокировал упомянутую в прототипе эксплоита команду «set-env», но другие 13 поддерживаемых команд остаются незаблокированными (т.е. пока устранён лишь один их частных случаев, но сама проблема остаётся и потенциально для атаки могут быть использованы другие команды). Для организации установки переменных окружения преложено использовать промежуточные файлы.
Источник: https://www.opennet.ru/opennews/art.shtml?num=54023