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.

Redakce Kyberkitu · · událost ze dne · čtení na 4 minuty · Pro správce a analytiky

Aktivně zneužívané: GitHub Actions

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á

Průběh kampaně wfx-loot na GitHubu1. Útočník se přihlásí ukradeným tokenem a otevře zkušební PR „docs: dependency audit notes“ z větve wfx-docs; 2. Kde smí zapisovat, vloží skript do workflow, do skriptu spouštěného přes npm install nebo do nového workflow na jednorázové větvi; 3. Workflow se spustí a skript sbírá tajemství, tokeny a přihlašovací údaje ke cloudu; 4. Data odejdou na server útočníka nebo do Telegramu, skript zakládá trvalý přístup v cloudu; 5. Útočník do minuty změnu vrátí a smaže běh workflow i jeho logy1Útočník se přihlásí ukradeným tokenema otevře zkušební PR „docs:dependency audit notes“ z větvewfx-docs2Kde smí zapisovat, vloží skript doworkflow, do skriptu spouštěného přesnpm install nebo do nového workflowna jednorázové větvi3Workflow se spustí a skript sbírátajemství, tokeny a přihlašovacíúdaje ke cloudu4Data odejdou na server útočníka nebodo Telegramu, skript zakládá trvalýpřístup v cloudu5Útočník do minuty změnu vrátí a smažeběh workflow i jeho logy
Podle rozborů Aikido Security a StepSecurity (12. 11. 2026)

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, .pem nebo kubeconfig. Č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í údaje wfx-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 CreateAccessKey a UpdateAssumeRolePolicy, 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

  1. 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.
  2. 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ů.
  3. 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.
  4. 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 install v zasaženém repozitáři, ať vymění i své vlastní přístupy.
  5. 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

Časová osa kampaně wfx-lootříjen 2026: Kampaň GhostActions na GitHubu – podle Aikido odlišná, ale se společnými oběťmi; 10. 11. 2026, 12:45 UTC: První zkušební PR „docs: dependency audit notes“; 11. 11. 2026, 15:00 UTC: 61 839 zkušebních PR z 4 837 účtů (Aikido); 12. 11. 2026, 1:10 UTC: Ve vzorcích se objevuje odesílání přes Telegram (StepSecurity); 12. 11. 2026: Rozbory Aikido Security a StepSecurity s indikátoryříjen 2026Kampaň GhostActions naGitHubu – podle Aikidoodlišná, ale se společnýmioběťmi10. 11. 2026,12:45 UTCPrvní zkušební PR „docs:dependency audit notes“11. 11. 2026,15:00 UTC61 839 zkušebních PR z 4 837účtů (Aikido)12. 11. 2026,1:10 UTCVe vzorcích se objevujeodesílání přes Telegram(StepSecurity)12. 11. 2026Rozbory Aikido Securitya StepSecurity s indikátory
Klíčová data (Aikido Security, StepSecurity)

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

  1. Aikido Security – Compromised GitHub accounts push CI secret stealer to tens of thousands of repositories (12. 11. 2026, anglicky)
  2. StepSecurity – WFX Phantom: The GitHub Actions Secret Stealer (12. 11. 2026, anglicky)
  3. SafeDep – GitHub Actions wfx credential stealer (anglicky)

Našli jste v článku chybu? Dejte nám vědět, opravu vyznačíme.