← Усі статті

Після крадіжки секретів у GitHub Actions перевірте не лише GitHub

GhostAction цілив у ключі хмари, реєстрів пакетів і постачальників моделей. Огляд акаунта GitHub не показує, чи публікували пакет і чи пішов чужий рахунок.

Після крадіжки секретів у GitHub Actions перевірте не лише GitHub
Зміст

Коротко

Кампанія GhostAction, за звітом GitGuardian, збирала не лише облікові дані GitHub. У зоні ризику секрети збірки, хмарні ключі, токени npm, PyPI і Docker Hub та ключі постачальників моделей. Шкідливий сценарій користується довірою, яку вже видано задачі збірки. Перегляд одного акаунта GitHub не відповідає, чи випустили пакет, чи заходили в хмарну роль і чи з’явилася чужа витрата на ключі моделі. Спершу збережіть сліди запуску, потім зверте кожен пов’язаний сервіс.

Що сталося

На Dev.to розбирають стримування після крадіжки секретів у GitHub Actions, а не список жертв. У кожного запуску є особа. Це GITHUB_TOKEN, секрети репозиторію, які задача може прочитати, короткий хмарний токен через OIDC і мережа, якщо збирач свій. Питання не в тому, чи згадує файл сценарію ім’я секрету. Питання в тому, чи міг шкідливий запуск прочитати живе значення і відправити його назовні. Задача, яку зупинили до виконання, і задача, яка вже вийшла в мережу, — різні докази.

Публічний шар інтернету автор дивився в ZoomEye 6 листопада 2026 року, близько 15:46 за всесвітнім часом. Запит domain="github.com" дав 101 збіг, із них 54 з портом 443. Окремий запит до адреси 193.32.204.199 дав два індексовані спостереження. Це знімок відкритої інфраструктури, не число жертв і не доказ, що облікові дані дійшли до нападника. Запит не показує, які хмари, реєстри і постачальники моделей були прив’язані до репозиторію.

Далі інвентаризація за кожним зачепленим репозиторієм. Для хмари — роль, обліковий запис, журнали створення і використання токенів: чи з’являвся неочікуваний суб’єкт. Для реєстру пакетів — область дії, власник, журнали публікації: чи вийшов новий пакет або версія. Для вихідного коду — область токена і події аудиту: чи змінював токен інші репозиторії. Для постачальника моделі — власник ключа, використання і рахунки: чи була незрозуміла витрата або новий проєкт. Сирий журнал або вивантаження з контрольною сумою автор просить зберегти. Знімок екрана панелі це не замінює.

Чому це важливо

Інцидент перетинає межі інструментів. Довіра збірки вже проведена в хмару, у публікацію пакетів і в оплату моделей. Поки дивитеся лише GitHub, чужий пакет може стояти в реєстрі, а рахунок за ключ моделі вже йти.

Короткоживучий токен через OIDC, як його описує документація GitHub, зменшує ціну секрету, знайденого в історії git: доступ прив’язаний до одного запуску і його можна розібрати за журналом. Він не закриває все. Реєстру пакетів часто все ще потрібен токен публікації. Постачальнику моделі — ключ API. Решту постійних секретів варто звузити до проєкту, прав і ліміту витрат.

Видалення ключа в інтерфейсі не дорівнює відкликанню. Старе значення може працювати, якщо крок відкликання не завершився.

На практиці

  1. Спершу збережіть сценарій, запис запуску і сліди вихідної мережі. Потім список значень, які були доступні кожній виконаній задачі.
  2. Змініть те, у чого найширший доступ. Перевірте, що схвалений споживач уже ходить із новим значенням, і лише тоді відкличте старе.
  3. Старий ключ перевірте на нешкідливій точці: відповідь має бути відмовою. Для хмарних ролей дивіться політику довіри і журнали сесій. Для реєстрів — історію випусків і власника. Для постачальників моделей — використання, склад проєкту і створення ключів.
  4. Не читайте публічний звіт як твердження, що зачеплено саме ваш хмарний акаунт. Списку конкретних репозиторіїв і всіх витоків у відкритих матеріалах немає. Привід перевірити кожного підключеного постачальника — є.

Підсумок

Крадіжка секрету збірки — це перевірка всіх дверей, які ця збірка вже відкриває. GitHub у цьому списку перший рядок, не останній.

Коментарі

Завантаження коментарів…