Операція тривала приблизно між 11:36 та 17:48 UTC, що свідчить про високоавтоматизовану систему, розраховану на компрометацію великої кількості репозиторіїв до того, як власники помітять зміни.
Кампанія спиралася на автоматизацію та соціальну маскування, щоб шкідливі коміти виглядали як звичайне обслуговування CI.
Атакуючі створили одноразові акаунти GitHub з випадковими іменами користувачів та підробленими ідентифікаторами автоматизації, такими як:
Ці ідентифікатори створювали враження, що коміти надходять від звичайних систем автоматизації, а не від людини-зловмисника.
Дані про авторство комітів та повідомлення були ретельно сфабриковані, щоб виглядати легітимно — часто як звичайні оновлення робочих процесів або налаштувань CI. Це допомагало комітам зливатися зі звичайною діяльністю з розробки та затримувало підозри.
Кампанія була спрямована на репозиторії, де правила захисту гілок були слабкими або взагалі відсутні. Без обов'язкових перевірок pull-запитів або обмежень на те, хто може змінювати робочі процеси, атакуючі могли напряму надсилати зміни до робочих файлів у основну гілку репозиторію.
Кожен шкідливий коміт вставляв файл робочого процесу GitHub Actions, який містив корисне навантаження у форматі Base64 на мові Bash. Коли конвеєр CI виконувався, цей скрипт запускався у середовищі виконання GitHub Actions і починав збір облікових даних.
Така конструкція означала, що атака часто залишалася прихованою до наступного запуску CI, який активував шкідливий робочий процес.
Закодований скрипт, вбудований у робочі процеси, був призначений для збору чутливих даних з середовища CI та їх надсилання на інфраструктуру, контрольовану атакуючими.
Серед зафіксованих цілей:
Шкідливе програмне забезпечення збирало змінні середовища, інформацію про систему та секрети, доступні робочій машині CI, а потім ексфільтрувало їх на сервер управління (C2).
Оскільки конвеєри CI часто містять облікові дані для розгортання, компрометація середовища збірки може відкрити шлях до хмарної інфраструктури, реєстрів пакетів і робочих середовищ.
Однією з головних цілей навантаження «Мегалодона» були токени OIDC GitHub Actions.
Сучасні конвеєри CI/CD часто використовують федерацію OpenID Connect (OIDC) для автентифікації в хмарних провайдерів без зберігання довгострокових облікових даних. Замість цього робочий процес запитує короткочасний ідентифікаційний токен, який хмарні провайдери обмінюють на тимчасові облікові дані доступу.
Цей підхід підвищує безпеку, усуваючи потребу в статичних API-ключах або облікових даних сервісних акаунтів. Однак він створює новий ризик: якщо зловмисник може викрасти токен під час виконання конвеєра, він може тимчасово видавати себе за ідентичність CI-завдання.
Оскільки хмарні системи ідентифікації довіряють таким токенам, викрадений токен потенційно можна обміняти на тимчасовий доступ до хмари з тими ж дозволами, що й у конвеєра розгортання.
Це означає, що скомпрометований робочий процес CI може призвести до:
Хоча токени OIDC швидко закінчуються, дозволи, прив'язані до них, можуть зробити короткочасний доступ надзвичайно цінним для зловмисників.
Кампанія «Мегалодон» ілюструє зсув в атаках на ланцюг постачання: від зміни коду застосунків до компрометації інфраструктури автоматизації.
Націлюючись на робочі процеси CI замість вихідного коду, атакуючі можуть:
Оскільки тисячі репозиторіїв покладаються на конвеєри CI з потужними обліковими даними, одна модифікація робочого процесу може викрити секрети в багатьох пов'язаних системах.
Приблизно в той же час GitHub розкрив окремий інцидент безпеки, пов'язаний з отруєним розширенням Visual Studio Code, встановленим на пристрої співробітника. Шкідливе розширення дозволило атакуючим отримати доступ приблизно до 3800 внутрішніх репозиторіїв GitHub до того, як компрометацію було локалізовано.
Цей виток був пов'язаний зі скомпрометованим середовищем розробника та включав викрадення облікових даних через троянізоване розширення, поширене через маркетплейс VS Code.
Деякі звіти з безпеки відзначають схожість у часі та тактиках між цим інцидентом та іншими атаками на ланцюг постачання, що націлюються на інструменти розробки. Однак публічні докази не підтвердили, що внутрішній витік GitHub безпосередньо уможливив кампанію «Мегалодон».
Наразі ці два інциденти найкраще розуміти як окремі, але одночасні події в сфері безпеки ланцюга постачання, які вплинули на екосистему розробників.
«Мегалодон» демонструє, як швидко автоматизація може масштабувати атаку на ланцюг постачання на тисячі репозиторіїв. Поєднуючи підроблених ботів, автоматизовані коміти та отруєні робочі процеси CI, атакуючі перетворили звичайну інфраструктуру збірки на систему збору облікових даних.
Інцидент підкреслив кілька захисних пріоритетів для команд розробників:
Оскільки конвеєри розробки все більше контролюють хмарні розгортання та продакшн-інфраструктуру, безпека робочих процесів CI/CD стала критичною частиною захисту ланцюга постачання програмного забезпечення.