Очень странные дела на GitHub
Обычный программист что-то гуглил в гугле и попал на репозиторий с вредоносным кодом и решил выяснить, сколько еще таких зараженных репозиториев, которые легко гуглятся.
3 августа Stephen Lacy написал в твиттере, что «обнаружил широкомасштабную атаку на 35 000 репозиториев GitHub», на проекты crypto, golang, python, js, bash, docker, k8s, а так же скрипты npm, образы докеров и установочные документы. (Позже он уточнил, что не »35 000 репозиториев», а 35 000 «code hits»)
Вскоре после его твита либо GitHub, либо злоумышленник удалил большинство общедоступных форков, а еще пару часов спустя появляется твит от только что созданной учетной записи пользователя @Pl0xP, где он утверждает, что он стоит за атакой, и это часть аудита за вознаграждение — bug bounty.
Большинство коммитов кажутся безобидными, с такими сообщениями, как «поднять версию до 0.3.11».
Некоторые из этих repo histories включают коммиты от первоначального автора, но коммит не проверен GPG: github.com/redhat-openshift-ecosystem/operator-bundle-validate-container/commits? author=samvarankashyap
Некоторые из этих репозиториев были «заархивированы», например, этот в 2019 году.
github.com/Logicalis/asn1/commit/9962b33c959eb0e62f60280a7f65552365ff31cc
Некоторые из них замаскированы под законно выглядящие пулл-реквесты, но репозиторий не получил никаких PR, Каждый файл go в этом репозитории был заражен.
Stephen Lacy обнаружил эксплойт, когда просматривал проект, который нашел в поиске Google. Он рекомендует не устанавливаем случайные packages из Интернета, и призывает подписывать коммиты GPG.
Эта атака, возможно, направлена на пользователей, которые вводят в search-engines-related code snippets и попадают в эти вредоносные репозитории GitHub.
Вот возможный сценарий атаки:
- Злоумышленник форкает репозиторий GitHub
- Злоумышленник изменяет последний исходный коммит и добавляет вредоносный код, используя исходный идентификатор коммиттера.
- Вредоносная начинка отправляет конфиденциальные переменные среды в инфраструктуру злоумышленника, а затем ожидает команды от злоумышленника для выполнения на машине.
Похоже, что злоумышленник изменял самый последний коммит и модифицировал его с помощью вредоносного кода. Возможно, он планировал внедрить этот код в исходный форкнутый проект.
Внося или фиксируя изменения правильным образом, злоумышленники могут выдать себя за другого пользователя GitHub и создать впечатление, что коммит исходит от них. Это делается путем локального изменения определенных переменных среды для получения имени пользователя и адреса электронной почты пользователя, которого злоумышленник хотел бы выдать за другого.
Скриншот одного из зараженных коммитов. Обратите внимание, что подпись коммита не проверена
Зараженные Golang файлы
» alt=«image»/>
Похоже, что злоумышленник запустил программу, чтобы «исправить» каждый из файлов ».go» клонированного проекта с помощью функции инициализации, таким образом получив возможность эксфильтрации переменных среды и выполнения кода на машине жертвы. Этот вредоносный код не будет работать, если переменная среды «e452d6ab=1» определена:
Зараженные NPM файлы
Похоже, злоумышленник запустил программу для «исправления» каждого из файлов «package.json» клонированного проекта с оператором «postinstall», имея логику для эксфильтрации переменных среды и выполнения кода на машине жертвы:
Зараженные YAML файлы
Файлы YAML, конфигурация инфраструктуры и контейнеры были изменены с помощью дополнительных шагов для выполнения команды curl для эксфильтрации всех переменных среды в настраиваемую службу:
Заявлению о том, что это «аудит» противоречат два момента:
- Код отфильтровал важные переменные среды. Допустим, вы делаете POC, и отправки имени вашего компьютера более чем достаточно.
- После эксфильтрации данных сервер отправлял команды для выполнения на машине жертвы.
Tane Piper написал, что 5 лет назад он сообщил почти о том же эксплойте в @npmjs, но никто не воспринял это всерьез.
Sven Slootweg прокомментировал: «На самом деле это не столько «эксплойт в npm», сколько более фундаментальная проблема с контролем доступа в операционных системах текущего поколения. Удаление постустановочных скриптов на самом деле ничего не решит — вместо этого вы просто вставите свой вредоносный код куда-нибудь в код пакета.»
Выводы
GitHub как вектор атаки в эпоху автоматизированных конвейеров ci/cd невероятно недооценен.
Данная атака нацелена на наивных разработчиков, так что будьте внимательны, когда гуглите куски кода. А если это все же было дело рук белого хакера, то уж очень потенциально вредоносные методы он выбрал.