Eén enkele onzichtbare opmerking in een Azure DevOps-pull-aanvraag kan de eigen AI-codeeragent van een recensent tegen hem of haar keren, waardoor deze in projecten terechtkomt waartoe de aanvaller geen rechten heeft en stilletjes kan lekken wat hij vindt.
De fout zit in de officiële Azure DevOps MCP-server van Microsoft, en het werkt omdat een van de tools beschrijvingen van pull-aanvragen retourneert zonder een prompt-injectie-vangrail die het bedrijf al op anderen had toegepast.
Offensief beveiligingsbedrijf Manifold Security heeft deze week de verwarde plaatsvervangende bug gedetailleerd beschreven. Microsoft levert de server zodat AI-agenten Azure DevOps voor een gebruiker kunnen lezen en bedienen via pull-aanvragen, pijplijnen, wiki’s en werkitems, allemaal met de eigen machtigingen van de gebruiker. Dat is het hele probleem: inhoud die andere mensen hebben geschreven, kan instructies worden waarnaar de agent handelt.
Azure DevOps PR-beschrijvingen accepteren Markdown, waardoor HTML-opmerkingen worden toegestaan. In de webinterface wordt een HTML-opmerking () wordt weergegeven als niets, dus een recensent die door de beschrijving bladert, ziet een gewone verandering. De REST API retourneert het woordelijk, en de server overhandigt die tekst rechtstreeks aan de agent.
Die scheiding tussen wat de mens ziet en wat het model ontvangt, is het leveringsmechanisme: de aanvaller praat nooit met de agent, maar plant instructies in de inhoud waarvan hij weet dat deze deze later zal lezen.
Wanneer de recensent zijn agent vraagt om de PR te beoordelen, kan de verborgen tekst het doel van de agent herschrijven. De agent beschikt over de inloggegevens van de revisor, zodat hij kan optreden bij projecten waartoe de aanvaller geen rechten heeft.
Manifold zegt dat toegang de broncode, geheimen en werkitems bereikt, en niet alleen de wikipagina waarvan het proof of concept is geëxfiltreerd. Het bedrijf noemt de escalatie een normaal geval, omdat reviewers vaak een hogere rang hebben dan degene die het pull-verzoek heeft geopend. De aanvaller wint er rechtstreeks niets mee; ze lenen de toegang van de recensent via tekst die de recensent nooit ziet.
Het trekverzoekpad miste de vangrail
Wat dit boven een generieke prompt-injectiewaarschuwing uittilt, is dat Microsoft er al een verdediging voor heeft geleverd. Bij het lezen van de bron van de server ontdekte Manifold dat deze gebruik maakt van spotlighting, een techniek uit de eigen richtlijnen van Microsoft over indirecte promptinjectie: het verpakt niet-vertrouwde inhoud in scheidingstekens, zodat het model gegevens kan onderscheiden van de instructies die het moet volgen.
Het bedrijf heeft het toegevoegd in PR #1062, waar de wikipagina- en buildlog-tools hun uitvoer doorgeven via een gedeelde helper, createExternalContentResponse. De tool die een pull-verzoek retourneert, repo_get_pull_request_by_id, roept het nooit aan, dus geeft het de ruwe beschrijving terug, wat precies het oppervlak is waarnaar een aanvaller schrijft.
The Hacker News bevestigde dat hetzelfde pad vanaf 21 juli nog steeds in de huidige bron wordt ontdekt.
In Manifold’s proof of concept, uitgevoerd op een lokale build van v2.7.0, opent een bijdrager aan een project een normaal ogende PR waarvan de verborgen opmerking de lading draagt. Zodra de agent zijn beoordeling begint, voert de tooltrace een keten uit: hij activeert een pijplijn in een ander project, leest een vertrouwelijke wikipagina die de aanvaller niet kan openen, en plaatst die pagina terug als commentaar op de PR, waar de aanvaller deze leest.
Eén enkele verborgen opmerking vormde de basis voor de hele reeks, en elk telefoontje daarin was er een die de agent mocht plegen. Het probleem, zo schreven de onderzoekers, was “de volgorde en de bedoeling, gedreven door tekst die een mens nooit heeft gezien.” Het team heeft het gereproduceerd met zowel Copilot CLI als Claude Code, dus het is niet gebonden aan één agent.
De keten kent echter wel enkele vereisten: door de aanvaller geschreven PR-tekst, een workflow die deze naar een agent stuurt, een reviewer wiens toegang groter is dan die van de aanvaller, en een agent die toestemming heeft om tools uit te voeren zonder te vragen.
Manifold bevestigde dat het dat laatste onderdeel had getest als een automatische goedkeuringshouding zonder aanwijzingen per tool, het controlepunt waarmee een recensent anders een vreemde projectoverschrijdende pijplijn zou kunnen vangen voordat deze wordt geactiveerd. Een breed teken plus die houding is waar het risico zich concentreert.
De demo gaat ervan uit dat iemand de beoordeling start, maar Manifold merkt op waar teams naartoe gaan: geautomatiseerde beoordeling, triage en samenvattingen die worden geactiveerd door triggers, zonder dat er bij elke run een mens wordt gevraagd of elk resultaat wordt gelezen. In die opstelling wordt de geplaatste beschrijving vanzelf geactiveerd en duurt het lek langer voordat iemand het merkt.
Het patroon is niet nieuw. In mei 2025 toonde Invariant Labs dezelfde aanvalsklasse tegen de MCP-server van GitHub, waarbij een openbare kwestie werd gebruikt om een agent ertoe aan te zetten een privéopslagplaats te lezen en deze te lekken via een pull-verzoek; dezelfde techniek heeft sindsdien geautomatiseerde GitHub-agentworkflows bereikt.
Die zaak was een van de voorbeelden die Simon Willison aanhaalde bij het benoemen van de dodelijke trifecta: een agent met toegang tot privégegevens, blootstelling aan niet-vertrouwde inhoud en een manier om gegevens te verzenden. Elke agent met alle drie kan met één stukje tekst tegen zijn eigenaar worden aangezet, en de meest bruikbare hebben ze alle drie.
Een Microsoft-woordvoerder bedankte Manifold voor het melden van het gedrag onder gecoördineerde openbaarmaking en noemde het “een bekende klasse van AI-risico’s” die de voortdurende werkzaamheden van het bedrijf op het gebied van zijn veiligheidsmaatregelen informeert. Microsoft heeft niet gezegd of het de code zou wijzigen of een CVE zou toewijzen.
Het merkte op dat de aanval vereist dat een aanvaller al schrijftoegang heeft tot een project en dat een tweede gebruiker een AI-tool over de inhoud moet aanroepen, en adviseerde klanten de toegang tot het project te beperken en “voorgestelde wijzigingen te beoordelen voordat ze een AI-tool vragen om ernaar te handelen.” Het addertje onder het gras is dat de lading hier onzichtbaar is in de interface die een mens beoordeelt.
Vanaf 21 juli is er geen vaste release en heeft The Hacker News geen CVE gevonden die aan de fout is toegeschreven in openbare databases. De nieuwste release, v2.8.0, werd op 24 juni uitgebracht. Geen enkel openbaar rapport plaatst de techniek in gebruik buiten de eigen tests van Manifold.
Manifold testte alleen de lokale, op PAT gebaseerde server, maar vertelde The Hacker News dat de hoofdoorzaak “in de servercode ligt, niet in het transport.” Door die logica zou de gehoste externe MCP-server ook worden blootgesteld, maar Manifold heeft deze niet getest en Microsoft heeft er geen aandacht aan besteed.
Spotlighting legt de lat hoger, maar sluit de snelle injectie niet vanzelf af, dus de verdedigingen zijn de bekende. Geef de agent tokens met de minste rechten en richt deze op het project dat wordt beoordeeld. Laad alleen de MCP-domeinen die de taak nodig heeft; de lokale server verkleint ze met een vlag -d.
Houd pijplijnuitvoeringen, wiki-lezen en het plaatsen van opmerkingen buiten een codebeoordelingstoolset die er geen nut voor heeft. Om te controleren of de keten al is uitgevoerd, kijkt u in de tooltraceringen van de agent naar pijplijnuitvoeringen over meerdere projecten, wiki-reads of opmerkingen die tijdens een beoordeling zijn geplaatst, en scant u open PR-beschrijvingen op verborgen HTML-opmerkingen. Een menselijke recensent die de lading niet kan zien, is geen controleur.
De vangrail werkt alleen als iemand eraan denkt deze toe te voegen. Het omhult niet-vertrouwde inhoud met één antwoordpad tegelijk, zodat de verdediging slechts zo sterk is als het minst bedekte pad, en een ontbrekende wrapper op een enkele functie van buitenaf vrijwel onzichtbaar is. Op een instrumentoppervlak dat steeds groter wordt, ontstaan gaten als deze sneller dan iemand denkt om ze te controleren.