Door een kritieke kwetsbaarheid in GitHub Copilot Chat, genaamd “CamoLeak”, konden aanvallers in stilte de broncode en geheimen uit privéopslagplaatsen stelen met behulp van een geavanceerde prompt-injectietechniek. De fout, die een CVSS-score van 9,6 had, is inmiddels verholpen door GitHub.
Hoe de CamoLeak-aanval werkte
De aanvalsmethode, ontdekt door beveiligingsonderzoeker Omer Mayrazbegon met het verbergen van kwaadaardige instructies in een pull-requestbeschrijving met behulp van GitHub’s “onzichtbare commentaar” -functie. Hoewel deze inhoud niet zichtbaar is voor gebruikers in de standaardinterface, neemt Copilot Chat alle repository- en pull-request-context op, inclusief deze verborgen metadata, bij het genereren van antwoorden. Het beveiligingslek werd geactiveerd toen een legitieme ontwikkelaar met toegang tot privérepository’s Copilot Chat een vraag stelde over het gecompromitteerde pull-verzoek. Copilot, die werkt met de machtigingen van de vragende gebruiker, zou dan de verborgen kwaadaardige prompt uitvoeren. Hierdoor kon de aanvaller de AI-assistent opdracht geven om te zoeken naar gevoelige informatie, zoals API-sleutels of broncode, in de toegankelijke privéopslagplaatsen van het slachtoffer. Om de gestolen gegevens te exfiltreren, werd bij de aanval gebruik gemaakt van GitHub’s eigen ‘Camo’-beeldproxyservice. Normaal gesproken voorkomt het Content Security Policy (CSP) van GitHub dat inhoud rechtstreeks gegevens naar externe domeinen lekt. De Camo-proxy is ontworpen om externe beeldverzoeken veilig te routeren en URL’s te herschrijven naar een camo.githubusercontent.com adres met een cryptografische handtekening. De CamoLeak-aanval omzeilde deze beveiligingen door de aanvaller eerst een woordenboek met vooraf ondertekende Camo-URL’s te laten maken. Elke geldige URL verwijst naar een goedaardige, onzichtbare afbeelding van 1×1 pixels die wordt gehost op de server van de aanvaller, waarbij elke unieke URL één teken aan gegevens vertegenwoordigt (bijvoorbeeld ‘A’, ‘B’, ‘1’, ‘;’). De geïnjecteerde prompt instrueerde Copilot vervolgens om zijn antwoord te construeren door naar deze vooraf ondertekende afbeeldings-URL’s te verwijzen in een specifieke volgorde die de gestolen repository-inhoud codeerde. Toen de browser van het slachtoffer de uitvoer van Copilot weergaf, deed hij een reeks verzoeken via de vertrouwde Camo-proxy om elke onzichtbare pixel op te halen. De volgorde van deze verzoeken, zoals ontvangen door de server van de aanvaller, reconstrueerde de gestolen gegevens effectief karakter voor karakter, allemaal zonder enige kwaadaardige inhoud aan de gebruiker weer te geven of standaard netwerkbeveiligingswaarschuwingen te activeren.





