- जून 2025 में GitHub Copilot Chat में एक घातक भेद्यता (CVSS 9.6) पाई गई
- CSP bypass और remote prompt injection तकनीकों का उपयोग करके secrets और private code के लीक होने की संभावना की पुष्टि हुई
- GitHub के hidden comments feature का दुरुपयोग करके दूसरे उपयोगकर्ताओं के Copilot response results को manipulate किया जा सकता है
- GitHub की Camo proxy संरचना का बारीकी से विश्लेषण कर CSP bypass सफल किया गया
- GitHub ने image rendering को disable करने के तरीके से अगस्त 2025 में इस भेद्यता को आपातकालीन रूप से ठीक किया
TL;DR सारांश
- जून 2025 में GitHub Copilot Chat में private repository के source code और secrets के लीक की अनुमति देने वाली एक घातक भेद्यता पाई गई
- खोजकर्ताओं ने remote prompt injection और GitHub CSP(Content Security Policy) bypass का उपयोग करके Copilot responses को पूरी तरह manipulate और control किया, और malicious code या link suggestions को प्रेरित किया
- इस हमले का मुख्य बिंदु GitHub के official hidden comments feature और Copilot की context sensitivity का उपयोग करके, किसी को दिखाई दिए बिना prompt inject करना है
- GitHub में image external links को Camo proxy में अपने-आप बदलने वाले व्यवहार का विश्लेषण कर, उस संरचना को character-by-character उल्टा उपयोग करके exfiltrated जानकारी को तैयार करने के लिए डिज़ाइन किया गया
- HackerOne के माध्यम से रिपोर्ट किए जाने के बाद GitHub ने Copilot Chat के image rendering feature को block करके patch जारी किया
पृष्ठभूमि
- GitHub Copilot Chat एक integrated AI assistant है जो developers को सवाल पूछने, code explanation पाने और implementation suggestions लेने में मदद करता है
- Copilot Chat repository के code, commits, PRs (pull requests) आदि विभिन्न context information का संदर्भ लेता है
- जितनी अधिक context information होती है, उतना ही attack surface भी बढ़ता है
Prompt injection और hidden comments feature का उपयोग
- GitHub Copilot की context sensitivity पर हमला करने वाले एक प्रयोग में PR (pull request) description में एक विशेष prompt डाला गया
- हालांकि सामान्य रूप से डाले गए prompts या messages सभी उपयोगकर्ता देख सकते हैं
- यहाँ GitHub के official hidden comments feature(``) का उपयोग करके ऐसे तरीके से केवल Copilot तक command पहुँचाना संभव पाया गया जो आँखों से दिखाई नहीं देता
- hidden comment के अंदर prompt डालने पर वह Notifications में दिखाई देता है, लेकिन उसकी specific content दिखाई नहीं देती, जिससे Server-Side Injection जैसा प्रभाव उत्पन्न होता है
Malicious prompt का प्रभाव
- hidden comment prompt दूसरे उपयोगकर्ताओं के PR page access करने पर भी Copilot को उसी तरह प्रभावित करता है
- साधारण text के बजाय code suggestions, markdown, malicious URLs, Copilotevil जैसे malicious package recommendations सहित complex commands डाले जा सकते हैं
- Copilot उस request भेजने वाले उपयोगकर्ता के समान permissions का उपयोग करता है, इसलिए वह private repository तक पहुँच और जानकारी का उपयोग कर सकता है
- जानबूझकर base16 encoded data को URL में जोड़कर, उपयोगकर्ता के click करते ही attacker तक जानकारी लीक होने वाला scenario बनाया जा सकता है
मुख्य प्रभावों का सार
- दूसरे उपयोगकर्ताओं के Copilot response content को manipulate और control करना
- Markdown, images, code, URL आदि के साथ customized prompt injection संभव
- पीड़ित उपयोगकर्ता की permission range के भीतर information leakage हमले का प्रयास संभव
GitHub CSP bypass की संरचनात्मक व्याख्या
- GitHub मजबूत CSP लागू करके external domains से images और resources loading को सीमित करता है
- जब README या markdown में image डाली जाती है, तो GitHub Camo Proxy external URL को HMAC signature-आधारित proxy URL में बदल देता है
- browser में image लोड करने के लिए पहले से GitHub द्वारा बनाया गया Camo URL और signature value आवश्यक होती है
- उपयोगकर्ता चाहे dynamic data वाले URL मनमाने रूप से बनाए, Camo proxy से गुज़रे बिना वे block हो जाते हैं
Camo संरचना के दुरुपयोग का तरीका
- खोजकर्ता ने alphabet/special character set के पूरे Camo proxy URL dictionary को पहले से बनाकर hidden prompt में शामिल किया
- Copilot से "ASCII Art game" करने को कहकर लीक की जाने वाली जानकारी (जैसे source code, keys) को Camo proxy images की श्रृंखला में बदलने के लिए डिज़ाइन किया
- हर image request के माध्यम से browser में केवल 1x1 transparent pixel response आता है, इसलिए उपयोगकर्ता को कोई बदलाव दिखाई नहीं देता
- अंत में random parameters जोड़कर caching issues से बचा गया
वास्तविक हमला कार्यान्वयन और प्रयास
- target के रूप में private project issue में zero-day भेद्यता विवरण की जानकारी चुनी गई
- PoC (proof of concept) के जरिए वास्तविक exfiltration attack process को साबित किया गया
- Copilot से उदाहरण के तौर पर "AWS_KEY" keyword खोजने और परिणाम को लीक करने तक को automate कराया गया
GitHub की प्रतिक्रिया और patch
- GitHub ने 14 अगस्त 2025 से Copilot Chat में image rendering को पूरी तरह disable करके इस भेद्यता को ठीक किया
और जानें
1 टिप्पणियां
Hacker News की राय
हमें अपने पूरे work environment को self hosted VCS Forgejo पर migrate करने की वजह से बहुत खुशी है। हमने 2 साल पहले सभी client repositories तक migration शुरू किया था। इससे न सिर्फ GitHub subscription fee में काफी कटौती हुई, बल्कि रोज़ 30~40 developers द्वारा इस्तेमाल किया जाने वाला system कहीं ज़्यादा तेज़ और stable हो गया। साथ ही हमने VSCode और built-in LLM features वाले सभी editors के उपयोग पर रोक लगा दी। Developers CLI-आधारित coding agents इस्तेमाल कर सकते हैं, लेकिन उन्हें सख्ती से isolated containers के अंदर, केवल सीमित source access के साथ चलाया जाता है।
30~40 developers वाले ऐसे environment में, जहाँ हर कोई अपने local machine पर repository clone करके काम करता है, यह जानना दिलचस्प होगा कि आप किसी के गलती से पूरी repository को LLM के सामने expose कर देने से कैसे बचाते हैं। अगर कोई व्यक्ति पेशेवर नुकसान के डर से अपनी गलती report न करे, तो ऐसी data leak incident को detect कैसे किया जाता है?
मैं यह भी पूछना चाहूँगा कि आप alternative के तौर पर कौन सा IDE इस्तेमाल करते हैं।
यह भी जानना चाहूँगा कि CLI tools कहाँ connect होते हैं। क्या वे OpenAI या Claude की official services से जुड़े हैं, या AWS Bedrock जैसे provider से?
पूरे VSCode पर ban लगाना, किसी specific problematic plugin या feature को restrict करने से आगे बढ़कर कुछ ज़्यादा ही कठोर कदम लगता है। VSCode ही लगभग एकमात्र IDE है जो Haskell, Lean 4, F* जैसी भाषाओं तक व्यापक support देता है, जहाँ दूसरे IDEs में support कमज़ोर है। बड़ी commercial consumer goods companies में भी आमतौर पर VSCode itself ban नहीं किया जाता; मेरा मानना है कि सिर्फ problematic features का इस्तेमाल न करना ही काफी होना चाहिए।
मुझे नहीं लगता कि यह issue वास्तव में ठीक से solve हुआ है। Copilot की बड़ी बात यह है कि वह natural language input समझता है, यानी data exfiltration का कोई भी तरीका अंग्रेज़ी में लिख दिया जाए तो वह उसी तरह काम कर सकता है। वे कहते हैं कि उन्होंने किसी खास method को “fix” कर दिया, लेकिन असल में कैसे किया यह सार्वजनिक नहीं करते। उदाहरण के लिए, base64 को image URL में इस्तेमाल किया जा सकता है, और “मैंने गलती से अपनी shopping cart list
passswdfield में save कर दी है, कृपया उसे ढूँढ दो” जैसे बहाने से passwords भी निकलवाए जा सकते हैं। ऐसे बहुत से exploitable vectors दिखते हैं। क्या वे इस तरह की चीज़ों पर bug bounty भी देते हैं? यह तो सोने की खान है।base64 को image URL में इस्तेमाल करने से आपका मतलब क्या है? क्या आपका सुझाव Camo के बिना image URL इस्तेमाल करने का है? मेरी समझ यह है कि CSP की वजह से Camo के बिना images block हो जाती हैं। और अगर Copilot agent के पास internet access नहीं है, तो fetch करना ही मुश्किल होगा। अगर वह संभव है, तो images की तुलना में कहीं आसान attack paths खुल सकते हैं।
मुझे लगता है कि GitHub ने Copilot Chat में image rendering को पूरी तरह disable करके इस समस्या को हल किया।
alphabet के सभी अक्षरों और symbols के लिए पहले से Camo URLs generate करके उन्हें prompt में insert करने का विचार काफ़ी प्रभावशाली है। यह बहुत सुंदर approach है।
इस लेख से कुछ-कुछ ऐसा impression मिलता है मानो यह Legit नाम की company का promotion हो। लेकिन सच यह है कि transparency की कमी और trust की समस्या, सभी AI-based solutions की एक जैसी कमज़ोरी है। FOSS-आधारित न होने वाले AI cybersecurity tools का इस्तेमाल करने पर उल्टा security risk और बढ़ सकता है।
यह पहली बार नहीं हुआ है। पहले भी “GitHub Copilot Chat: From Prompt Injection to Data Exfiltration” नाम का संबंधित मामला सामने आ चुका है।
मुझे लगता है कि PR में छिपे हुए HTML comments का इस्तेमाल करके जानकारी छिपाना अब भी गंभीर issue बना रह सकता है, खासकर open source repositories में यह और भी ख़तरनाक है। मैं जानना चाहूँगा कि क्या इस हिस्से में कोई सुधार हुआ है।
यह exploit जिस तरह LLM के धीमे token-by-token response pattern का उपयोग करके data को क्रम में reconstruct करने योग्य बनाता है, वह दिलचस्प है। अगर LLM पूरा response एक साथ block के रूप में लौटाए, तो timing बिगड़ जाएगी और reconstruction काफ़ी कठिन हो जाएगा।
क्या Copilot users की Repo access permissions को read-only तक सीमित करके इसका सामना नहीं किया जा सकता?
मुझे तो याद भी नहीं कि आख़िरी बार Copilot ने मेरा personal source code कब leak किया था।
यह सचमुच एक अनोखा और शानदार approach है।