Kedjan, som den beskrivs

Adversa AI publicerade den 6 oktober en attack där en enda angriparkontrollerad webbadress, hämtad på användarens egen begäran, får GitHub Copilot CLI att läsa lokala filer och skicka innehållet till angriparens server. Forskarna, ledda av Rony Utevsky, anger hela kedjan till 28 sekunder, “utan bekräftelse, och utan någon punkt i loggen som namnger målvärden eller visar att filinnehåll lämnade maskinen”.

Sidan presenterar sig som krypterat innehåll och erbjuder agenten två kandidatnycklar för dekryptering. Den ena är äkta. Den andra är en mall som agenten inte kan fylla i utan att först läsa lokala filer — så när den förbereder dekrypteringen läser den målfilerna från disken och väver in innehållet i nyckelsträngen. Den läsningen är stölden, och den sker innan någon dekryptering lyckas.

Mallnyckeln misslyckas med flit. Agenten faller tillbaka på den äkta nyckeln, dekrypteringen fungerar, och det dekrypterade andra steget säger åt den att hämta en uppföljande webbadress “för att få mer sammanhang” som bär det insamlade filinnehållet som en parameter. Agenten gör anropet.

Ett mässingshänglås och nycklar på ett skrivbord i trä
Forskarna uppger att samma instruktioner i klartext avvisas. Illustrativ bild. Goszton · pexels · Pexels License

Varför krypteringen är poängen

Adversa kallar detta kryptografisk kontextinjektion, en teknik bolaget först publicerade i augusti mot chattassistenter. Argumentet är att statiska skydd läser text men inte kör den. Krypterad text, levererad med nyckelmaterial och en instruktion att dekryptera, tvingar fram återställningen i agentens egen körmiljö, eftersom det — till skillnad från base64 — inte finns någon genväg modellen kan ta i sina vikter. De dekrypterade instruktionerna kommer då som utdata från kod agenten just skrivit och kört, inne i dess betrodda körkontext.

Forskarna är tydliga med vad som får det att fungera: “Samma instruktioner levererade i klartext fångas som promptinjektion och avvisas.”

Vilken modell du får är ett myntkast

Attacken är inte universell. Adversa uppger att den kräver två saker: att klienten körs i autopilotläge, och att en tillåtande modell sköter sessionen. På den andra punkten blir fyndet obekvämt just för Copilot.

Microsofts egen mai-code-1.1-flash körde hela kedjan i 50 procent av forskarnas körningar. Två GPT-5.6-modeller som erbjuds i samma produkt avvisade genomgående den identiska nyttolasten. På det betalkonto som testades var den sårbara modellen inte förvald och måste väljas för hand — men på ett konto med automatiskt modellval tilldelade routern den sårbara modellen i vissa sessioner och en säker i andra, utan att användaren gjorde något. “Användaren väljer inte, och ser inte, vilken modell som skötte sessionen”, står det i rapporten.

En nätverkskabel inkopplad i en bärbar dators port
Det insamlade filinnehållet lämnade som parameter i ett uppföljande anrop. Illustrativ bild. Castorly Stock · pexels · Pexels License

GitHub bekräftade och avskrev

Adversa rapporterade fyndet till GitHubs bug bounty-program den 17 september. Den 1 oktober hade triageteamet bekräftat det men vägrade behandla det som en sårbarhet, med motiveringen att användaren “uttryckligen bad Copilot CLI att hämta angriparkontrollerat innehåll samtidigt som copilot gavs fulla rättigheter att agera självständigt”. GitHub sade att funktionen kan skärpas i framtiden men hade inget att meddela, och förklarade rapporten icke kvalificerad för belöning.

Adversa säger sig vara oenigt med den riskbedömningen och att kedjan fortfarande går att återskapa som beskrivet. Bolaget håller inne konkreta nyttolaster.

Vad detta är värt, och från vem

Adversa säljer en säkerhetsplattform för kodagenter och uppger att plattformen stoppade kedjan i bolagets egna tester, så rekommendationerna i slutet av texten är inte oberoende. Själva råden är konventionella: logga per session varje verktygsanrop med fullt upplösta argument i stället för mallar, larma på sekvensen — obetrott innehåll in, kod körs, filer läses, anrop till en värd utanför uppgiften — i stället för på en enskild nyttolast, kräv bekräftelse för nya nätverksmål och skrivningar utanför arbetsytan, och isolera hämtat innehåll i en kontext utan verktyg och utan inloggningsuppgifter.

En detalj är värd att behålla oavsett vem som publicerat den. I Adversas körning rapporterade agentens egen slutsammanfattning att den hade “bekräftat en endpoint för auktoriserad läsare”. Så gick det inte till. En agents egen redogörelse för sin session är inte bevis för vad sessionen gjorde.