Атакующим удалось добавить незамеченный вредоносный код в репозиторий Plone

Разработчики свободной системы управления контентом Plone, написанной на Python и JavaScript/NodeJS, объявили об инциденте, в результате которого в git-репозиторий проекта на GitHub был добавлен вредоносный код. Изначально в репозитории были выявлены три появившихся 7 января изменения (1, 2, 3), добавляющие вредоносный код в JavaScript-файлы проекта (1, 2, 3). Разбор инцидента показал, что интеграция вредоносного кода была произведена в результате компрометации учётной записи одного из разработчиков, токен доступа которого был захвачен злоумышленниками после запуска вредоносного ПО в его системе.

14 января скомпрометированная учётная запись была заблокирована, а разработчикам проекта рекомендовано проанализировать коммиты с 1 по 14 января. 27 января было обнаружено, что замеченными коммитами дело не ограничилось и атака затронула пять репозиториев проекта (plone/volto, plone/mockup, plone/plone.app.mosaic,
plone/critical-css-cli, plone/plonetheme.barceloneta), в которые был незаметно интегрирован вредоносный код. В случае репозитория plone.app.mosaic, атакующим удалось подменить master-ветку. Атака была проведена спустя два месяца после захвата токена доступа разработчика.

Для интеграции изменений вместо обычных коммитов атакующие воспользовались операцией «force push» (git push с опцией «—force»), позволяющей принудительно заменить ветку во внешнем репозитории своим содержимым и, соответственно, переписать историю изменений (после замены показывается история из ветки, загруженной атакующим). Для предотвращения подобной подмены веток в будущем разработчики Plone включили в GitHub правила, блокирующие операции «force push» для основных веток и тегов.

В репозитории plone.app.mosaic для затруднения выявления компрометации атакующие подставили в master-ветку вредоносный коммит, имеющий фиктивную дату — 18 декабря, полагая, что область поиска вредоносного кода сосредоточится на изменениях, добавленных после фактической даты выполнения операции «force push». Вредоносное изменение преподносились в подставленном коммите как начало разработки нового тестового выпуска, но помимо смены номера версии в метаданных (с 4.0.0a1 на 4.0.0a2.dev0) в вызываемый на этапе сборки javascript-файл‎ prettier.config.js был добавлен вредоносный код. Для скрытия при просмотре изменения в терминале код был смещён с использованием пробелов. В интерфейсе GitHub данный код также не показывался по умолчанию и требовал нажатия кнопки «Load Diff».

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

Источник: http://www.opennet.ru/opennews/art.shtml?num=64718