Новоразкрита атака срещу веригата за доставки на софтуер показва колко бързо легитимен профил на разработчик може да се превърне в канал за разпространение на зловреден код.

Операцията, проследявана под името GHAPPIER, засегна 65 GitHub хранилища, заразявайки 73 файла в 22 профила. Тя включваше легитимен npm пакет, който разпространяваше злонамерен софтуер за зареждане (loader) до потребителите.

Атакуващите използваха достъп до профила на поддържащия пакета, за да променят изходния код и да автоматизират публикуването от основния клон (main branch) на проекта.

Отровената версия изглеждаше легитимна, тъй като беше създадена чрез автоматизирания процес за публикуване на проекта. Това направи възможно рутинно обновяване на зависимост да пренесе софтуер за отдалечено зареждане на код в средите на разработчиците.

От CloudSEK съобщават в доклад, споделен с Cyber Security News (CSN), че инцидентът е започнал на 9 септември, когато нападателят е използвал профила на поддържащия @dforge-core/dforge-mcp в продължение на 105 минути.

Изследователите не можаха да потвърдят как е получен достъпът, но казаха, че заразена машина на разработчик, разширение или пакет са вероятен път до идентификационните данни.

Случаят е важен и извън пределите на npm публикацията. Той подчертава защо довереното публикуване, достъпът до контрола на версиите и устройствата на разработчиците принадлежат към една и съща граница на сигурност.

Злонамерените кампании с автоматизирани работни процеси (workflows) в GitHub показват как атакуващите могат да превърнат автоматизацията в инструмент за кражба на идентификационни данни и по-широко компрометиране на хранилища.

Атака по веригата за доставки GHAPPIER

По време на неоторизирания достъп авторът на заплахата е вмъкнал отдалечен зареждащ модул (loader), променил е три реда, така че изпращането на промени (push) към основния клон да стартира работен процес по публикуване, а след това е пренаписал този работен процес за автоматично публикуване без надзор.

Злонамерената версия 0.2.21 на @dforge-core/dforge-mcp остана най-новата версия в регистъра в продължение на 35 минути и 38 секунди, преди поддържащият да възстанови проекта и да пусне чиста версия 0.2.22.

Промененият пакет носеше валидна npm автентичност (provenance). GitHub Actions го създаде чрез доверено публикуване с OpenID Connect, а потвърждението му в Sigstore записа извършената от атакуващия промяна.

Записът не можеше да удостовери, че кодът, влизащ в компилацията, е безопасен. Достъпът за запис в хранилището се превърна в достъп за публикуване — риск, който се наблюдава и при масово компрометиране на npm пакети.

Зареждащият модул е бил скрит в един ред около ред 3 320 от 99 KB файл и е стартирал четириетапна верига. Неговият финален компонент се е изтрил сам, намалявайки шанса търсене на диска да открие зловредния софтуер. Изследователите заявиха, че всички етапи все още са отговаряли на заявки при тестване пет дни след изтеглянето на пакета.

Скритата верига за доставка увеличава рисковете при реагиране

По-широкият преглед на CloudSEK свърза второ семейство злонамерен код в друго засегнато хранилище с PolinRider — документирана кампания, която незабележимо добавя код към реални конфигурационни файлове на проекти.

Зловредният код чете информация за командване и контрол (C2) от трансакция в блокчейна на Ethereum, вместо да използва обикновенโดмейн или хост. В доклада се отбелязва, че съвпадащ запис все още е изпращал сигнали (beaconing) по време на писането на изследването.

Изследователите посочват, че наблюдаваният модел може да обясни първоначалното превземане на профила. Документирано е, че PolinRider извлича кеширани Git идентификационни данни от заразени машини, позволявайки на киберпрестъпник да изпраща код от името на разработчика.

Тази възможност илюстрира защо защитата на крайните устройства на разработчиците е толкова важна, колкото и прегледът на хранилищата, особено след като частни хранилища бяха разкрити при инциденти по веригата за доставки с кражба на токени.

Организациите, използващи засегнатия пакет, трябва да фиксират версията си на 0.2.22 и да проверят дали версия 0.2.21 е била инсталирана или изпълнявана.

Те трябва да блокират сокет края и имена на хостове за доставка, идентифицирани в пълното изследване, като същевременно търсят артефакти, оставени от веригата, а не само самоизтриващия се зловреден софтуер.

Екипите трябва също да одитират промените в работните процеси за публикуване, да ограничат достъпа за запис в основния клон, да заменят компрометираните идентификационни данни и да запазят логовете за контрол на версиите.

Няма доказателства в доклада, потвърждаващи, че организация е била успешно компрометирана чрез пакета. Въпреки това краткотрайното излагане илюстрира по-голям проблем: изтеглянето на злонамерена версия на пакет може да спре нови изтегляния, без да деактивира инфраструктурата на атакуващия или да уведоми всеки потребител, който вече я е получил.

Предишни злоупотреби с файлове за компилация на софтуер показват защо проверките за интегритет на пакетите трябва да бъдат съчетани с мониторинг на CI активността и профилите на разработчиците.

Индикатори за компрометиране (IoCs):-

ТипИндикаторОписание
Злонамерена версия на npm пакет@dforge-core/dforge-mcp@0.2.21Отровена версия, разпространявала злонамерения софтуер за отдалечено зареждане на код GHAPPIER.

Забележка: IP адресите и домейните са нарочно деактивирани (напр. [.]), за да се предотврати случайното им разрешаване или създаване на хипервръзки. Възстановете ги само в рамките на контролирани платформи за анализ на заплахи като MISP, VirusTotal или вашата SIEM система.