Кампанія з викрадення облікових даних wfx-loot використовувала скомпрометовані акаунти GitHub, щоб перевіряти репозиторії, а за наявності прав на запис — додавати код для викрадення секретів із середовищ безперервної інтеграції (CI). За даними Aikido, зловмисники використали 4 837 скомпрометованих акаунтів і надіслали пробні pull request у 61 764 репозиторії. В оприлюдненому підрахунку компанії йдеться, що код запустився і викрав облікові дані щонайменше з 1 835 репозиторіїв.
4
9
Коли відбулася атака і скільки вона тривала?
Активність почалася приблизно 10 листопада 2026 року о 12:45 UTC. В одному зі звітів вікно надсилання пробних pull request охоплює період до 11 листопада о 15:00 UTC — близько 26 годин і 15 хвилин.
6
7 Це спостережуваний період проб, а не підтвердження, що тоді ж припинилися всі запуски шкідливого коду або подальше використання викрадених облікових даних.
Цифри описують різні етапи кампанії:
- 4 837 акаунтів повідомляли як скомпрометовані.
- 61 764 репозиторії отримали пробні pull request. Це кількість перевірених репозиторіїв, а не тих, у яких напевно запустилося шкідливе ПЗ.
- Щонайменше 1 835 репозиторіїв увійшли до оприлюдненого Aikido підрахунку запусків шкідливого коду та викрадення облікових даних.
9
У частині тогочасних повідомлень фігурувала менша цифра — 1 806.
6
10 У доступних матеріалах різницю не пояснено, тож ці значення варто вважати окремими оприлюдненими підрахунками, а не об’єднувати. Надані джерела також не підтверджують пізніше твердження про приблизно 1 970 підтверджених публічних випадків серед понад 66 000 цілей.
Як зловмисники перевіряли доступ
Зловмисники створювали pull request із заголовком docs: dependency audit notes із гілок wfx-docs. Так вони перевіряли, чи має скомпрометований акаунт право вносити зміни до репозиторію.
3
4
9
Якщо права дозволяли, до CI-середовища додавали код для викрадення секретів. Кампанія спиралася на дійсні викрадені облікові дані, а не на вразливість у GitHub Actions.
4
9 За описом OX Security, шкідливе ПЗ було одним shell-скриптом приблизно на 1 500 рядків.
31
У деяких випадках шкідливі зміни й журнали виконання видаляли, що ускладнювало розслідування.
1
6 Наявні дані підтверджують загальну схему — перевірка доступу, запуск коду й подальше приховування слідів, — але не доводять, що кожен описаний спосіб розгортання або кожен текст коміту застосовували в усіх випадках.
Які дані намагався викрасти код
Задекларована ціль — облікові дані, доступні завданням CI, зокрема секрети GitHub Actions і хмарні облікові дані. У повідомленнях також згадуються спроби отримати токени AI-сервісів.
3
9 Аналіз OX Security включає до переліку цілей облікові дані AWS, Azure і Google Cloud.
31 Окремі повідомлення стверджують, що шкідливий код міг шукати секрети в пам’яті процесів на runner — машині або середовищі, де виконуються завдання CI. Однак надані уривки не показують, як часто цей метод спрацьовував.
17
29
В одному з отриманих оглядів ідеться про спроби закріпитися в системах через зміни політик довіри AWS і додавання федеративних облікових даних Azure.
5 Це описана поведінка, а не доказ того, що змінювали кожен уражений репозиторій або кожен хмарний акаунт. Наявні свідчення стосуються викрадення облікових даних; вони не доводять викрадення вихідного коду чи баз даних клієнтів.
9
15
Як тлумачити оприлюднені сигнали
За одним із повідомлень, на момент перевірки відкритими залишалися 92% із 10 431 пробного pull request, надісланого через доступ учасника або організації.
10
19 Це може свідчити, що на той момент на багато проб не відреагували, але не доводить, що власники репозиторіїв або команди безпеки їх не помітили. Цей відсоток стосується саме зазначеної групи pull request, а не всіх запитів кампанії.
У посібнику з розслідування також згадано 173 пробні pull request від 19 акаунтів, які використовували токени через GitHub App компанії Fly.io. Саме по собі це не свідчить про злам інфраструктури Fly.io й не доводить, що шкідливий код запустився в кожному репозиторії, до якого ці токени надали доступ.
37
Що перевірити командам розробки
Якщо ваша організація могла постраждати, розрізняйте в оцінці інциденту чотири етапи: репозиторій перевірили, код додали, код запустився, облікові дані викрали. Це не взаємозамінні висновки.
- Шукайте ознаки проб. Перевірте pull request із заголовком
docs: dependency audit notes і гілки wfx-docs у репозиторіях, до яких ваші акаунти могли вносити зміни.
9
- Перегляньте журнали CI та аудиту. Перевірте запуски workflow, коміти, активність гілок і доступні журнали хмарних сервісів. Пропущені номери запусків можуть бути приводом для перевірки, оскільки повідомлялося про видалення запусків і журналів, але сам розрив не доводить злам.
1
24
- Відкличте підозрілий доступ. Відкличте ймовірно скомпрометовані токени GitHub та перевірте доступ акаунтів, учасників репозиторіїв і GitHub App.
- Широко замініть секрети. Якщо шкідливий код запускався, вважайте потенційно скомпрометованими всі секрети й хмарні ролі, доступні цьому workflow, а не лише облікові дані, які видно в журналах, що збереглися.
3
9
- Перевірте хмарні налаштування на закріплення доступу. Розслідуйте неочікувані зміни політик довіри AWS та застосунків або федеративних облікових даних Azure, а також появу несанкціонованих ключів чи інші зміни доступу.
5
- Збережіть докази. Перед очищенням збережіть доступні журнали й записи аудиту та зафіксуйте, який саме етап атаки підтверджують наявні дані.