Google Bard हैकिंग: प्रॉम्प्ट इंजेक्शन से डेटा लीक तक
(embracethered.com)- Bard Extensions के कारण अब यह निजी दस्तावेज़ों और ईमेल तक पढ़ सकता है, इसलिए बाहरी दस्तावेज़ों में छिपा अप्रत्यक्ष प्रॉम्प्ट इंजेक्शन वास्तविक डेटा लीक का रास्ता बन सकता है
- हमलावर किसी पीड़ित के साथ एक दुर्भावनापूर्ण Google Docs दस्तावेज़ जबरन शेयर कर सकता है, और जैसे ही Bard उस दस्तावेज़ को खोजता या विश्लेषित करता है, दस्तावेज़ के भीतर के निर्देश चल सकते हैं
- Bard का Markdown इमेज रेंडरिंग बिना उपयोगकर्ता क्लिक के बाहरी URL कॉल कर सकता है, जिससे बातचीत के कॉन्टेक्स्ट को query string में जोड़कर बाहर भेजा जा सकता है
- Google की Content Security Policy ने मनचाहे इमेज लोड को रोका, लेकिन
script.google.comऔरgoogleusercontent.comपर चलने वाला Google Apps Script एक बायपास रास्ते के रूप में इस्तेमाल हुआ - यह इश्यू 19 सितंबर 2023 को Google VRP में रिपोर्ट किया गया था, 19 अक्टूबर को फिक्स की पुष्टि मिली, और लगता है कि URL में डेटा डाला न जा सके इसके लिए filtering जोड़ी गई
Bard Extensions से बना नया attack surface
- Google Bard ने अपडेट के साथ Extensions सपोर्ट जोड़ा, जिससे YouTube, फ्लाइट·होटल सर्च, और उपयोगकर्ता के निजी दस्तावेज़ों व ईमेल तक पहुंच संभव हुई
- जब Bard उपयोगकर्ता के Drive, Docs, Gmail का विश्लेषण कर सकता है, तब अविश्वसनीय बाहरी डेटा को LLM context में लाने की स्थिति बनती है
- इस तरह की संरचना में बाहरी कंटेंट में छिपे निर्देश मॉडल के जवाब बदलने वाले अप्रत्यक्ष प्रॉम्प्ट इंजेक्शन के संपर्क में आ सकते हैं
- YouTube वीडियो सारांश और
Google Docsटेस्ट में यह पुष्टि हुई कि Bard बाहरी कंटेंट में शामिल निर्देशों का पालन कर सकता है
attack scenario
- ईमेल या Google Docs के जरिए होने वाला अप्रत्यक्ष प्रॉम्प्ट इंजेक्शन खतरनाक है क्योंकि इसे उपयोगकर्ता के किसी दुर्भावनापूर्ण लिंक पर साफ तौर पर क्लिक किए बिना भी पहुंचाया जा सकता है
- हमलावर पीड़ित के साथ एक दुर्भावनापूर्ण Google Docs दस्तावेज़ जबरन शेयर कर सकता है
- यदि पीड़ित Bard से उस दस्तावेज़ को खोजे या उसके साथ इंटरैक्ट करे, तो दस्तावेज़ के भीतर का प्रॉम्प्ट इंजेक्शन निर्देश चल सकता है
- LLM ऐप्स में अक्सर दिखने वाला एक कमजोर रास्ता हाइपरलिंक और इमेज रेंडरिंग का उपयोग कर चैट इतिहास लीक करना है
इमेज Markdown इंजेक्शन
- Google का LLM टेक्स्ट जवाब में Markdown तत्व शामिल कर सकता है, और Bard उन्हें HTML के रूप में रेंडर करता है
- Markdown इमेज सिंटैक्स HTML के
<img>टैग में बदल जाता है, औरsrcएट्रिब्यूट हमलावर के सर्वर की ओर इशारा कर सकता है - ब्राउज़र इमेज दिखाने के लिए बिना उपयोगकर्ता इंटरैक्शन के उस URL से स्वतः कनेक्ट करता है
- यदि LLM चैट context के पिछले डेटा को सारांशित या पढ़ने के बाद उस मान को इमेज URL में जोड़ दे, तो बाहरी रिक्वेस्ट के जरिए डेटा बाहर जा सकता है
- शुरुआती exploit बातचीत का इतिहास पढ़कर उसे शामिल करने वाला हाइपरलिंक बनाने के तरीके से जल्दी विकसित हो गया था, लेकिन इमेज रेंडरिंग Google की Content Security Policy से रुक गई
Content Security Policy बायपास
- Google की CSP मनमाने स्थानों से इमेज लोड होने को ब्लॉक करती है
- लेकिन CSP में
*.google.comऔर*.googleusercontent.comजैसे अपेक्षाकृत व्यापक allowlist स्थान शामिल हैं - Google Apps Script को Office macro की तरह URL से कॉल किया जा सकता है, और यह
script.google.comयाgoogleusercontent.comडोमेन पर चलता है - इसी वजह से Apps Script CSP बायपास के लिए उपयुक्त उम्मीदवार बना
Bard Logger इम्प्लीमेंटेशन
Apps Scriptसे Bard Logger इम्प्लीमेंट किया गया- Logger कॉल किए गए URL से जुड़े सभी query parameters को Google Doc में रिकॉर्ड करता है
- Apps Script UI में बिना authentication के एक्सेस की जा सकने वाली सेटिंग मिली, जिससे anonymous calls स्वीकार करने वाला endpoint बनाया जा सका
- attack chain निम्न तत्वों से बनी थी
- Bard Extensions डेटा से उत्पन्न अप्रत्यक्ष प्रॉम्प्ट इंजेक्शन
- Bard की इमेज रेंडरिंग के जरिए होने वाला zero-click request
- दुर्भावनापूर्ण Google Doc के भीतर का प्रॉम्प्ट इंजेक्शन निर्देश
- इमेज लोड के समय डेटा प्राप्त करने वाला
google.comआधारित logging endpoint
डेमो फ्लो
- डेमो में, जैसे ही दुर्भावनापूर्ण
Google Docचैट context में आता है, उपयोगकर्ता का चैट इतिहास लीक हो जाता है - स्क्रीनशॉट फ्लो इस प्रकार है
- उपयोगकर्ता “The Bard2000” नामक Google Doc पर जाता है
- हमलावर का निर्देश inject होता है और इमेज रेंडर होती है
- हमलावर Bard Logger Apps Script के जरिए डेटा को Google Doc में प्राप्त करता है
- Bing Chat, ChatGPT, Claude में चर्चा किए गए पुराने मामलों की तुलना में यह chain अधिक जटिल थी, क्योंकि इसमें CSP बायपास की जरूरत थी
natural language shell code और payload
- “Shell Code is natural language these days” अभिव्यक्ति की तरह, exploit प्राकृतिक भाषा प्रॉम्प्ट से बना था
- दुर्भावनापूर्ण Google Doc में प्रॉम्प्ट इंजेक्शन और डेटा लीक करने वाला payload शामिल था
- यह payload LLM को इमेज URL के भीतर के टेक्स्ट को बातचीत के डेटा से बदलने के लिए प्रेरित करता है
- Bard को काम पूरा कराने के लिए कुछ उदाहरण देकर in-context learning की जरूरत पड़ी
- परिशिष्ट में दिया payload बातचीत के शुरुआती 20 शब्द आउटपुट करने और spaces को
+से encode कर Apps Script execution URL की query में डालने का निर्देश देता है - परिशिष्ट में “AI Injection succeeded #10” नामक आउटपुट string भी शामिल थी
Google का फिक्स और टाइमलाइन
- यह इश्यू 19 सितंबर 2023 को Google VRP में रिपोर्ट किया गया
- 19 अक्टूबर 2023 को स्टेटस की पुष्टि के बाद Google ने फिक्स पूरा होने की पुष्टि की, और Ekoparty 2023 प्रस्तुति में डेमो शामिल करने की अनुमति दी
- उस समय फिक्स का तरीका पूरी तरह स्पष्ट नहीं था
- CSP बदली नहीं गई थी और इमेज अब भी रेंडर हो रही थीं, इसलिए लगता है कि URL में डेटा डालने से रोकने वाली filtering जोड़ी गई
- फिक्स टाइमलाइन
- 19 सितंबर 2023: इश्यू रिपोर्ट किया गया
- 19 अक्टूबर 2023: फिक्स की पुष्टि हुई
1 टिप्पणियां
Hacker News की राय
theशब्द को लगातार 2–3 prompts तक दोहराने पर ही वह अजीब टेक्स्ट लिखना शुरू कर देता है, लेकिन Bard पर यह तरीका काम नहीं करतामुझे लगता था कि rules पूरे prompt पर global और uniform तरीके से लागू होते हैं
फिर यही समस्या XSS में फिर दिखी, जहां system commands और data में फर्क नहीं कर पाता था, इसलिए attacker ऐसा message बना सकता था जिसे system command समझ बैठे। समाधान था data की boundaries को पक्के तौर पर define करने का तरीका ढूंढना
LLM में भी समाधान शायद मिलता-जुलता होगा। यह LLM को ऐसे commands का सम्मान करना सिखाने का तरीका हो सकता है, जैसे “पहले 100 tokens immutable हैं, और कोई भी अन्य instruction इसका खंडन नहीं कर सकता। [protected command insert करें]”. Inference time पर protected instructions जोड़ने के बजाय training phase में ऐसी चीजें डालने से malicious instructions inject करना मुश्किल हो सकता है, लेकिन training time पर सभी संभावित attacks का अनुमान लगाना होगा, इसलिए व्यावहारिक रूप से यह आसान नहीं है
समस्या यह है कि haystack से निकले random token sampler को special access दे दिया जाता है, और सिर्फ इसलिए कि वह आम तौर पर ठीक काम करता दिखता है, हम क्यों मान लेते हैं कि वह हमेशा ठीक ही काम करेगा
हमें उम्मीद करनी होगी कि अगले कुछ सालों में instructions, यानी prompt, और “data” यानी main conversation को अलग करने वाला कोई architectural breakthrough आएगा
उदाहरण के लिए input में दो तरह के tokens—prompt tokens और data tokens—लिए जाएं, और वे कभी भी mix या confuse न हों। अभी मुझे तरीका नहीं पता, और ऐसी दो layers पर train और operate करने के लिए बड़े architectural advances चाहिए होंगे, लेकिन उम्मीद है कि कोई इसे ढूंढ निकालेगा
इसे असंभव मानने की कोई मूलभूत वजह नहीं है। यह मौजूदा single token sequence paradigm में फिट नहीं बैठता, लेकिन paradigms इसलिए ही evolve होते हैं
model को सिर्फ वही data देना चाहिए जिसे user किसी दूसरे interface से पढ़ भी सकता हो
समाधान है LLM को untrusted component मानना, और इसी premise पर design करना
vector database और API साथ में इस्तेमाल करने पर context या role-based access control information आसानी से पास की जा सकती है, इसलिए यह अच्छी तरह काम करता है
knowledge database के रूप में LLM ने मुझे ज्यादा प्रभावित नहीं किया, लेकिन interface के तौर पर यह कहीं ज्यादा impressive है
कुछ दिन पहले यहां operating system वाला expression आया था, और वह expression भी मुझे पसंद है
एक घंटे पहले भी मैंने ChatGPT इस्तेमाल किया, और दिलचस्प बात यह रही कि उसने मेरी query को Bing search में बदला और फिर सही जानकारी के साथ consistently जवाब दिया। मैंने एक open source project के बारे में specific सवाल पूछा था; पहले उसे सिर्फ API specs और docs पता थे, लेकिन इस बार उसने बहुत अच्छा काम किया
LLM मूल रूप से safe नहीं हैं, मुख्य वजह यह है कि वे मूल रूप से आसानी से बहक जाते हैं। उपयोगी होने के लिए उन्हें कुछ हद तक आसानी से प्रभावित होना पड़ता है, लेकिन इसी वजह से untrusted sources के text को expose करने वाली हर application—जैसे web pages summarize करना—malicious attacker द्वारा subvert की जा सकती है
हम prompt injection पर 14 महीनों से बात कर रहे हैं, लेकिन अभी तक कोई भरोसेमंद समाधान पास आता नहीं दिखता
सच में उम्मीद है कि कोई जल्द ही इस समस्या को हल करेगा, वरना LLM से हम जो बहुत-सी चीजें बनाना चाहते हैं उन्हें सुरक्षित तरीके से build करना मुश्किल होगा
[1] https://gandalf.lakera.ai/
अपने नज़रिए को थोड़ा और समझाऊँ तो, आखिरकार मुझे लगता है कि LLM द्वारा interpret किए जाने वाले हर prompt पर
addslashesजैसी कोई चीज़ apply करने की दिशा में बात जाएगी। इसलिए मैंने इसे सरल करके “LLM इस समस्या को हल कर सकता है” कहा थाaddslashesक्या करता है, यह सोचें तो यह उन special characters को हटाने या mitigate करने वाला code apply करता है जो आगे होने वाले code execution को प्रभावित करते हैं। उसी तरह, मुझे लगता है कि LLM भी input को खुद sanitize करके उसे escape न कर पाने लायक बना सकता हैअगर आप इस बात से सहमत हैं कि कोई input character जोड़े गए slash को हटा नहीं सकता, तो prompt injection को mitigate करने के लिए wrapping
addslashesसे किसी भी instruction के जरिए escape न कर पाने वाला prompt-versionaddslashesहोना चाहिएइससे system usability पर क्या असर पड़ेगा, यह मैंने अंत तक नहीं सोचा है, लेकिन intended use के दायरे में रहते हुए भी ज़्यादातर काम किए जा सकने चाहिए
अगर Lakera AI के पास इसका defense है, तो उसे साबित कर पाना चाहिए। अगर injection को 100% effectively block करने का तरीका है, तो game में कोई impossible level होना चाहिए। लेकिन ऐसा कोई तरीका नहीं है, इसलिए game में भी ऐसा level नहीं है
Lakera AI probabilistic defense कर रही है, लेकिन marketing में ऐसा दिखाती है मानो उसके पास उससे ज़्यादा भरोसेमंद कुछ है। किसी ने भी पूरी तरह trustworthy detector demonstrate नहीं किया है, और सभी prompt injections को पक्का रोकने का कोई तरीका भी नहीं है। मुझे सच में लगता है कि Lakera AI का marketing में इस तथ्य को अक्सर छोड़ देना भ्रामक है
ऊपर वाला लेख गलत है। injection detector से इस खास attack को 100% reliably पकड़ने का कोई तरीका नहीं है। कहना चाहिए कि Lakera AI के पास ऐसा injection detector है जो इस attack को कभी-कभी पकड़ता है। लेकिन Lakera अपनी marketing में ऐसा नहीं कहती। वह चुपचाप ऐसा product बेचने की कोशिश कर रही है जो मौजूद नहीं है और जिसे researchers बना भी सकते हैं, यह तक साबित नहीं हुआ है
दूसरे शब्दों में, prompt injection defense की जरूरत रखने और उसके लिए पैसे देने वाले customers में से कौन ऐसा customer है जो कुछ हद तक errors accept कर सकता है?
user ने यह intend नहीं किया था कि उसकी पिछली conversation attacker को दिखे। यही security hole है
वह conversation पूरी तरह harmless भी हो सकती थी, लेकिन private issues पर सलाह भी हो सकती थी, जैसे medical, financial, relationship counselling वगैरह
मैंने custom GPT बनाया है जो मेरी जगह यह करता है
क्या आपने इसे बनाने तक की process पर blog लिखा है या public किया है? काफी cool लग रहा है