Blogg

Hur någon annans repository kan kapa Claude Code: 7 skyddsregler

Markdown

Fyra dokumenterade indirekta promptinjektionsvägar genom kodförråd, GitHub-innehåll, Sentry-händelser och MCP-metadata, med primärforskning och begränsningsåtgärdernas gränser.

Läs hela artikeln

Viktiga punkter

Publicerad forskning visar fyra indirekta injektionsvägar: installationsinstruktioner, GitHub-innehåll, telemetri och MCP-verktygsmetadata. Rapporterna kom olika datum och gäller olika klienter och behörighetskonfigurationer. Nedan finns primärkällor och praktiska begränsningsåtgärder; ingen inställningsfil garanterar immunitet.

Ailoot-dokumentation: API, nycklar och konfiguration.

Fyra dokumenterade vägar från opålitlig text till agentåtgärder

Viktiga punkter

Exemplen gäller olika forskningsperioder och klientkonfigurationer, inte fyra upptäckter under två veckor. De visar hur opålitligt material kan påverka agentens verktygsanvändning; implementationsbrister, tillgängliga autentiseringsuppgifter och körbehörigheter avgör utfallet.

Formellt kallas detta indirekt promptinjektion: en skadlig instruktion kommer inte direkt från dig, utan via data som agenten behandlar medan den utför en uppgift – ett främmande README, ett felmeddelande, en GitHub-kommentar eller ett svar från en extern tjänst. Du kan glömma termen direkt efter det här stycket; hädanefter använder jag vanliga ord.

Fyra forskningsexempel som diskuteras nedan:

  1. Ett harmlöst utseende repository visades kunna förvandlas till en reverse shell.
  2. En Pull Request-titel visades kunna kapa tre olika AI-agenter samtidigt.
  3. En agent visades kunna matas med en falsk felrapport från Sentry i stället för en riktig.
  4. Förgiftad MCP-verktygsmetadata visades kunna påverka agentens verktygsanvändning i testade konfigurationer.

Hur kan ett harmlöst repositorys README förvandlas till en reverse shell?

Viktiga punkter

0DIN:s proof of concept från den 25 juni 2026 visar hur ett vanligt repository kan utlösa att Claude Code kör installationsinstruktioner. Ett fel vid första körningen föreslår ett ”fix”-kommando som i själva verket slår upp angriparens DNS-post och startar en reverse shell. Den citerade källan demonstrerar tekniken; den fastställer inte hur ofta den använts i verkliga incidenter.

Mekaniken är utformad så att inget enskilt lager verkar misstänkt:

  1. Du klonar ett repository som ser vanligt ut och ber Claude Code att köra det.
  2. Repositoryt hämtar ett Python-paket som är utformat för att misslyckas vid första användningen.
  3. Felmeddelandet föreslår artigt ett ”fix”-kommando: python3 -m axiom init.
  4. Kommandot init kör setup.sh.
  5. Skriptet frågar efter en DNS TXT-post (som vanligtvis används för domänrelaterade anteckningar, men fältet godtar vilken text som helst). Angriparen lägger in ett base64-kodat kommando där (ett sätt att omvandla data till vanlig text utan mellanslag eller specialtecken) och skickar det direkt vidare till bash.
  6. DNS-postens värde kan ändras när som helst – vilket ger angriparen en interaktiv reverse shell med dina användarbehörigheter och åtkomst till alla hemligheter på datorn.

Den demonstrerade nyttolasten hämtades under körning från DNS, så en skanning av enbart repositoryts bytes avslöjade inte slutlig nyttolast. Det bevisar inte att varje skanner eller körningskontroll är maktlös: granskning av hämtat innehåll, processövervakning och nätverksbegränsningar kan synliggöra eller avbryta kedjan. Källan är ett proof of concept, inte en mätning av verkliga incidenters förekomst.

Hur kunde en Pull Request-titel kapa tre olika AI-agenter?

Viktiga punkter

Forskningsrapporten Comment and Control, publicerad den 15 april 2026 och uppdaterad den 4 maj, dokumenterar skilda GitHub-textinjektionsvägar i Claude Code Security Review, Gemini CLI Action och Copilot Agent. Sänkt allvarlighetsgrad bevisar inte att hela injektionsklassen åtgärdats; rapporten beskriver leverantörssvar och en specifik Claude-verktygsbegränsning.

Forskaren beskriver följande vägar och svar; det är en historisk rapport, inte verifiering av varje aktuell produktversion:

AgentHur attacken tog sig inVad som läckteStatus i dag
Claude Code Security ReviewPR-titeln infogades direkt i systemprompten utan saneringANTHROPIC_API_KEY, GITHUB_TOKENForskaren rapporterar ps-begränsning och dokumentationsändringar; allvarlighetsgrad ändrades till None den 20 april 2026
Gemini CLI ActionEtt falskt avsnitt kallat ”Trusted Content” i en kommentar kringgick säkerhetsinstruktionernaGEMINI_API_KEYGoogle lade till separata skyddsprompter i systemprompten
GitHub Copilot AgentNyttolasten doldes i en osynlig HTML-kommentar i MarkdownGITHUB_COPILOT_API_TOKEN, COPILOT_JOB_NONCEGitHub betraktar detta som en arkitektonisk begränsning, inte en bugg

Nästan fem månader gick mellan den första och den sista rapporten i den här rapporteringscykeln (den första rapporten om Claude Code kom den 17 oktober 2025; den sista buggfixen för GitHub Copilot kom den 9 mars 2026). Rapportens ändrade allvarlighetsgrad och begränsningsåtgärder fastställer inte fullständig stängning av varje tänkbar nyttolast. Forskarens PoC-repository dokumenterar den demonstrerade Claude-vägen; kör inte attacknyttolasten mot riktiga system. Värdet för dig ligger i själva attackmönstret: overifierad data från GitHub kommer in i agenten, agenten kör kommandon och hemligheter läcker via samma GitHub – angriparen behöver ingen extern server.

Det räcker med två analyser för att se mönstret: det är inte hållbart att åtgärda varje nytt fynd ett i taget; sårbarheter av den här typen dyker upp varannan vecka. Att uttryckligen skriva säkerhetsregler i CLAUDE.md och settings.json i stället för att ha dem i huvudet är en del av kontextutformning: ställ in dem en gång så fungerar de automatiskt i varje ny Claude Code-session, utan påminnelser. Tre grundpelare samverkar: AI-klon + Andra hjärnan + Kontextutformning – den kombinationen gör Claude Code till en agent med uttryckliga regler i stället för en exekverare som litar på allt.

Kan en falsk felrapport från Sentry ta över din agent?

Viktiga punkter

En demonstrerad teknik fungerar så här: en angripare skickar en falsk felhändelse till Sentry; agenten begär en lista över ärenden via MCP, får den skadliga händelsen bland de legitima och kör kommandot som är inbäddat i den som ett ”fix-steg”.

Attacken kräver inget annat än en Sentry DSN-nyckel – en offentlig identifierare som många projekt inkluderar direkt i klientkod:

Mekaniken är enkel: en utvecklare ber agenten granska öppna Sentry-fel; agenten hämtar dem via MCP-servern, får en skadlig händelse bland de riktiga och läser kommandot som är inbäddat i den som en betrodd instruktion för att åtgärda felet – eftersom det formellt sett är exakt den uppgift den fick.

Tenet rapporterar att befintliga kontroller inte larmade i testade miljöer. Det fastställer inte spårlös körning överallt: agent-/verktygsloggar, ändpunktstelemetri och nätverksloggar kan fånga senare åtgärder. Attacken börjar via externt inskickad telemetri och beror sedan på agentens faktiska verktyg och behörigheter.

Hur kan en MCP-verktygsbeskrivning påverka agenten?

Viktiga punkter

Verktygsmetadata kan bära instruktioner som påverkar modellen men motsvarar inte automatiskt systempromptens auktoritet. MCPTox, först inskickat den 19 augusti 2025, utvärderar verktygsförgiftning över realistiska MCP-verktyg och rapporterar känslighet som varierar med modell och konfiguration. Observationen att mer kapabla modeller kan vara mer mottagliga gäller detta benchmark, inte en universell lag.

Microsofts formulering är den mest precisa jag har hittat i ämnet:

Den här tekniken kallas tool poisoning: en instruktion som gömts i beskrivningen av ett oskyldigt verktyg får agenten att agera på den.

I det citerade benchmarktestet presterade Claude 3.7 Sonnet bäst i motståndskraft, men även den vägrade följa en förgiftad instruktion i färre än 3% av fallen. Det gäller testets förutsättningar och är inget generellt säkerhetsmått. Benchmarkens observation om mer kapabla modellers mottaglighet får inte användas som en universell lag för andra modeller, verktyg eller behörigheter.

Vad har attackerna gemensamt — och vad kan upptäckt missa?

Viktiga punkter

Vart och ett av de fyra fynden utnyttjar samma blinda fläck: agenten skiljer inte mellan ”data att analysera” och ”instruktioner att följa”. En skanning av bara repositoryt kan missa nyttolaster som senare kommer genom verktyg eller nätverksdata. Upptäckt är fortfarande användbar men måste beakta hela körvägen. Kombinera den med begränsningar för filer, autentiseringsuppgifter, verktyg och nätverk i stället för att förlita dig på att agenten känner igen instruktionen.

Slutsatsen gäller alla fyra fynden: du kan inte lita på att ”koden ser normal ut” – varje enskilt steg i en attack är faktiskt harmlöst. Begränsa agentens faktiska förmågor och granska föreslagna åtgärder; upptäckt och begränsning hanterar olika delar av attacken.

Vilket skydd har Claude Code redan – och varför räcker det inte?

Viktiga punkter

Claude Code har inbyggt skydd: det analyserar hela prompten efter misstänkta instruktioner, använder isolerade kontextfönster för webbinnehåll, kontrollerar förtroendet första gången det startas i en ny mapp och när MCP-servrar ansluts. Men flaggan --dangerously-skip-permissions, som många använder för att slippa irriterande behörighetsfrågor, inaktiverar alla dessa skydd samtidigt.

Anthropic erkänner problemet direkt i sin dokumentation, i stället för att dölja det:

Promptinjektion är en teknik där en angripare försöker åsidosätta eller ändra en AI-assistents instruktioner genom att infoga skadlig text. Claude Code innehåller flera skydd mot dessa attacker.

— Claude Code-dokumentationen, https://code.claude.com/docs/en/security

Enligt dokumentationen analyserar agenten hela prompten efter misstänkta instruktioner, godkänner inte automatiskt curl och wget, håller webbinnehåll i ett separat kontextfönster så att det inte blandas med huvudfönstret och kräver bekräftelse av förtroende första gången du startar den i en ny kodbas eller ansluter en ny MCP-server.

Men det finns en tydlig reservation som Anthropic uttrycker rakt på sak:

Läget bypassPermissions ger inget skydd mot promptinjektion eller oavsiktliga åtgärder.

— Claude Code-dokumentationen, https://code.claude.com/docs/en/permission-modes

Om du någon gång har startat Claude Code med --dangerously-skip-permissions av irritation för att den skulle ”sluta tjata med frågor”, då stängde du av alla mekanismer som hade kunnat stoppa just de fyra attacker som diskuteras ovan. Jag låter medvetet den här flaggan vara avstängd, även när Claude Code frågar för tionde gången under en session – det blir irriterande, men frågorna är gränsen mellan ”agenten läste misstänkt text” och ”agenten körde den”. En rimlig konfiguration för en icke-programmerare är standardläget för behörigheter (default eller acceptEdits) plus aktiverad sandbox: vanliga filändringar sker utan extra frågor, medan sandboxens faktiska fil- och nätverksgränser behöver verifieras för den konfiguration du använder, även om agenten har lurats.

Hur aktiverar du sandboxläget och täpper till luckan som standardinställningen lämnar öppen?

Viktiga punkter

Kommandot /sandbox i en Claude Code-session begränsar var agenten kan skriva och vilka domäner den kan kontakta. Det fungerar direkt på macOS; Linux och WSL2 kräver paketen bubblewrap och socat. En viktig detalj: som standard blockerar sandboxen inte läsning av filer som ~/.ssh – du måste aktivera det separat.

Aktivera det permanent för alla projekt genom att göra en ändring i ~/.claude/settings.json:

{
  "sandbox": { "enabled": true }
}

Som standard kan sandboxade kommandon bara skriva till projektets arbetskatalog och sessionens temporära katalog. Nätverksåtkomst går via en proxy – inga domäner är tillåtna i förväg, och Claude Code ber om bekräftelse första gången den kontaktar en ny domän. Anthropic säger att detta minskar antalet behörighetsfrågor kraftigt – med 84% enligt företagets interna mätningar – eftersom sandboxen hanterar vissa säkra fall själv i stället för att fråga dig varje gång.

Luckan som standardinställningarna lämnar öppen: sandboxen begränsar skrivning som standard, men förhindrar inte läsning av filer som ~/.aws/credentials och ~/.ssh. Det är just de filer och miljövariabler som riktas in i de analyserade attackerna ovan. Täpp till den luckan med ett separat block i samma fil:

{
  "sandbox": {
    "enabled": true,
    "credentials": {
      "files": [
        { "path": "~/.aws/credentials", "mode": "deny" },
        { "path": "~/.ssh", "mode": "deny" }
      ],
      "envVars": [
        { "name": "GITHUB_TOKEN", "mode": "deny" },
        { "name": "NPM_TOKEN", "mode": "deny" }
      ]
    }
  }
}

Poängen är att även om reverse shellen från den första analysen öppnas inne i sandboxen, tas dessa variabler och filer rent fysiskt bort från processmiljön innan den startar – det finns inget kvar att stjäla.

Vilka permissions.deny-regler bör du lägga till i dag?

Viktiga punkter

permissions.deny i settings.json blockerar specifika åtgärder på regelnivå i stället för att analysera avsikten – och Anthropic garanterar uttryckligen att en deny-regel alltid åsidosätter en allow-regel. Deny-regler begränsar matchande verktygsåtgärder men är ingen OS-styrd åtkomstgräns; indirekta kommandon och andra verktyg behöver egna kontroller.

En minimal uppsättning för en icke-programmerare som täcker huvudmålen för alla fyra attacker samtidigt:

{
  "permissions": {
    "deny": [
      "Read(~/.ssh/**)",
      "Read(~/.aws/credentials)",
      "Read(.env)",
      "Bash(curl *)",
      "Bash(wget *)",
      "Bash(sudo *)"
    ]
  }
}

Enligt Claude Code-dokumentationen har deny-regler alltid företräde framför allow-regler. Så även om du (eller agenten själv) av misstag tillåter bredare åtkomst någon annanstans, tillämpas en specifik deny-regel först. Regelföreträdet gäller matchande verktygsförfrågningar. Det bevisar inte att en hemlighet är oåtkomlig via varje underprocess eller verktyg; använd även upprätthållna filsystems- och miljöbegränsningar.

Claude Code har också ett auto-läge, där en separat klassificeringsmodell granskar åtgärder innan de körs – det är inte samma modell som pratar med dig. Som standard blockerar den bland annat exakt mönstret ”hämta kod och kör den direkt” (curl | bash), vilket är hur den första attacken ovan avslutas. Anthropic varnar uttryckligen för att detta är ett forskningsläge som minskar antalet frågor men inte garanterar säkerhet på egen hand – betrakta det som ett extra lager, inte som en ersättning för sandboxen och permissions.deny.

Hur kontrollerar du ett repository och en MCP-server innan du låter agenten lita på dem?

Viktiga punkter

Innan du ber Claude Code köra ett främmande repository bör du kontrollera dess ålder, commit-historik och var länken kom ifrån. Innan du installerar en MCP-server bör du bara använda källor du litar på och komma ihåg att Anthropic inte säkerhetsgranskar servrar från tredje part. Checklistorna är startkontroller, inte bevis på fullständig täckning; granska också vad som hämtas och körs senare genom verktyg och nätverk.

För repositoryn är här en kort checklista innan du lämnar över dem till agenten:

  1. Gå inte direkt till installation från en länk i ett mejl, inlägg eller en recension från en okänd källa – enligt 0Dins varning är det precis så dessa repositoryn sprids.
  2. Om installationen ger ett fel med en instruktion om att ”köra kommando X för att fixa det”, läs vad X faktiskt gör innan du låter Claude Code köra det. Instruktionen i analysen ovan såg helt rutinmässig ut – det var själva poängen.
  3. Kontrollera repositoryts ålder och commit-historik, inte bara antalet stjärnor – nya repositoryn kan lätt få falska stjärnor just för den här typen av attack.
  4. Om repositoryt är obekant, kör installationen i en virtuell maskin, inte på din arbetsdator med riktiga nycklar. Detta är Anthropics egen uttryckliga rekommendation för arbete med externa tjänster.

Anthropics ståndpunkt om MCP-servrar är tydligt uttryckt:

Vi rekommenderar att du skriver egna MCP-servrar eller använder servrar från leverantörer du litar på. Anthropic granskar kopplingar mot sina listningskriterier innan de läggs till i katalogen, men genomför inga säkerhetsgranskningar och driver inte någon MCP-server.

— Claude Code-dokumentationen, https://code.claude.com/docs/en/security

Det innebär att det är ditt ansvar att kontrollera MCP-servrar från tredje part, inte plattformen där du installerade dem. Vissa team – mestadels säkerhetsstartups – bygger redan verktyg för detta: skannrar för MCP-konfiguration som letar efter förgiftade beskrivningar och ”pinnade” verktyg som sparar beskrivningens hash vid den första installationen och flaggar senare ändringar. Den här tekniken är ny, så det är för tidigt att förlita sig på den som enda skydd – men den är värd att följa, särskilt om du ansluter MCP-servrar till produktion. För sådana anslutningar kan du låsa varje paketversion och registrera fingeravtrycket för verktygsbeskrivningarna i en granskningslogg.

7 regler för skydd: dagens checklista

Viktiga punkter

Allt i den här guiden kokar ner till sju konkreta åtgärder: tre ändringar i en och samma settings.json-fil (sandbox, credentials, permissions.deny) och fyra vanor för att arbeta med andras kod, fel och MCP-servrar. Ingen av dem kräver särskilda kunskaper – hela checklistan tar mindre än 20 minuter.

  1. Aktivera sandboxläget (/sandbox eller "sandbox": {"enabled": true} i ~/.claude/settings.json) och lägg till ett credentials-block som förhindrar läsning av ~/.ssh och ~/.aws/credentials.
  2. Lägg till permissions.deny-regler för läsning av hemliga filer och farliga bash-kommandon (curl, wget, sudo) – en deny-regel åsidosätter alltid en allow-regel.
  3. Kör aldrig --dangerously-skip-permissions med främmande eller overifierad kod – flaggan inaktiverar alla skydd på en gång, även dem som kunde ha stoppat just dessa attacker.
  4. Låt inte Claude Code automatiskt köra ett ”fix”-kommando från ett felmeddelande – läs först vad kommandot faktiskt gör.
  5. Installera MCP-servrar endast från källor du litar på, och kom ihåg att Anthropic inte säkerhetsgranskar dem åt dig.
  6. Separera sessioner efter behörighet: en arbetar med dina personuppgifter och ser inte externa data; en andra granskar andras mejl, repositoryn och ärenden men har inte åtkomst till hemligheter; en tredje publicerar externt – och endast sådant som du personligen har godkänt. Jag tillämpar detta strikt i mina egna projekt: en session med åtkomst till betalningsnycklar läser aldrig godtyckliga externa ärenden eller repositoryn, och en session som analyserar andras kod ser inga hemligheter alls. Blanda inte dessa roller i en och samma chatt.
  7. Håll Claude Code och anslutna automatiseringsskript uppdaterade och kontrollera specifika leverantörsåtgärder för din version; historiska åtgärder bevisar inte att varje nytt injektionsförsök är blockerat.

Vad händer härnäst

Inget av dessa lager är en garanti – Anthropic säger själv ärligt att inget skydd ger fullständig immunitet. Jag förväntar mig inte att Claude Code själv ska känna igen ett trick i ett felmeddelande eller en ärendekommentar. För mig är sandboxen och permissions.deny en del av hur jag hanterar projektkontext: vad agenten ser, vad den litar på som standard och vad som händer när den gör ett misstag.

Om du behöver åtkomst till neurala nätverk via Ailoot kan du ta en titt på Ailoot.

Fler detaljer

Frågor om den här guiden: Hur någon annans repository hackar Claude Code 2026: 7 skyddsregler

Förutsäger rapporterade 85% lyckade försök risken i min aktuella konfiguration?

Nej. Det är Tenets sammanlagda observation från kontrollerade valideringsomgångar utan komplett offentlig modellista, reproducerbar testmiljö eller exakt försöksnämnare. Agentens verktyg, godkännanden, autentiseringsuppgifter och nätverksåtkomst avgör möjliga åtgärder.

Varför räcker det inte att bara skanna klonat repository?

Slutlig nyttolast kan komma senare genom felrapport, verktygsmetadata eller hämtat DNS-innehåll. Granska hela körvägen och begränsa autentiseringsuppgifter, filer, verktyg och nätverk; skannrar och deny-regler ensamma bevisar inte fullständig inneslutning.

Alla artiklar