Разработчиците на свободната система за управление на съдържанието 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, нападателите успяха да подменят главната клонка. Атаката беше извършена два месеца след прихващането на достъпния токен на разработчика.
За интеграция на промените, вместо обичайните комити, нападателите използваха операцията „force push“ (git push с опцията „—force“), позволяваща принудително заместване на клонка във външния репозитория с тяхното съдържание и, съответно, преписване на историята на промените (след замяна се показва историята от клонката, заредена от нападателя). За предотвратяване на подобни подмени на клонки в бъдеще, разработчиците на Plone включиха в GitHub правила, блокиращи операции „force push“ за основни клонки и тагове.
В хранилище plone.app.mosaic атакующие вставили в master-ветку вредоносный коммит с фиктивной датой — 18 декабря, полагая, что поиск вредоносного кода сосредоточится на изменениях, сделанных после их первой активности в репозитории. Вредоносные изменения представили в подставленном коммите как начало разработки нового тестового выпуска, но помимо изменения номера версии в метаданных (с 4.0.0a1 на 4.0.0a2.dev0), в файл JavaScript prettier.config.js был добавлен вредоносный код. Чтобы скрыть его во время просмотра изменений в терминале, код был вставлен в одну строку с легитимной операцией и смещён из видимой области с помощью пробелов. В интерфейсе GitHub данный код также не отображался по умолчанию и требовал нажатия кнопки «Load Diff».

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