Разкрити са детайли за атака срещу инфраструктурата, използвана при разработването на машинно обучаващия фреймворк PyTorch, която е позволила извличането на ключове за достъп, достатъчни за качване на произволни данни в хранилището с релизите на проекта в GitHub и AWS, както и за вмъкване на код в основната клонка на хранилището и добавяне на бекдор чрез зависимости. Подмяната на релизите на PyTorch е могла да бъде използвана за атака срещу големи компании, като Google, Meta, Boeing и Lockheed Martin, които използват PyTorch в своите проекти. В контекста на програмата Bug Bounty, компанията Meta е изплатила на изследователите $16,250 за информация относно проблема.
Същността на атаката е възможността за изпълнение на свой код на сървъри непрекъсната интеграция, извършваща повторно изграждане и изпълнение на задания за тестване на нови промени, изпратени в хранилището. Проблемът засяга проекти, които използват собствени външни обработки „Self-Hosted Runner“ с GitHub Actions. За разлика от традиционните GitHub Actions, обработките Self-Hosted се изпълняват не в инфраструктурата на GitHub, а на собствени сървъри или в виртуални
машини, поддържани от разработчиците. Изпълнението на сборни задания на собствените сървъри позволява стартирането на код, който може да извършва сканиране на вътрешната мрежа на предприятието, да търси в локалната файлова система ключове за криптиране и токени за достъп, да анализира променливи на средата с параметри за достъп до външни хранилища или облачни услуги. При отсъствие на адекватна изолация на сборната среда, намерените конфиденциални данни могат да бъдат изпратени на атакуващите извън, например, чрез извикване на външни API. За определяне на използването на проектите „Self-Hosted Runner“ може да се използва инструментарият Gato, който анализира публично достъпните workflow файлове и логовете на CI задания.
В PyTorch и много други проекти, които използват „Self-Hosted Runner“, стартирането на билд задачи е разрешено само за разработчици, чиито промени са били прегледани и включени в кодовата база на проекта. Наличие на статус „contributor“ при използване на настройките по подразбиране в репозитория позволява на разработчиците да стартират GitHub Actions при подаване на pull заявки и, съответно, да изпълняват своя код в всяка среда на GitHub Actions Runner, свързана с репозитория или управляващата проектна организация.
Свързаността със статуса „contributor“ се оказа лесно да се заобиколи – достатъчно е предварително да се подаде незначителна промяна и да се изчака нейното приемане в кодовата база, след което разработчикът автоматично получава статус на активен участник, pull заявките на когото могат да бъдат тествани в CI инфраструктурата без допълнителна проверка. За получаване на статус на активен разработчик в хода на експеримента бяха използвани незначителни козметични промени, свързани с отстраняване на печатни грешки в документацията. За получаване на достъп до репозитория и хранилище на релизите на PyTorch в хода на атаката, при изпълнение на кода в „Self-Hosted Runner“, бе осъществено прихващане на GitHub токена, използван за достъп до репозитория от билд процеси, както и на AWS ключовете, използвани за запазване на резултатите от билдовете.
Проблемът не е специфичен само за PyTorch и засяга много други големи проекти, които използват настройки по подразбиране за „Self-Hosted Runner“ в GitHub Actions. Например, споменавам осъществяването на подобни атаки за внедряване на бекдор в някои основни криптовалутни портфейли и блокчейн проекти с милиарден капитал, въвеждане на промени в релизите на Microsoft Deepspeed и TensorFlow, компрометиране на едно от приложенията на CloudFlare, както и изпълнение на код на компютър в мрежата на Microsoft. Подробности относно тези инциденти все още не са разкрити. В рамките на действащите програми Bug Bounty изследователите са изпратили над 20 заявки за получаване на награди на стойност няколко стотин хиляди долара.
Източник: opennet.ru
