Una vulnerabilità critica nella chat di GitHub Copilot, denominata “CamoLeak”, ha consentito agli aggressori di rubare silenziosamente codice sorgente e segreti da repository privati utilizzando una sofisticata tecnica di prompt injection. Il difetto, che portava un punteggio CVSS di 9,6, è stato poi corretto da GitHub.
Come ha funzionato l’attacco CamoLeak
Il metodo di attacco, scoperto dal ricercatore di sicurezza Omer Mayrazha iniziato nascondendo istruzioni dannose all’interno della descrizione di una richiesta pull utilizzando la funzione “commenti invisibili” di GitHub. Anche se questo contenuto non è visibile agli utenti nell’interfaccia standard, Copilot Chat acquisisce tutto il repository e il contesto delle richieste pull, inclusi questi metadati nascosti, durante la generazione delle risposte. La vulnerabilità è stata attivata quando uno sviluppatore legittimo con accesso a repository privati ha posto a Copilot Chat una domanda sulla richiesta pull compromessa. Copilot, che opera con le autorizzazioni dell’utente che esegue la query, eseguirà quindi il prompt dannoso nascosto. Ciò ha consentito all’aggressore di comandare all’assistente AI di cercare informazioni sensibili, come chiavi API o codice sorgente, all’interno degli archivi privati accessibili della vittima. Per estrarre i dati rubati, l’attacco ha sfruttato il servizio proxy di immagini “Camo” di GitHub. Normalmente, la Content Security Policy (CSP) di GitHub impedisce ai contenuti di divulgare direttamente i dati a domini esterni. Il proxy Camo è progettato per instradare in modo sicuro le richieste di immagini esterne, riscrivendo gli URL in un file camo.githubusercontent.com indirizzo con firma crittografica. L’attacco CamoLeak ha aggirato queste protezioni chiedendo innanzitutto all’aggressore di creare un dizionario di URL Camo prefirmati. Ogni URL valido puntava a un’immagine innocua e invisibile di 1×1 pixel ospitata sul server dell’aggressore, con ogni URL univoco che rappresenta un singolo carattere di dati (ad esempio, “A”, “B”, “1”, “;”). Il prompt inserito ha quindi istruito Copilot a costruire la sua risposta facendo riferimento a questi URL di immagini prefirmati in una sequenza specifica che codificava il contenuto del repository rubato. Quando il browser della vittima ha eseguito il rendering dell’output di Copilot, ha effettuato una serie di richieste tramite il proxy Camo affidabile per recuperare ogni pixel invisibile. La sequenza di queste richieste, così come ricevuta dal server dell’aggressore, ha effettivamente ricostruito i dati rubati carattere per carattere, il tutto senza visualizzare alcun contenuto dannoso all’utente o attivare avvisi di sicurezza di rete standard.





