Python Software Foundation повідомила про анулювання всіх потенційно скомпрометованих токенів PyPI після виявлення атаки на ланцюг постачання GhostAction на початку вересня. За підсумками внутрішньої перевірки не виявлено ознак зловживання викраденими токенами для публікації шкідливих пакунків. Водночас масова ревокація стала превентивним кроком для зниження ризиків вторинних атак і несанкціонованої публікації артефактів.
GhostAction: зловмисні workflow GitHub Actions та ексфільтрація секретів
Інцидент ідентифікували дослідники GitGuardian, які виявили модифіковані workflow GitHub Actions (зокрема FastUUID), налаштовані на ексфільтрацію секретів на віддалені сервери. Перше сповіщення PyPI було відправлене в день знахідки, однак через те, що лист потрапив у спам, оперативні дії зсунулися до 10 вересня.
За оцінкою GitGuardian, зловмисники викрали понад 3300 секретів, включно з токенами PyPI, npm, Docker Hub і GitHub, а також з API‑ключами Cloudflare та AWS і обліковими даними баз даних. Це класичний supply chain‑сценарій, коли атакують інфраструктуру збірки та автоматизації (CI/CD), а не безпосередньо кінцеві застосунки.
Реакція екосистеми: ротація токенів і очищення CI/CD
Після встановлення масштабу GitGuardian створила issues більш ніж у 570 уражених репозиторіях та сповістила команди безпеки GitHub, npm і PyPI. Багато мейнтейнерів оперативно відкликали і замінили токени, відкочували коміти та видаляли заражені workflow.
Команда PyPI заявила, що не виявила ознак компрометації репозиторіїв і публікації шкідливих артефактів. Проте, керуючись принципом «безпека передусім», було прийнято рішення анулювати всі потенційно скомпрометовані токени і надати підтримку власникам проєктів у відновленні процесів і посиленні захисту.
Чому довгоживучі токени небезпечні: курс на короткочасні облікові дані
PyPI Trusted Publishers і короткоживучі токени на базі OIDC
Адміністратори PyPI рекомендують мейнтейнерам, які використовують GitHub Actions, відмовитися від довготривалих токенів на користь короткоживучих облікових даних через механізм Trusted Publishers. Цей підхід ґрунтується на перевірці довіри між CI і PyPI через OIDC: токен випускається динамічно під конкретний реліз і швидко втрачає чинність. Навіть якщо відбудеться ексфільтрація, вік можливостей для атаки значно менший, а прив’язка до валідаційної політики репозиторію знижує ризик несанкціонованої публікації.
Практики захисту ланцюга постачання (DevSecOps)
Мінімізуйте права і термін дії секретів. Надавайте лише необхідні привілеї та встановлюйте короткий TTL. Обмежуйте permissions для GITHUB_TOKEN за замовчуванням.
Жорстко контролюйте workflow. Запровадьте обов’язковий code review для змін у CI, забороніть довільні запуски з форків, закріплюйте Actions за commit SHA (pinning), уникайте некерованих сторонніх залежностей.
Моніторинг і сповіщення. Вмикайте secret scanning, аналіз журналів публікацій і спроб автентифікації, використовуйте оповіщення CI/CD. Регулярно перевіряйте історію облікового запису PyPI на нетипову активність.
Інцидент-менеджмент і форензика. За перших ознак витоку негайно відкликайте токени, перевипускайте релізи з чистого середовища, виконуйте форензик‑перевірку. Орієнтуйтеся на стандарти надійності походження збірок (наприклад, SLSA) і впроваджуйте підписання артефактів.
Наслідки для open source і бізнесу: системні ризики поза видимістю
GhostAction демонструє, як непомітно та на значному масштабі можна уразити інфраструктуру розробки, націлюючись на автоматизацію і сховища секретів. Навіть без встановленої публікації шкідливих пакунків, витік тисяч секретів створює поле для повторного використання токенів, несанкціонованого доступу до репозиторіїв, маніпуляцій зі збіркою та прихованого внесення залежностей.
Командам варто негайно переоцінити політики зберігання секретів і випуску релізів: переходьте на PyPI Trusted Publishers і короткоживучі токени, обмежуйте привілеї GITHUB_TOKEN, фіксуйте версії Actions, посилюйте моніторинг і готовність до ротації. Чим коротший життєвий цикл токенів і суворіший контроль вашого CI/CD, тим менше шансів, що наступна атака на ланцюг постачання застане вас зненацька.