Pull to refresh

Очень странные дела на GitHub

Reading time3 min
Views55K
image

Обычный программист что-то гуглил в гугле и попал на репозиторий с вредоносным кодом и решил выяснить, сколько еще таких зараженных репозиториев, которые легко гуглятся.

3 августа Stephen Lacy написал в твиттере, что «обнаружил широкомасштабную атаку на 35 000 репозиториев GitHub», на проекты crypto, golang, python, js, bash, docker, k8s, а так же скрипты npm, образы докеров и установочные документы. (Позже он уточнил, что не «35 000 репозиториев», а 35 000 «code hits»)

Вскоре после его твита либо GitHub, либо злоумышленник удалил большинство общедоступных форков, а еще пару часов спустя появляется твит от только что созданной учетной записи пользователя @Pl0xP, где он утверждает, что он стоит за атакой, и это часть аудита за вознаграждение — bug bounty.

image

Большинство коммитов кажутся безобидными, с такими сообщениями, как «поднять версию до 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

image

Некоторые из них замаскированы под законно выглядящие пулл-реквесты, но репозиторий не получил никаких PR, Каждый файл go в этом репозитории был заражен.

Stephen Lacy обнаружил эксплойт, когда просматривал проект, который нашел в поиске Google. Он рекомендует не устанавливать случайные packages из Интернета, и призывает подписывать коммиты GPG.

Эта атака, возможно, направлена на пользователей, которые вводят в search-engines-related code snippets и попадают в эти вредоносные репозитории GitHub.

Вот возможный сценарий атаки:

  • Злоумышленник форкает репозиторий GitHub
  • Злоумышленник изменяет последний исходный коммит и добавляет вредоносный код, используя исходный идентификатор коммиттера.
  • Вредоносная начинка отправляет конфиденциальные переменные среды в инфраструктуру злоумышленника, а затем ожидает команды от злоумышленника для выполнения на машине.


Похоже, что злоумышленник изменял самый последний коммит и модифицировал его с помощью вредоносного кода. Возможно, он планировал внедрить этот код в исходный форкнутый проект.

Внося или фиксируя изменения правильным образом, злоумышленники могут выдать себя за другого пользователя GitHub и создать впечатление, что коммит исходит от них. Это делается путем локального изменения определенных переменных среды для получения имени пользователя и адреса электронной почты пользователя, за которого злоумышленник хотел бы выдать себя.

image

Скриншот одного из зараженных коммитов. Обратите внимание, что подпись коммита не проверена

Зараженные Golang файлы


image

Похоже, что злоумышленник запустил программу, чтобы «исправить» каждый из файлов «.go» клонированного проекта с помощью функции инициализации, таким образом получив возможность эксфильтрации переменных среды и выполнения кода на машине жертвы. Этот вредоносный код не будет работать, если переменная среды «e452d6ab=1» определена:

image

Зараженные NPM файлы


Похоже, злоумышленник запустил программу для «исправления» каждого из файлов «package.json» клонированного проекта с оператором «postinstall», имея логику для эксфильтрации переменных среды и выполнения кода на машине жертвы:

image

Зараженные YAML файлы


Файлы YAML, конфигурация инфраструктуры и контейнеры были изменены с помощью дополнительных шагов для выполнения команды curl для эксфильтрации всех переменных среды в настраиваемую службу:

image

Заявлению о том, что это «аудит» противоречат два момента:

  1. Код отфильтровал важные переменные среды. Допустим, вы делаете POC, и отправки имени вашего компьютера более чем достаточно.
  2. После эксфильтрации данных сервер отправлял команды для выполнения на машине жертвы.


Tane Piper написал, что 5 лет назад он сообщил почти о том же эксплойте в @npmjs, но никто не воспринял это всерьез.

Sven Slootweg прокомментировал: «На самом деле это не столько «эксплойт в npm», сколько более фундаментальная проблема с контролем доступа в операционных системах текущего поколения. Удаление постустановочных скриптов на самом деле ничего не решит — вместо этого вы просто вставите свой вредоносный код куда-нибудь в код пакета.»

Выводы


GitHub как вектор атаки в эпоху автоматизированных конвейеров ci/cd невероятно недооценен.
Данная атака нацелена на наивных разработчиков, так что будьте внимательны, когда гуглите куски кода. А если это все же было дело рук белого хакера, то уж очень потенциально вредоносные методы он выбрал.

PS


Не важно насколько криво я написал пост, важно сколько пользы для сообщества написали вы в комментариях.
Tags:
Hubs:
Total votes 91: ↑43 and ↓48-5
Comments55

Articles