Аналіз Veracode зафіксував у реєстрі npm підроблений пакет @acitons/artifact, що видавав себе за легітимний @actions/artifact і був націлений на оточення GitHub Actions. Згодом GitHub підтвердив: мова йде не про реальну компрометацію, а про строго контрольовані навчання Red Team, покликані перевірити надійність внутрішніх процесів безпеки.
Що сталося: опублікований пакет і масові встановлення
Пакет з’явився 29 жовтня 2025 року та швидко набрав охоплення: загалом 47 405 завантажень, з них 31 398 за останній тиждень. Ключова ідея — typosquatting: помилка у scope (@acitons замість @actions) спрацьовує на людський фактор під час додавання залежностей.
За даними Veracode, шкідливу логіку містили шість версій — 4.0.12–4.0.17. Вони були розміщені з облікового запису blakesdev, а під час перевірки небезпечні релізи поступово видалялися; «чистою» лишалася 4.0.10. Дослідники також виявили споріднений пакет 8jfiesaf83 (згодом видалений), який встигли завантажити 1 016 разів.
Механіка атаки: typosquatting і postinstall у ланцюгу інсталяції
У версіях із шкідливою логікою спрацьовував postinstall-хук — автоматичний сценарій, що запускається під час інсталяції пакету. Він завантажував двійковий файл harness зі вже видаленого GitHub-акаунта. Насправді це був обфускований shell-скрипт із «таймером»: якщо системна дата була 6 листопада 2025 року і пізніше, завантаження не виконувалося.
Далі запускався verify.js, який перевіряв наявність змінних середовища GITHUB_*, характерних для раннерів GitHub Actions. Якщо виявлялося цільове середовище, відбувалася екфільтрація тимчасових токенів з шифруванням та передачею на піддомен app.github.dev. Додатково застосовувалася фільтрація за власником репозиторію: при невідповідності GITHUB_REPOSITORY_OWNER організації GitHub виконання припинялося, що свідчить про таргетований задум.
Чому це важливо: ризики для ланцюга постачання ПЗ та DevOps
Подія демонструє, наскільки вразливими є ланцюги постачання ПЗ до поєднання typosquatting і lifecycle-скриптів. Оскільки postinstall виконується автоматично, одна опечатка в імені пакета може перетворитися на точку входу. У контексті CI/CD наслідки включають доступ до секретів пайплайна, артефактів збірки і тимчасових токенів для операцій з репозиторіями.
Хоча GitHub підкреслив, що це були реалістичні, але контрольовані навчання, сценарій перегукується з реальними інцидентами в екосистемі відкритого коду (наприклад, event-stream чи UAParser.js) та підтверджує цінність підходу «мінімально необхідних привілеїв» і жорсткої перевірки походження залежностей.
Позиція GitHub і етичний вимір публічних тренувань
Представники GitHub заявили, що «системи та дані GitHub не перебували під загрозою». Водночас той факт, що «навчальний» пакет опинився у публічному npm і зібрав майже 50 тис. установок, порушує питання меж допустимого реалізму, потенційного впливу на сторонніх розробників і необхідності оперативної ревокації артефактів навчань у відкритих реєстрах.
Практичні кроки захисту CI/CD та залежностей
Базові дії для команд розробки та DevOps
1) Мінімізуйте опечатки та підміну scope. Використовуйте внутрішні реєстри/дзеркала, allowlist для namespaces, шаблони залежностей і code review.
2) Жорстке версіонування. Фіксуйте версії через lock-файли (package-lock.json), встановлюйте через npm ci, проводьте регулярний аудит залежностей і уникайте автоматичних мажорних оновлень.
3) Обмеження виконання скриптів. У CI за замовчуванням вимикайте lifecycle-скрипти (npm install –ignore-scripts), дозволяючи їх точково там, де це справді потрібно.
4) Зміцнення GitHub Actions. Знижуйте права GITHUB_TOKEN до мінімально необхідних, застосовуйте environment protection rules, OIDC і політику «deny-by-default» для секретів.
5) Сегментація мережі та моніторинг. Обмежуйте вихідні з’єднання раннерів за allowlist, логувуйте нетиповий трафік, інтегруйте EDR/NSM у CI.
6) Прозорість ланцюга постачання. Формуйте SBOM (наприклад, CycloneDX), перевіряйте цілісність артефактів і впроваджуйте політики довіреного походження пакетів.
Історія з @acitons/artifact — нагадування про крихкість екосистеми відкритого ПЗ і необхідність дисципліни