Abstrakt teknisk illustration på ett djupt skifferfält: en smal dokumentationsserverkolumn till vänster skickar små rektangulära kort längs en upplyst kanal mot en enda agentnod till höger, som håller en ring av små nyckelformade objekt. Ett av korten har en bärnstensfärgad kontur och bär en svag nyckelsilhuett som återspeglas i agentens ring. Bakom kolumnen ligger ett löst rutnät av biblioteksposter, varav en är mörkare skuggad än de övriga. Tunna turkosa linjer delar kanalen i leveranssegment. Inga människor, inga logotyper, ingen text av något slag. OrcaRouter-logotypen är inlagd i nedre högra hörnet.
AI Safety Incidents

CVE-2026-75130: Context7:s MCP-dokumentationsserver får betyget 9,0, och posten anger ingen åtgärdad version

Författare

Alistair Wren

Publiceringsdatum

Senaste modellerna · 20Visa alla modeller →
Benchmarks: Artificial Analysis · uppdateras dagligen
Tillbaka till alla inlägg

Den 18 augusti 2026 publicerade VulnCheck CVE-2026-75130 mot Context7, den dokumentationsserver för bibliotek som Upstash driver för Model Context Protocol och som kodagenter frågar efter versionsspecifik dokumentation. Sårbarheten ligger i funktionen som Upstash kallar Custom AI Instructions: en biblioteksägare kopplar vägledning till en dokumentationspost, Context7 levererar den vägledningen till kontextfönstret för varje agent som slår upp biblioteket, och ingenting på den vägen sanerar den. Noma Security, vars senior AI-sårbarhetsforskare Eli Ainhorn krediteras som upptäckare, visade att en förgiftad post kan få en ansluten agent att läsa .env-filer i projektets rot, skicka deras innehåll som ett ärende till ett GitHub-förråd som angriparen kontrollerar och radera lokala mappar under förevändning att det handlar om "städning" – allt från en rutinmässig dokumentationsförfrågan. Inget offer registreras. Resten av de dokumenterade agentincidenterna, var och en med sin egen allvarlighetsgrad, konfidensgrad och tvisteflagga, finns i AI-incidentarkivet, där posterna intill den här posten kan läsas bredvid den.

Context7-servern är liten, och det är den delen som är värd att förstå först. Nomas genomgång noterar att den exponerar två verktyg, resolve-library-id och query-docs, och att den inte kan köra kod, skriva filer eller nå nätverket på egen hand. Varje dokumenterad påverkan utförs av agenten i andra ändan, som faktiskt har åtkomst till filsystem, skal och nätverk på utvecklarens maskin. npm-registret visar hur stor den installerade basen är: @upstash/context7-mcp laddades ned 4,064,176 gånger under de trettio dagarna från 22 juli till 20 augusti 2026, fönstret kring publiceringen.

Mekanismen: ett förgiftat bibliotek, varje agent som frågar det

Nomas demonstration, som beskrevs i ContextCrush-rapporten den 5 mars 2026, genomfördes i tre steg som agenten utför snarare än servern. Den registrerade ett bibliotek i Context7s register med förgiftade regler bifogade. Instruktioner i dessa regler styrde agenten att söka efter och läsa varje .env-fil i projektets rot; ytterligare instruktioner styrde den att lägga upp innehållet som en issue i ett GitHub-repository kontrollerat av angriparen; en sista uppsättning instruktioner sade åt den att radera lokala mappar och filer för ”städning”. Förfrågan som drar in allt detta i kontexten är en helt vanlig sådan – att ber en kodassistent om hjälp med ett bibliotek.

Anledningen till att detta är ett leveranskedjeproblem snarare än vanlig promptinjektion är var nyttolasten ligger. Angriparen når aldrig offrets maskin och behöver aldrig plantera text i ett dokument som användaren öppnar. De förgiftade instruktionerna ligger i Context7:s eget register, hostas och levereras av Context7:s egen infrastruktur och kommer via samma betrodda kanal som den legitima dokumentationen, omöjliga att skilja från den. Noma noterar att Context7:s förtroendepoäng, som betygsätter bibliotek utifrån GitHub-historiken bakom dem, inte skyddar mot detta, eftersom ett långlivat konto kan köpas, kapas eller tillverkas. Företagets egen sammanfattning av den strukturella poängen är rak: ”Attackytan är inte vad MCP-servern kan göra. Den ligger i vad den kan få AI-agenten att göra.”

Två poäng för en bugg

Säkerhetsrådgivningen innehåller CVSS 3.1 9,0 (kritisk) och CVSS 4.0 6,4 (medel). Båda vektorerna levererades av VulnCheck i egenskap av tilldelande CNA, och NVD listar båda oförändrade och anger VulnCheck som källa för var och en. Uppdelningen är inte ett misstag; det är de två ramverken som beräknar samma skada på olika maskiner. CVSS 3.1 markerar Scope som Changed – injektionen går från servern till utvecklarens maskin och vidare – och räknar därför den höga påverkan på konfidentialitet, integritet och tillgänglighet som agentens kapaciteter kan ge med full vikt. CVSS 4.0 ersätter Scope med separata mätvärden för det sårbara systemet och det efterföljande systemet: det registrerar ingen påverkan på konfidentialitet, integritet eller tillgänglighet för Context7 självt (VC:N/VI:N/VA:N) och hög påverkan på systemen nedströms (SC:H/SI:H/SA:H), vilket dess formel viktar mindre tungt. Servern är kuriren, inte offret.

Splittringen fortplantar sig in i databaserna. GitHubs rådgivning, GHSA-97r6-3rgm-v39r, publicerades 18:32 UTC den 18 augusti, en halvtimme efter CVE:n, och dess sammanfattade allvarlighetsgrad anges som medel trots att CVSS 3.1-vektorn i samma post ger 9,0. ENISA:s EU Vulnerability Database speglar posten som EUVD-2026-61099 och lagrar ett baspoäng på 6,4 endast under version 4.0. Arkivposten som den här artikeln följer graderar incidenten hög – vilket inte är något av de två publicerade betygen – och det är arkivets betyg, inte en egen mätning.

HTML card titled 'One advisory, two scores', kicked 'OrcaRouter · AI incident archive · 2026-08-18', with the subtitle 'Identical facts, two severity bands apart. Both vectors were supplied by VulnCheck as the assigning CNA; NVD carries both unchanged and attributes each to VulnCheck'. Four chips read CVSS 3.1 9.0 critical, CVSS 4.0 6.4 medium, archive grade high and EPSS 0.49%. Three columns. 'Where the vectors agree' lists attack vector network with low complexity, privileges required low because the attacker needs a registry entry rather than the victim's machine, a routine documentation request as the trigger, and high confidentiality, integrity and availability impact in both frameworks. 'Where they diverge' lists CVSS 3.1 setting Scope to Changed and booking the jump to the developer's machine at full weight, CVSS 4.0 recording the vulnerable system as unharmed at VC:N, VI:N and VA:N, the same harms booked downstream at SC:H, SI:H and SA:H with less weight, and user interaction at required in 3.1 against passive in 4.0. 'How the databases record it' lists NVD keeping both vectors each tagged disclosure@vulncheck.com, GHSA-97r6-3rgm-v39r carrying a summary severity of medium while its own v3 vector reads 9.0, ENISA EUVD-2026-61099 storing 6.4 under version 4.0 only, and the archive grading the record high, which is neither score. A footer reads 'Sources: CVE-2026-75130 in the MITRE CVE Services record, 18 August 2026; NVD API; GitHub Advisory API; ENISA EUVD API. EPSS as recorded in ENISA's mirror.'

Ett CVE publicerat i augusti för ett avslöjande i mars

CVE-identifieraren reserverades den 17 augusti 2026 och publicerades kl. 18:02 UTC den 18 augusti, vilket är det datum som posten har. CNA-containern innehåller också ett andra datum som inte visas på aggregatorsidorna: datePublic, 5 mars 2026 – fem och en halv månad innan identifieraren existerade, och samma dag som Noma publicerade ContextCrush. Rådgivningens enda tekniska referens är den marsartikeln, som VulnCheck taggar för både teknisk beskrivning och exploit.

Nomas tidslinje för offentliggörandet förklarar gapet. Den rapporterar felet till Upstash den 18 februari 2026 med en fullständig rapport och ett konceptbevis, dokumenterar att Upstash accepterade fynden och började åtgärda dem den 19 februari, säger att en fix ”driftsattes i produktion med regelsanering och skyddsräcken” den 23 februari och daterar det offentliga offentliggörandet och Nomas slutliga verifiering till den 5 mars. Enligt Nomas redogörelse löstes februarifelet inom några dagar.

Datumangivelserna i npm-registret sammanfaller med den tidslinjen på ett sätt som får det drabbade intervallet att se märkligt ut. @upstash/context7-mcp 2.1.2 publicerades den 23 februari 2026 kl. 10:06 UTC, dagen då Noma uppger att fixen nådde produktion; dess changelog-rad lyder ”Ta bort onödig varning och uppdatera verktygsbeskrivningar.” 2.1.3 följde den 4 mars 2026, dagen före Nomas artikel, med anteckningar om att avvisa GET-förfrågningar på MCP-slutpunkter och att lägga till ett källfält i sökresultat. Ingen av versionsanteckningarna nämner sanering, skyddsräcken eller injektionen. CNA:s drabbade intervall slutar vid 2.1.2, vilket gör 2.1.3 till den första versionen utanför det.

Tre tolkningar överensstämmer med dessa datum, och varken VulnCheck eller Noma anger vilken som är korrekt. Den första, som Digital Applied argumenterar för i sin artikel den 18 augusti och som AI Security Wire upprepade den 22 augusti, är att fixen regredierade: den build som innehöll februaripatchen ligger inom det påverkade intervall som gäller för augusti. Den andra är att intervallet helt enkelt är ankrat till den build som forskaren testade, och att 2.1.3, som släpptes dagen före offentliggörandet, är den verkliga gränsen – en slutsats som flera aggregatorer drar mekaniskt, inklusive Feedly, som listar "uppdatera till version 2.1.3 eller senare" som motåtgärd. Den tredje är att februarifixen tillämpades där reglerna serveras i stället för i klientpaketet, varvid ett npm-versionsintervall över huvud taget inte beskriver fixen. En tyst säkerhetsfix är vanlig nog att frånvaron av en matchande post i ändringsloggen inte avgör något åt något håll.

HTML card titled 'Six months, one affected range', kicked '2026-08-18-context7-mcp-ti-shi-zhu · dates', subtitled 'Times UTC. Noma's disclosure timeline and the npm registry dates do not say what the 23 February fix changed, and no release note mentions sanitisation'. Four chips read 18 Feb 2026 reported to Upstash, 23 Feb 2026 fix live and npm 2.1.2, 5 Mar 2026 datePublic, and 18 Aug 2026 CVE published. Three columns. 'Noma's February timeline' lists 18 February discovery with the report and proof of concept delivered to Upstash, 19 February acceptance and remediation, 23 February deployment of a fix with rule sanitization and guardrails, and 23 February at 10:06 UTC the npm publication of 2.1.2 with a changelog reading 'Remove unnecessary warning and update tool descriptions'. 'The March boundary' lists 4 March at 12:51 UTC the npm publication of 2.1.3 whose changelog covers 405 handling for GET requests and a source field, 5 March publication of Noma's ContextCrush writeup with final verification, 5 March as the CNA's datePublic for the CVE, and the affected range ending at 2.1.2, which makes 2.1.3 the first build outside it. 'The August record' lists 17 August reservation of the identifier, 18 August at 18:02 UTC publication by VulnCheck as CNA, 18 August at 18:32 UTC the appearance of GHSA-97r6-3rgm-v39r with no version ranges, no fixed version in the CVE, the VulnCheck advisory or the GHSA, and NVD last modified 22 October at status Deferred with no CPE configurations. A footer reads 'Sources: MITRE CVE Services record for CVE-2026-75130; Noma Security, ContextCrush, 5 March 2026; npm registry version times; GitHub Advisory API; NVD API, read 29 October 2026.'

Vad som är fastställt, och vad som inte är det

• Fastställt genom primärposten. CVE-identifieraren, dess publicering den 18 augusti, VulnCheck som CNA, CWE-1427-klassificeringen för felaktig neutralisering av indata som används för LLM-promptning, tillerkännandet till Eli Ainhorn på Noma Security och ett påverkat intervall för Context7 till och med 2.1.2.

• Fastställt av Nomas forskning. Injektionsvägen via Custom AI Instructions, trestegsproof of concept, observationen att servern endast exponerar resolve-library-id och query-docs, samt uttalandet att inga bevis på utnyttjande i det vilda observerades för februaribuggen.

• Fastställt av registret. Publiceringsdatumet för 2.1.2 den 23 februari 2026, publiceringsdatumet för 2.1.3 den 4 mars 2026 och en paketlinje som sedan dess har passerat 4.0 och nått 4.4.4 den 19 oktober 2026.

• Ej fastställt: huruvida nuvarande byggen är påverkade. Ingen källa säger att 4.x-serien är sårbar, och ingen källa säger att den är fri från sårbarheten. CVE-posten, VulnChecks rådgivning och GitHubs rådgivning anger alla ingen åtgärdad version, och GitHubs rådgivnings lista över sårbara versionintervall är tom.

• Inte fastställt: något offer eller användning i verklig miljö. Arkivet registrerar verklig skada som falskt. CISA:s berikning av posten den 19 augusti bedömde Exploitation som "none", Automatable som "no" och Technical Impact som "total"; bristen finns inte i KEV-katalogen; ENISA:s spegel registrerar en EPSS på 0,49 procent. Nomas forskning är en demonstration, inte en incidentrapport.

• Ej fastställt: själva regressionstolkningen. Det vilar på att ett datum sammanfaller mellan en tidslinje för en korrigering och en npm-publicering, och ingen primärkälla hävdar att samma kodväg misslyckades två gånger.

HTML card titled 'What the record establishes, and what it does not', kicked 'Evidence ledger · CVE-2026-75130', subtitled 'The archive grades this record confidence A, disputed false, real harm false, AI involvement confirmed. Those are its fields; this is what they rest on'. Four chips read confidence A, disputed false, real harm false, AI involvement confirmed. Three columns. 'Established by primary sources' lists CVE-2026-75130 published 18 August 2026 with VulnCheck as CNA and CWE-1427, credit to Eli Ainhorn of Noma Security, an affected range of Context7 through 2.1.2, the injection path and three-step proof of concept as Noma describes them, and npm dates of 2.1.2 on 23 February, 2.1.3 on 4 March and latest 4.4.4 on 19 October 2026. 'Not established' lists whether the 4.x line is vulnerable or clear with no source saying either way, whether February's fix regressed or was never in the client package, any victim or in-the-wild use with CISA's SSVC recording exploitation none and the flaw absent from KEV, and a fixed version, which the CVE, the VulnCheck advisory and the GHSA all leave unnamed. 'What corroborates it' lists VulnCheck's advisory restating the CVE and adding the weakness class and credit, GHSA-97r6-3rgm-v39r as an alias of the same submission thirty minutes later, ENISA EUVD-2026-61099 mirroring the record along with the CVE aggregator pages, and two secondary write-ups restating it with no newsroom coverage found on 29 October 2026. A footer reads 'Sources agree because the GitHub and ENISA entries derive from the same VulnCheck submission, not because a second party measured the flaw.'

Bekräftelse: upprepning och tystnad där det spelar roll

De dokument som stämmer överens med posten är till stor del härledda från den. VulnCheck:s rådgivning upprepar CVE-texten och tillägger svaghetsklassificering och erkännande av forskaren. GitHub-rådgivningen är ett alias för samma inlämning, publicerad samma kväll, utan versionsintervall och utan oberoende granskning. ENISAs post är en spegel. Digital Applied, en av de två källor som arkivet citerar, publicerade sin analys den 18 augusti och uppdaterade den den 22 augusti med nya registeruttag; AI Security Wire publicerade en andra artikel den 22 augusti. Båda upprepar rådgivningen och vidarebefordrar slutsatsen om regressionen, och ingen av dem uppger att de har verifierat den självständigt.

Vi hittade ingen nyhetsredaktionell bevakning av CVE:n den 29 oktober 2026 – inget inslag från BleepingComputer, The Register eller SecurityWeek – och resultaten var CVE-aggregatorsidor snarare än rapportering. Denna frånvaro är viktig för hur uppgiften bör läsas: arkivet betygsätter den som A, väl dokumenterad med primärkällor som stämmer överens, och primärkällorna stämmer verkligen överens, men överensstämmelsen här är mellan en CNA-post och den forskning den citerar, inte mellan två oberoende mätningar. Flera aggregatorsidor tillför påståenden som deras källor inte stöder; Feedlys post anger till exempel att en patch är tillgänglig och namnger 2.1.3, vilket ingen säkerhetsbulletin gör, medan VulDB:s sida returnerade en botkontroll i stället för innehåll och inte kunde läsas alls.

Vad förändrades, och vad förändrades inte

För februarifelet reagerade Upstash inom några dagar: det accepterades den 19 februari och åtgärdades den 23 februari, enligt Nomas redogörelse. För augustiposten är det enda leverantörsuttalande som CVE refererar till ett LinkedIn-inlägg från Upstash, där det är märkt som leverantörsrådgivning och vars innehåll vi inte kunde läsa utan en session. Ingen GitHub-säkerhetsrådgivning som omfattar repot innehåller en åtgärdad version, och NVD:s post står med status Deferred utan CPE-konfigurationer och med senaste ändring den 22 oktober 2026, så NVD:s egen analys finns inte i posten.

Själva paketet fortsatte att levereras. Mellan 20 april 2025 och 23 oktober 2026 publicerade upstash/context7-repositoriet 163 utgåvor, och ingen av deras versionsanteckningar nämner denna CVE eller beskriver sanering av de anpassade instruktionerna som bär injektionen. Det är en redogörelse för vad underhållarna valde att skriva ned, inte ett bevis på att inget åtgärdades.

Det som posten lämnar åt en operatör är exponeringshantering snarare än en patchlinje. Nomas rekommendationer kretsar kring att granska MCP-integrationer och inspektera vad som passerar mellan agent och server vid körning; OpenCVEs föreslagna åtgärder är att uppgradera, att inaktivera eller begränsa funktionen Custom AI Instructions och att lägga till indatavalidering på servern. Den operativa versionen av allt detta är samma tre drag: lås MCP-serverversionen i stället för att flyta på senaste, håll produktionsautentiseringsuppgifter borta från klartextmiljöfiler som agenten kan läsa, och behandla verktygssvar som otillförlitlig indata snarare än som dokumentation som agenten kan följa.

Tio veckor efter publiceringen slutar det offentliga registret fortfarande där det gjorde den 18 augusti: en identifierare, två poängvärden som ligger två band ifrån varandra, ett påverkat intervall vars övre gräns är en build som släpptes i februari, och ingen namngiven patch. Den som triagerar CVE-2026-75130 måste avgöra utifrån vad deras agenter kan nå, eftersom registret inte anger vilken version de ska installera.