साइबर सुरक्षा
Copilot Autofix ने Snowflake की CI/CD पाइपलाइन में शेल इंजेक्शन खोला

GitHub के Copilot Autofix द्वारा लिखी गई एक सुरक्षा पैच, जो 18 जून 2026 को Snowflake रिपॉजिटरी में मर्ज हुई, एक साफ़ किया गया इनपुट पैटर्न हटा दी और कंपनी की CI/CD पाइपलाइन को कमांड इंजेक्शन के लिए खुला छोड़ दिया, और पाँच दिन बाद, एक स्वायत्त AI रिसर्च एजेंट ने इस छेद को पाया, उसका शोषण किया, और GitHub Actions रनर से कार्यशील Jira क्रेडेंशियल्स निकाले, जैसा कि Wiz Research ने 17 अगस्त 2026 को खुलासा किया।
वulnerability jira_issue.yml में स्थित थी, जो snowflakedb/snowflake-connector-net में एक GitHub Actions वर्कफ़्लो है, जो Snowflake के .NET डेटा कनेक्टर के सार्वजनिक रिपॉजिटरी है। यह वर्कफ़्लो तब चलाया जाता था जब भी कोई GitHub इश्यू खोलता था और इश्यू का शीर्षक (पाठ पूरी तरह से फ़ाइल करने वाले द्वारा नियंत्रित) सीधे शेल स्क्रिप्ट में डाल दिया जाता था। क्योंकि ट्रिगर issues: opened था, इसलिए इंटरनेट पर कोई भी GitHub खाता बिना प्रमाणीकरण के इसे पहुँचा सकता था।
Wiz के “Red Agent,” जो Snowflake के HackerOne बग बाउंटी प्रोग्राम के माध्यम से काम करने वाला एक स्वायत्त सुरक्षा रिसर्च टूल है, ने इस वर्कफ़्लो को फ़्लैग किया, एक कार्यशील एक्सप्लॉइट बनाया, और रनर के पर्यावरण से एक Jira API टोकन निकाल लिया। Snowflake ने रिपोर्ट मिलने के उसी दिन, 23 जून 2026 को वर्कफ़्लो को पैच किया, एक दिन बाद क्रेडेंशियल को बदल दिया, और Wiz को बताया कि उसके ऑडिट लॉग दर्शाते हैं कि पाँच‑दिन की अवधि में कोई अन्य एजेंट उजागर सिस्टम को नहीं छुआ।
“Autofix” ने सैनिटाइज़र को हटा दिया
इंजेक्टेबल पैटर्न प्रस्तुत करने वाला कमिट PR #1218, “SNOW-2069227: Update jira workflows” के माध्यम से आया, जो 18 जून 2026 को मर्ज हुआ। पुल‑रिक्वेस्ट के इतिहास से पता चलता है कि एक मानव लेखक अगस्त 2025 से Jira ऑटोमेशन पर काम कर रहा था — और बीच में, एक कमिट Copilot Autofix powered by AI द्वारा सह‑लेखित था, जो GitHub Advanced Security बॉट है जो कोड स्कैनिंग अलर्ट के लिए सुझाए गए फिक्स जेनरेट करता है।
AI सुझाव ने वर्कफ़्लो द्वारा इश्यू शीर्षक को संभालने के तरीके को बदल दिया। मौजूदा कोड शीर्षक को एक env: वेरिएबल के माध्यम से पास करता था और jq --arg के साथ उसका JSON पेलोड बनाता था, जो अनविश्वसनीय पाठ को शेल से बाहर रखता है। सुझाया गया प्रतिस्थापन सीधे स्ट्रिंग विस्तार की ओर गया:
“ run: | TITLE=$(echo '${{ github.event.issue.title }}' | sed 's/"/\"/g' | sed "s/'/\'/g") “
sed एस्केपिंग GitHub के टेम्पलेट इंजन द्वारा शीर्षक को स्क्रिप्ट में डालने के बाद चलती है। शीर्षक में एक सिंगल कोट echo '...' रैपर को तोड़ देता है, और उसके बाद का सब कुछ शेल के रूप में निष्पादित होता है। GitHub की अपनी Copilot Autofix के लिए दस्तावेज़ीकरण इस फीचर को “एक अलर्ट के लिए एकल सुझाया गया फिक्स, जिसे आप स्वयं समीक्षा करके लागू करते हैं” के रूप में वर्णित करता है — समीक्षा चरण वह था जहाँ यह फिक्स पास हो गया।
वर्कफ़्लो में एक गार्ड कंडीशन भी था जो ऐसा दिखता था कि यह निर्धारित करता है कि कौन इसे ट्रिगर कर सकता है:
“ if: (github.event_name == 'issues' && github.event.pull_request.user.login != 'whitesource-for-github-com[bot]') “
इश्यू इवेंट्स पर, github.event.pull_request हमेशा null रहता है, इसलिए तुलना हमेशा true होती है। सभी GitHub उपयोगकर्ता इस गेट को पार कर जाते हैं।
एक्सप्लॉइट के दोनों पक्षों पर एक एजेंट
Red Agent का पहला डेटा निकासी प्रयास विफल रहा। उसका पेलोड एक # टिप्पणी अक्षर का उपयोग करके इंजेक्टेड लाइन के शेष भाग को खा लेता था, लेकिन टिप्पणी ने TITLE=$(...) की बंद करने वाली कोष्ठक भी खा ली, और रनर ने निष्पादन के बजाय एक bash सिंटैक्स त्रुटि लौटाई। Wiz की रिपोर्ट के अनुसार, एजेंट ने त्रुटि का विश्लेषण किया, अपना पेलोड पुनः लिखा ताकि शेल ब्लॉक को ; echo ' से बंद किया, और फिर से प्रयास किया।
कार्यशील पेलोड, जो इश्यू शीर्षक के रूप में दिया गया, रनर के JIRA_API_TOKEN, JIRA_USER_EMAIL, और JIRA_BASE_URL पर्यावरण वेरिएबल्स को base64 एन्कोड करके उन्हें curl के माध्यम से एक आउट‑ऑफ़‑बैंड लिस्नर को भेजता है। कॉलबैक कुछ सेकंड में Azure‑होस्टेड GitHub Actions रनर से आया।
प्राप्त टोकन ने qa@snowflake.net के रूप में snowflakecomputing.atlassian.net पर प्रमाणीकरण किया, और Snowflake की इंजीनियरिंग, सुरक्षा अनुपालन, और बग बाउंटी ट्रैकिंग प्रोजेक्ट्स में पढ़ने की पहुंच प्रदान की।
Snowflake की सुधार कार्य, जो PR #1402 में 23 जून 2026 को मर्ज हुआ, सुरक्षित env: वेरिएबल और jq --arg पार्सिंग पैटर्न को पुनर्स्थापित किया। Jira टोकन को 24 जून 2026 को रद्द और बदल दिया गया। Wiz ने कहा कि उसने अपने प्रूफ़‑ऑफ़‑कॉनसेप्ट परीक्षण के दौरान एक्सेस किए गए सभी डेटा को सुरक्षित रूप से हटा दिया।
“Snowflake Wiz की जिम्मेदार रिपोर्टिंग और इन खोजों के आसपास सहयोग की सराहना करता है, जो हमारे वल्नरेबिलिटी डिस्क्लोज़र और बग बाउंटी प्रोग्राम, HackerOne के माध्यम से किया गया,” कंपनी ने Wiz रिपोर्ट के साथ प्रकाशित बयान में कहा। “यह खुलासा 23 जून 2026 को प्राप्त हुआ, और इसे तुरंत जांचा और सुधारा गया, और हमारी जांच ने अनधिकृत पहुंच का कोई प्रमाण नहीं पाया।”
पाँच‑दिन की विंडो क्या दर्शाती है
यह खुलासा एक प्रलेखित पैटर्न के मध्य में आता है: AI‑सहायता वाले बदलाव समीक्षा से तेज़ी से गुजरते हैं, जबकि उनके आसपास की सुरक्षा धारणाएँ धीमी रहती हैं। Snowflake के अपने ऑडिट लॉग ही इस घटना को स्पष्ट बनाते हैं: वे कंपनी को यह बताने देते हैं, और Wiz को पुष्टि करने देते हैं, कि उजागर अवधि में कोई तृतीय‑पक्ष पहुंच नहीं हुई। Snowflake के ऑडिट लॉग विश्लेषण ने पुष्टि की कि पाँच‑दिन की विंडो के दौरान कोई बाहरी तृतीय‑पक्ष एंडपॉइंट तक नहीं पहुँचा।
समय‑रेखा एक ऐसी श्रृंखला को भी संक्षिप्त करती है जिसे उद्योग ने काल्पनिक माना है। एक कोडिंग सहायक ने एक रक्षा पैटर्न को हटा दिया जो विशेष रूप से शेल इंजेक्शन रोकने के लिए स्थापित किया गया था, क्योंकि सहायक के पास यह रिकॉर्ड नहीं था कि वह पैटर्न क्यों मौजूद था। फिर एक आक्रामक एजेंट ने परिणाम को कुछ दिनों में खोजा और हथियारबंद किया, लाइव एरर आउटपुट के खिलाफ अपने एक्सप्लॉइट को स्वयं‑सुधार किया। एक्सप्लॉइट पक्ष बिना कीबोर्ड पर मानव के चलाया गया; कोडिंग पक्ष में, AI ने परिवर्तन जेनरेट किया लेकिन एक मानव ने सुझाव लागू किया और मर्ज किया — जो ठीक वही समीक्षा चरण था जो विफल हुआ।
Wiz की रिपोर्ट सुझाव देती है कि AI‑जनित पुल‑रिक्वेस्ट को मानव कोड की तरह ही स्थिर विश्लेषण से गुजरना चाहिए, टीमों को प्रमाणपत्र की आयु को स्वचालित खोज गति के अनुरूप कम करना चाहिए, और गार्डरेल्स को एजेंटों को संरचित पार्सर को सीधे स्ट्रिंग इंटरपोलेशन से बदलने से रोकना चाहिए। Check Point ने AI ट्रैफ़िक के लिए प्रॉम्प्ट निरीक्षण को एंटरप्राइज़ फ़ायरवॉल में स्थानांतरित किया इस गर्मी में, और Unite.AI ने एजेंट सैंडबॉक्स एस्केप को कवर किया और एजेंटिक सिस्टम्स के वास्तविक उत्पादन लक्ष्यों तक पहुँचने को जैसे ही आक्रामक पक्ष परिपक्व होता है। Snowflake घटना वही कहानी है जो CI पाइपलाइन के भीतर से बताई गई है: यह भेद्यता पाँच दिन तक सक्रिय रही, और यह केस स्टडी के रूप में पढ़ी जाती है न कि ब्रीच नोटिफिकेशन के रूप में, केवल इसलिए कि कौन सा एजेंट पहले पहुँचा।












