Aktivně zneužívané Aktuálně
wfx-loot: útočník přes ukradené tokeny GitHubu vkládá do repozitářů zloděje tajemství z CI
Výzkumníci Aikido Security a StepSecurity 12. listopadu 2026 popsali kampaň, která od 10. 11. zneužívá ukradené tokeny GitHubu. Útočník z téměř 5 000 účtů otevřel přes 60 000 testovacích pull requestů a do repozitářů, kam mohl zapisovat, vložil skript, který z GitHub Actions vysává tajemství a klíče ke cloudu. Pak stopy maže. Jak zjistit, jestli se vás to týká, indikátory a co hned udělat.
Ve zkratce
- Kampaň začala 10. 11. 2026 kolem 12:45 UTC. Podle Aikido otevřelo 4 837 účtů s ukradenými tokeny 61 839 testovacích PR do 61 764 repozitářů; StepSecurity 12. 11. ráno napočítal přes 63 000. Jak útočník tokeny získal, zatím nikdo neví.
- Do repozitářů, kam token dovolil zapisovat, útočník vložil zhruba 1 500řádkový shellový skript – do existujícího workflow, do skriptu spouštěného přes npm install nebo do nového workflow na jednorázové větvi. Během minuty změnu vrátil a smazal běh i logy.
- Skript sbírá tajemství GitHub Actions, tokeny, proměnné prostředí a přihlašovací soubory ke cloudu, Dockeru, Kubernetes, npm, PyPI a AI službám, přes OIDC si bere relace do AWS, GCP a Azure a zakládá si trvalý přístup.
- Data odcházela na dvě IP adresy, od 12. 11. přes Telegram. Zasažené jsou i balíčky na Packagist a v Go.
Co se stalo
Firma Aikido Security 12. listopadu 2026 zveřejnila rozbor kampaně, kterou nazvala wfx-loot (podle toho, jak se skript sám označuje – „wfx“). Útočník od 10. listopadu kolem 12:45 UTC používá ukradené tokeny GitHubu: z účtu nejdřív otevře zkušební pull request a ověří, že smí zapisovat, a pak do repozitáře vloží skript, který krade tajemství z GitHub Actions.
Podle Aikido otevřelo 4 837 účtů do 11. 11. 15:00 UTC celkem 61 839 zkušebních PR do 61 764 repozitářů. Přes 10 000 z nich mířilo do cizích repozitářů, kam měl účet přístup jako spolupracovník nebo člen organizace. Skript se podle Aikido spustil a data odeslal nejméně v 1 806 repozitářích (na jiném místě rozboru uvádí 1 835). StepSecurity ve stejný den napočítal přes 63 000 zkušebních PR, zhruba 90 % z nich stále otevřených.
Jak útočník tokeny získal, nevědí Aikido ani StepSecurity. Zasažené jsou i balíčky: Packagist digitalelvis/neuronai-studio 3.14.3 a v Go github.com/onuragtas/docker-env v1.0.278 a v1.0.280, podle StepSecurity také github.com/vkuznet/gocurl (verze z 11. 11.).
Jak útok probíhá
Skript má kolem 1 500 řádků, není zamaskovaný a jednotlivé funkce zapíná přepínači. Podle Aikido:
- Sbírá tajemství a proměnné GitHub Actions,
GITHUB_TOKEN, tokeny OIDC, celé prostředí, přihlašovací soubory k AWS, Azure, GCP, Dockeru, Kubernetes, npm, PyPI, SSH, Vaultu a Terraformu, klíče k AI službám, historii shellu a soubory jako.env,.pemnebokubeconfig. Čte i paměť procesů runneru. Na vlastních (self-hosted) runnerech bere navíc přihlašovací údaje z metadat cloudu. - Rozšiřuje přístup: přes OIDC GitHubu si bere relace do AWS, GCP a Azure, v AWS zakládá dlouhodobé přístupové klíče a v Azure získává tokeny ke Graph a Key Vaultu.
- Zakládá trvalý přístup: posílá falešné úspěšné výsledky povinných kontrol, aby obešel ochranu větví, v AWS přepíše důvěryhodnost role na
"Principal": {"AWS": "*"}(roli pak může převzít kterýkoli účet AWS) a v Azure přidá aplikacím federované přihlašovací údajewfx-ci-…. - Odesílá data jako zabalený archiv HTTP POSTem na dvě IP adresy. StepSecurity zjistil, že od 12. 11. 1:10 UTC se ve vzorcích objevil Telegram a zhruba od 5:30 UTC nové kopie posílají data už jen tam.
Jak poznat napadení
Indikátory zveřejněné Aikido a StepSecurity (zneškodněné). StepSecurity upozorňuje, že hashe pomohou málo – každá kopie obsahuje název cílového repozitáře a náhodné názvy.
Servery pro sběr dat (HTTP POST, port 8080, cesta /exfil):
194[.]150[.]166[.]244
18[.]143[.]168[.]96
153[.]75[.]82[.]159 (jen StepSecurity)
Telegram: api[.]telegram[.]org (sendDocument)
GitHub:
Název PR: docs: dependency audit notes
Větve: wfx-docs, chore/[a-z0-9]{8}, ci-check-[0-9]{4}
Soubor v PR: docs/wfx-audit.md
Commity: ci: refresh build cache | ci: restore | ci: cleanup
chore: add ci helper | chore: add dependency audit workflow
Soubory: .github/workflows/build-audit-xxxxxx.yml, .ci-xxxxxx.sh
Artefakty/cache: wfx-loot-<run id>, klíče cache wfx-*
Cloud:
Azure – federované přihlašovací údaje wfx-ci-*
AWS – trust policy s "Principal": {"AWS": "*"}, nové přístupové klíče od 10. 11.
SHA-256 (skript podle Aikido):
89695abb392d5cfd4972672961e644bb46baa98aa1ed7173c2a2816c762735cf
Naše tipy pro rychlou kontrolu:
- Vyhledejte zkušební PR v celé organizaci:
gh search prs "docs: dependency audit notes" --owner VAŠE-ORGANIZACE. Totéž udělejte pro svůj uživatelský účet. - V záložce Actions hledejte mezery v číslování běhů hned po podezřelém commitu – podle Aikido i StepSecurity je to často jediná stopa, že se skript spustil.
- V auditním logu organizace hledejte od 10. 11. mazání běhů workflow a nečekané push do větví
chore/…. - V CloudTrailu hledejte
CreateAccessKeyaUpdateAssumeRolePolicy, v Azure změny federovaných přihlašovacích údajů aplikací. - Logy a exporty vložte do našeho IOC extraktoru – vytáhne IP adresy a hashe přímo v prohlížeči.
Co udělat
- Pokud z vašeho účtu vznikl zkušební PR, berte účet jako napadený: zrušte osobní přístupové tokeny (PAT), odhlaste relace a zkontrolujte autorizované aplikace OAuth a GitHub aplikace. Podle Aikido to platí, i když se skript nespustil.
- Pokud se skript v repozitáři spustil, vyměňte všechna tajemství a přístupy, které workflow mohl použít – tajemství Actions, cloudové klíče, tokeny k registrům balíčků.
- Odstraňte trvalý přístup: smažte federované údaje
wfx-ci-*v Azure, opravte trust policy rolí AWS s"AWS": "*", zrušte přístupové klíče založené od 10. 11. a projděte přihlášení do GCP a Vaultu přes OIDC GitHubu. - Balíčky: odstraňte uvedené verze z Packagist a Go. Počítač, který verzi z Packagist nainstaloval nebo otevřel, berte podle Aikido jako napadený. Vývojáři, kteří v tomto období spouštěli
npm installv zasaženém repozitáři, ať vymění i své vlastní přístupy. - Zpřísněte CI: omezte odchozí provoz z runnerů na seznam povolených cílů (blokujte uvedené IP a
api.telegram.org), dávejte tokenům co nejmenší oprávnění a ověřte, kdo smí obcházet ochranu větví. Jak na odcizené přístupy obecně, popisujeme v návodu Ukradený účet.
Časová osa
Aktualizace
- 12. 11. 2026 – první verze článku.
Časté otázky
Používám GitHub jen na soukromé projekty. Týká se mě to?
Pokud nikdo nezískal váš token, ne. Zkontrolujte ale, jestli z vašeho účtu nevznikl PR s názvem „docs: dependency audit notes“ nebo větev wfx-docs – i do vlastních soukromých repozitářů. Podle Aikido je taková zkušební žádost znak, že útočník váš token má, i když se škodlivý skript nespustil.
V repozitáři nic podezřelého nevidím. Jsem v bezpečí?
Ne nutně. Útočník změny vrací do minuty a maže běhy workflow i jejich logy. Často po něm zbyde jen mezera v číslování běhů v záložce Actions. Prohlédněte si historii commitů za období od 10. 11., auditní log organizace a záznamy o běhu workflow.
Jak útočník získal tokeny?
Aikido ani StepSecurity to zatím nevědí. StepSecurity zjistil, že 173 testovacích PR vzniklo přes GitHub aplikaci Fly.io z 19 účtů, ale důkaz o napadení infrastruktury Fly.io nemá. Aikido navíc pozoruje, že účty zasažené říjnovou kampaní GhostActions byly zasažené výrazně častěji – kampaně ale hodnotí jako odlišné.
Stačí smazat škodlivý commit?
Ne. Pokud se skript spustil, berte jako ukradené všechno, k čemu workflow měl přístup: tajemství, tokeny, role v cloudu. Skript navíc v AWS přepisuje důvěryhodnost rolí a v Azure přidává federované přihlašovací údaje, které přežijí výměnu hesel. Ty musíte najít a smazat zvlášť.
Zdroje
Našli jste v článku chybu? Dejte nám vědět, opravu vyznačíme.