Abstracte technische illustratie op een diep leikleurig veld: een smalle documentatieserver-kolom links voert kleine rechthoekige kaarten langs een verlicht kanaal naar een enkele agent-node rechts, die een ring van kleine sleutelvormige objecten bevat. Een van de kaarten is omlijnd in amber en draagt een flauw sleutelsilhouet dat wordt weerspiegeld in de ring van de agent. Achter de kolom ligt een los raster van bibliotheekvermeldingen, waarvan er één donkerder is gearceerd dan de rest. Dunne teal lijnen verdelen het kanaal in leveringssegmenten. Geen mensen, geen logo's, geen belettering van welke aard dan ook. Het OrcaRouter-logo is samengesteld in de rechteronderhoek.
AI Safety Incidents

CVE-2026-75130: Context7's MCP-documentatieserver scoort 9,0, en de vermelding noemt geen gepatchte versie

Auteur

Alistair Wren

Publicatiedatum

Nieuwste modellen · 20Bekijk alle modellen →
Benchmarks: Artificial Analysis · dagelijks bijgewerkt
Terug naar alle berichten

Op 18 augustus 2026 publiceerde VulnCheck CVE-2026-75130 tegen Context7, de bibliotheekdocumentatieserver die Upstash voor het Model Context Protocol draait en die coding agents bevragen voor versiespecifieke documentatie. De fout zit in de functie die Upstash ‘Custom AI Instructions’ noemt: een bibliotheekeigenaar koppelt richtlijnen aan een documentatie-item, Context7 levert die richtlijnen in het contextvenster van elke agent die de bibliotheek opzoekt, en niets op dat pad sanitiseert ze. Noma Security, waarbij Eli Ainhorn, senior AI-kwetsbaarheidsonderzoeker, als ontdekker wordt vermeld, heeft aangetoond dat een vergiftigde vermelding een verbonden agent kan aanzetten om .env-bestanden in de hoofdmap van het project te lezen, hun inhoud als een issue naar een GitHub-repository te sturen die de aanvaller beheert, en lokale mappen te verwijderen onder het mom van ‘opruiming’ — allemaal naar aanleiding van een routinematig documentatieverzoek. Er is geen slachtoffer geregistreerd.De rest van de gedocumenteerde agentincidenten, elk met een eigen ernst, betrouwbaarheidsgraad en markering voor betwisting, staat in het AI-incidentenarchief, waar de omliggende vermeldingen van deze registratie naast deze kunnen worden gelezen.

De server van Context7 is klein, en dat is het deel dat je eerst moet begrijpen. In het artikel van Noma staat dat het twee tools beschikbaar stelt, resolve-library-id en query-docs, en dat het zelf geen code kan uitvoeren, geen bestanden kan schrijven of toegang tot het netwerk kan krijgen. Elke gedocumenteerde impact wordt uitgevoerd door de agent aan de andere kant, die wel toegang heeft tot het bestandssysteem, de shell en het netwerk op de machine van de ontwikkelaar. Het npm-register laat zien hoe groot de geïnstalleerde basis is: @upstash/context7-mcp werd 4.064.176 keer gedownload in de dertig dagen van 22 juli tot 20 augustus 2026, de periode rond de publicatie.

Het mechanisme: één vergiftigde bibliotheek, elke agent die er query's op uitvoert

De demonstratie van Noma, beschreven in het ContextCrush-artikel van 5 maart 2026, verliep in drie stappen die door de agent worden uitgevoerd en niet door de server. Er werd een bibliotheek geregistreerd in het register van Context7 met vergiftigde regels eraan gekoppeld. Instructies in die regels droegen de agent op om elk .env-bestand in de projecthoofdmap te zoeken en te lezen; verdere instructies droegen de agent op om de inhoud als een issue te posten in een GitHub-repository die door een aanvaller wordt beheerd; een laatste set instructies droeg de agent op om lokale mappen en bestanden te verwijderen voor “opschoning.” Het verzoek dat dit alles in context haalt, is een doodgewoon verzoek: een programmeerassistent vragen om hulp bij een bibliotheek.

De reden dat dit een supplychainprobleem is en geen gewone promptinjectie, is waar de payload zich bevindt. De aanvaller bereikt nooit de machine van het slachtoffer en hoeft nooit tekst te plaatsen in een document dat de gebruiker opent. De vergiftigde instructies staan in het eigen register van Context7, worden gehost en aangeboden door de eigen infrastructuur van Context7 en arriveren via hetzelfde vertrouwde kanaal als de legitieme documentatie, niet te onderscheiden van die documentatie. Noma merkt op dat de vertrouwensscore van Context7, die bibliotheken beoordeelt op basis van de GitHub-geschiedenis erachter, hier niet tegen beschermt, omdat een langdurig bestaand account kan worden gekocht, gekaapt of gefabriceerd. De samenvatting die het bedrijf zelf van het structurele punt geeft, is bot: “Het aanvalsoppervlak is niet wat de MCP-server kan doen. Het zit in wat die de AI-agent kan laten doen.”

Twee scores voor één bug

Het beveiligingsadvies bevat CVSS 3.1 9.0 (kritiek) en CVSS 4.0 6.4 (gemiddeld). Beide vectoren zijn door VulnCheck aangeleverd als de toewijzende CNA, en NVD neemt beide ongewijzigd over, waarbij elk aan VulnCheck wordt toegeschreven. Het verschil in scores is geen vergissing; de twee frameworks rekenen dezelfde schade toe aan verschillende machines. CVSS 3.1 markeert Scope als Changed — de injectie gaat van de server naar de machine van de ontwikkelaar en verder — en laat daarom de volledige hoge impact op vertrouwelijkheid, integriteit en beschikbaarheid van de mogelijkheden van de agent op vol gewicht wegen. CVSS 4.0 vervangt Scope door afzonderlijke metrics voor het kwetsbare systeem en het daaropvolgende systeem: het registreert geen impact op vertrouwelijkheid, integriteit of beschikbaarheid voor Context7 zelf (VC:N/VI:N/VA:N) en een hoge impact op de stroomafwaartse systemen (SC:H/SI:H/SA:H), die zijn formule minder zwaar weegt. De server is de koerier, niet het slachtoffer.

De splitsing zet zich voort in de databases. Het advies van GitHub, GHSA-97r6-3rgm-v39r, werd gepubliceerd om 18:32 UTC op 18 augustus, een half uur na de CVE, en de ernst in de samenvatting luidt gemiddeld hoewel de CVSS 3.1-vector in hetzelfde record 9,0 scoort. De EU Vulnerability Database van ENISA geeft de vermelding weer als EUVD-2026-61099 en bewaart een basisscore van 6,4 alleen onder versie 4.0. Het archiefrecord dat dit artikel volgt, beoordeelt het incident als hoog — wat geen van de twee gepubliceerde scores is — en het is de beoordeling van het archief, niet een eigen meting.

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.'

Een CVE die in augustus werd gepubliceerd voor een onthulling in maart

De CVE-identificatie werd gereserveerd op 17 augustus 2026 en gepubliceerd om 18:02 UTC op 18 augustus, de datum die het record vermeldt. De CNA-container bevat ook een tweede datum die niet op de aggregatorpagina's verschijnt: datePublic, 5 maart 2026 — vijf en een halve maand voordat de identificatie bestond, en dezelfde dag dat Noma ContextCrush publiceerde. De enige technische verwijzing in het advies is dat stuk uit maart, dat VulnCheck tagt voor zowel technische beschrijving als exploit.

Noma's tijdlijn voor openbaarmaking verklaart het gat. Er staat dat het de kwetsbaarheid op 18 februari 2026 aan Upstash meldt met een volledig rapport en proof of concept, vermeldt dat Upstash de bevindingen op 19 februari accepteerde en met herstel begon, stelt dat een oplossing op 23 februari “naar productie is uitgerold met regelsanitisering en guardrails”, en dateert de openbare bekendmaking en de definitieve verificatie door Noma op 5 maart. Volgens Noma's relaas was de bug van februari binnen enkele dagen opgelost.

De datums in het npm-register passen zo bij die tijdlijn dat het getroffen bereik er vreemd uitziet. @upstash/context7-mcp 2.1.2 werd gepubliceerd op 23 februari 2026 om 10:06 UTC, de dag waarop volgens Noma de fix in productie ging; de changelog-regel luidt “Remove unnecessary warning and update tool descriptions.” 2.1.3 volgde op 4 maart 2026, de dag voor Noma's write-up, met opmerkingen over het afwijzen van GET-verzoeken op MCP-endpoints en het toevoegen van een source-veld aan zoekresultaten. Geen van beide releasenotities vermeldt sanitisatie, guardrails of de injectie. Het getroffen bereik van de CNA eindigt bij 2.1.2, waardoor 2.1.3 de eerste versie daarbuiten is.

Drie interpretaties passen bij die datums, en noch VulnCheck noch Noma vermeldt welke de juiste is. De eerste — beargumenteerd door Digital Applied in het stuk van 18 augustus en herhaald door AI Security Wire op 22 augustus — is dat de fix een regressie kende: de build die februari's patch bevatte, valt binnen het getroffen bereik van augustus. De tweede is dat het bereik simpelweg is verankerd aan de build die de onderzoeker heeft getest, en dat 2.1.3, de dag vóór de openbaarmaking uitgebracht, de werkelijke grens is — een gevolgtrekking die verschillende aggregators mechanisch maken, waaronder Feedly, dat “update naar versie 2.1.3 of later” als mitigerende maatregel vermeldt. De derde is dat de februarifix werd toegepast waar de regels worden geserveerd in plaats van in het clientpakket, in welk geval een npm-versiebereik de fix helemaal niet beschrijft. Een stille securityfix komt vaak genoeg voor dat de afwezigheid van een bijpassende changelog-vermelding hoe dan ook niets beslecht.

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.'

Wat is vastgesteld, en wat niet

• Vastgesteld door het primaire record. De CVE-identificatie, de publicatie ervan op 18 augustus, VulnCheck als CNA, de CWE-1427-classificatie voor onjuiste neutralisatie van voor LLM-prompting gebruikte invoer, de toeschrijving aan Eli Ainhorn van Noma Security, en een getroffen bereik van Context7 tot en met 2.1.2.

• Vastgesteld door Noma's onderzoek. Het injectiepad via Custom AI Instructions, het proof-of-concept in drie stappen, de observatie dat de server alleen resolve-library-id en query-docs aanbiedt, en de stelling dat voor de bug van februari geen bewijs van misbruik in het wild is waargenomen.

• Vastgelegd door het register. De publicatiedatum van 2.1.2, 23 februari 2026, de publicatiedatum van 2.1.3, 4 maart 2026, en een pakketlijn die inmiddels voorbij 4.0 is gegaan tot 4.4.4 op 19 oktober 2026.

• Niet vastgesteld: of huidige builds getroffen zijn. Geen enkele bron zegt dat de 4.x-lijn kwetsbaar is, en geen enkele bron zegt dat ze veilig is. Het CVE-record, het VulnCheck-advisory en het GitHub-advisory noemen allemaal geen gepatchte versie, en de lijst met kwetsbare versiebereiken in het GitHub-advisory is leeg.

• Niet vastgesteld: geen slachtoffers of gebruik in het wild. Het archief registreert echte schade als onwaar. CISA's aanvulling van het record op 19 augustus scoorde Exploitatie als "geen", Automatiseerbaar als "nee" en Technische impact als "totaal"; de kwetsbaarheid staat niet in de KEV-catalogus; de spiegel van ENISA registreert een EPSS van 0,49 procent. Het onderzoek van Noma is een demonstratie, geen incidentrapport.

• Niet vastgesteld: de regressielezing zelf. Die berust op een datumcoïncidentie tussen een fix-tijdlijn en een npm-publicatie, en geen primaire bron stelt dat hetzelfde codepad twee keer is mislukt.

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.'

Corroboratie: herhaling, en stilte waar het ertoe doet

De documenten die met het record overeenkomen, zijn grotendeels daarvan afgeleid. Het advies van VulnCheck herhaalt de CVE-tekst en voegt de zwakheidsclassificatie en de erkenning van de onderzoeker toe. Het GitHub-advies is een alias van dezelfde indiening, dezelfde avond gepubliceerd, zonder versiebereiken en zonder onafhankelijke beoordeling. Het item van ENISA is een spiegel. Digital Applied, een van de twee bronnen die het archief citeert, publiceerde zijn analyse op 18 augustus en werkte die op 22 augustus bij met nieuwe registeropvragingen; AI Security Wire publiceerde op 22 augustus een tweede artikel. Beide herhalen het advies en geven de regressie-inferentie door, en geen van beide beweert die onafhankelijk te hebben geverifieerd.

We vonden geen berichtgeving in de nieuwsmedia over de CVE op 29 oktober 2026 — geen item van BleepingComputer, The Register of SecurityWeek — en de resultaten waren CVE-aggregatorpagina's, geen journalistieke berichtgeving. Die afwezigheid is van belang voor hoe het record gelezen moet worden: het archief kent er een A toe, goed gedocumenteerd met primaire bronnen die overeenkomen, en de primaire bronnen komen inderdaad overeen, maar de overeenstemming hier is tussen een CNA-record en het onderzoek dat het citeert, niet tussen twee onafhankelijke metingen. Meerdere aggregatorpagina's voegen claims toe die hun bronnen niet ondersteunen; Feedly's vermelding bijvoorbeeld stelt dat er een patch beschikbaar is en noemt 2.1.3, wat geen enkel advies doet, terwijl de pagina van VulDB een botcontrole teruggaf in plaats van inhoud en helemaal niet gelezen kon worden.

Wat is er veranderd, en wat niet

Voor de bug van februari handelde Upstash binnen enkele dagen: volgens Noma's relaas werd de bug op 19 februari geaccepteerd en op 23 februari opgelost. Voor de augustusvermelding is de enige leveranciersverklaring waarnaar de CVE verwijst een LinkedIn-post van Upstash, daar getagd als leveranciersadvies, waarvan wij de inhoud niet zonder sessie konden lezen. Geen enkel GitHub-veiligheidsadvies dat aan het repository is gekoppeld, bevat een vaste versie, en de NVD-vermelding staat op status Deferred, zonder CPE-configuraties en met een laatste wijziging van 22 oktober 2026, zodat NVD's eigen analyse niet in het record staat.

Het pakket zelf werd nog steeds uitgebracht. Tussen 20 april 2025 en 23 oktober 2026 publiceerde het upstash/context7-repository 163 releases, en geen van hun release notes vermeldt deze CVE of beschrijft het sanitiseren van de aangepaste instructies die de injectie bevatten. Dat is een registratie van wat de maintainers besloten vast te leggen, geen bewijs dat er niets is opgelost.

Wat de registratie een operator achterlaat, is exposure management, geen patchregel. De aanbevelingen van Noma draaien om het beoordelen van MCP-integraties en het inspecteren van wat tijdens de uitvoering tussen agent en server passeert; de voorgestelde acties van OpenCVE zijn upgraden, de functie Custom AI Instructions uitschakelen of beperken en invoervalidatie aan de server toevoegen. De operationele versie van al dat alles is dezelfde drie stappen: de MCP-serverversie vastpinnen in plaats van op latest te blijven zweven, productie-inloggegevens buiten voor de agent leesbare plaintext-omgevingsbestanden houden, en toolresponses behandelen als onvertrouwde invoer in plaats van als documentatie die de agent mogelijk volgt.

Tien weken na publicatie eindigt het openbare dossier nog steeds waar het op 18 augustus eindigde: een identificatie, twee scores die twee banden uiteenliggen, een getroffen bereik waarvan de bovengrens een build is die in februari is uitgeleverd, en geen genoemde oplossing. Wie CVE-2026-75130 triageert, moet beslissen op basis van wat diens agents kunnen bereiken, omdat het dossier niet vermeldt welke versie moet worden geïnstalleerd.