الأمن السيبراني
فتح Copilot Autofix ثغرة حقن شل في خط أنابيب CI/CD الخاص بـ Snowflake

قامت إصلاح أمان كتبه Copilot Autofix من GitHub وتم دمجه في مستودع Snowflake في 18 يونيو 2026 بإزالة نمط الإدخال المنقّى وترك خط أنابيب CI/CD الخاص بالشركة عرضة لحقن الأوامر، وبعد خمسة أيام، عثر وكيل أبحاث الذكاء الاصطناعي المستقل على الثغرة، استغلها، وسحب بيانات اعتماد Jira صالحة من مُنفّذ GitHub Actions، وقد كشف Wiz Research disclosed on 17 أغسطس 2026.
كانت الثغرة موجودة في jira_issue.yml، وهو سير عمل GitHub Actions في snowflakedb/snowflake-connector-net، المستودع العام لمُوصّل بيانات .NET الخاص بـ Snowflake. كان سير العمل يُطلق كلما فتح أحدهم مشكلة على GitHub ويدمج عنوان المشكلة (نص يتحكم فيه بالكامل مُقدِّم التقرير) مباشرةً في سكريبت شل. وبما أن المشغّل كان issues: opened، فكان أي حساب GitHub على الإنترنت قادرًا على الوصول إليه دون مصادقة.
قامت أداة “Red Agent” من Wiz، وهي أداة أبحاث أمان مستقلة تعمل عبر برنامج مكافآت الأخطاء من HackerOne الخاص بـ Snowflake، بتحديد سير العمل، وبناء استغلال يعمل، واستخراج رمز API الخاص بـ Jira من بيئة المُنفّذ. قامت Snowflake بتصحيح سير العمل في نفس اليوم الذي استلمت فيه التقرير، 23 يونيو 2026، وأعادت تدوير الاعتماد بعد يوم، وأخبرت Wiz أن سجلات التدقيق الخاصة بها أظهرت عدم تفاعل أي فاعل آخر مع الأنظمة المكشوفة خلال نافذة الخمسة أيام.
The “Autofix” Removed the Sanitizer
التزام الذي أدخل نمط الإدخال القابل للحقن وصل عبر PR #1218, “SNOW-2069227: Update jira workflows”، تم دمجه في 18 يونيو 2026. يُظهر تاريخ طلب السحب أن مؤلفًا بشريًا كان يعمل على أتمتة Jira منذ أغسطس 2025 — وفي منتصف العملية، تم إضافة التزام مشارك من قبل Copilot Autofix powered by AI، الروبوت المتقدم للأمان من GitHub الذي يولد إصلاحات مقترحة لتنبيهات فحص الشيفرة.
غيّر الاقتراح الذكي طريقة تعامل سير العمل مع عنوان المشكلة. كان الكود الحالي يمرّر العنوان عبر متغيّر env: ويبني حمولة JSON باستخدام jq --arg، وهو نمط يُبقي النص غير الموثوق بعيدًا عن الشل. الاستبدال المقترح ألغى ذلك لصالح توسيع سلسلة مباشر:
“ run: | TITLE=$(echo '${{ github.event.issue.title }}' | sed 's/"/\"/g' | sed "s/'/\'/g") “
يعمل هروب sed بعد أن استبدل محرك القوالب في GitHub العنوان في السكريبت. علامة اقتباس مفردة في العنوان تخرّج من الغلاف echo '...'، وكل ما يليها يُنفّذ كشل. توثّق documentation for Copilot Autofix الخاص بـ GitHub الميزة بأنها تُولّد “إصلاحًا مقترحًا واحدًا للتنبيه، تقوم بمراجعته وتطبيقه بنفسك” — خطوة المراجعة هي التي سمحت بمرور هذا التغيير.
كان سير العمل يحمل أيضًا شرط حماية يبدو أنه يحدّ من من يمكنه تشغيله:
“ if: (github.event_name == 'issues' && github.event.pull_request.user.login != 'whitesource-for-github-com[bot]') “
في أحداث المشكلة، يكون github.event.pull_request دائمًا null، لذا فإن المقارنة تُقيم دائمًا إلى true. كل مستخدم GitHub مرّ عبر البوابة.
An Agent on Each Side of the Exploit
فشل أول محاولة استخراج للبيانات من قبل Red Agent. استخدم حموله حرف التعليق # لابتلاع باقي السطر المُحقن، لكن التعليق استهلك أيضًا القوس الختامي لـ TITLE=$(...)، وعاد المُنفّذ بخطأ صياغة bash بدلاً من التنفيذ. وفقًا لتقرير Wiz، حلل الوكيل الخطأ، وأعاد كتابة حموله لإغلاق كتلة الشل بـ ; echo '، ثم جرّب مرة أخرى.
كان الحمولة العاملة، التي تم تسليمها كعنوان للمشكلة، تُشفّر المتغيّرات البيئية JIRA_API_TOKEN وJIRA_USER_EMAIL وJIRA_BASE_URL للمُنفّذ باستخدام base64 وأرسلتها إلى مستمع خارجي عبر curl. وصل الاستدعاء العكسي من مُنفّذ GitHub Actions مستضاف على Azure خلال ثوانٍ.
المُعرّف المستعاد تمّ توثيقه كـ [email protected] ضد snowflakecomputing.atlassian.net، مع صلاحية قراءة عبر مشاريع الهندسة، والامتثال الأمني، وتتبع مكافآت الأخطاء في Snowflake.
قامت Snowflake بإصلاح المشكلة، التي دمجت في PR #1402 في 23 يونيو 2026، بإعادة المتغيّر الآمن env: ونمط التحليل jq --arg. تم إلغاء رمز Jira وتدويره في 24 يونيو 2026. صرّحت Wiz بأنها حذفت بأمان جميع البيانات التي تم الوصول إليها خلال اختبار إثبات المفهوم.
“تُقدّر Snowflake تقرير Wiz المسؤول وتعاونها حول هذه النتائج عبر برنامج الإفصاح عن الثغرات ومكافآت الأخطاء، HackerOne”، قال الشركة في بيان نُشر مع تقرير Wiz. “تم استلام الإفصاح في 23 يونيو 2026، وتم التحقيق فيه فورًا وإصلاحه، ولم تُظهر تحقيقاتنا أي دليل على وصول غير مصرح به.”
What the Five-Day Window Shows
يأتي الإفصاح في وسط نمط موثَّق: تغييرات مدعومة بالذكاء الاصطناعي تمر عبر المراجعة أسرع من الافتراضات الأمنية حولها. سجلات التدقيق الخاصة بـ Snowflake هي ما يجعل هذا الحادث قابلًا للقراءة: فهي تسمح للشركة بالتصريح، وتؤكد Wiz، أن نافذة التعرض لم تُنتج وصولًا من طرف ثالث. أكدت تحليلات سجلات التدقيق أن لا أطراف خارجية وصلت إلى النقطة النهائية خلال نافذة الخمسة أيام.
يضغط الخط الزمني أيضًا تسلسلًا اعتبرته الصناعة افتراضيًا. أزال مساعد الترميز نمطًا دفاعيًا تم وضعه خصيصًا لمنع حقن الشل، لأن المساعد لم يكن لديه سجل يوضح سبب وجود هذا النمط. ثم عثر وكيل هجومي على النتيجة وسلاحها خلال أيام، مصحّحًا استغلاله ضد مخرجات الأخطاء الحية. عمل جانب الاستغلال دون وجود إنسان على لوحة المفاتيح؛ وعلى جانب الترميز، أنشأ الذكاء الاصطناعي التغيير لكن إنسانًا طبق الاقتراح ودمجه — وهو بالضبط خطوة المراجعة التي فشلت.
يوصي تقرير Wiz بأن تمر طلبات السحب التي يولدها الذكاء الاصطناعي عبر نفس التحليل الثابت كما هو الحال مع الشيفرة البشرية، وأن تُقصر الفرق مدة صلاحية الاعتمادات لتواكب سرعات الاكتشاف الآلي، وأن تُعيق الحواجز الوكلاء من استبدال المحللات المهيكلة بالتوسيع المباشر للسلاسل. نقلت Check Point moved prompt inspection for AI traffic into enterprise firewalls في صيف هذا العام، وقد غطت Unite.AI covered agent sandbox escapes وagentic systems reaching real production targets مع نضوج الجانب الهجومي. حادثة Snowflake هي نفس القصة تُروى من داخل خط أنابيب CI: كانت الثغرة نشطة لمدة خمسة أيام، والسبب الوحيد لاعتبارها دراسة حالة وليس إشعار اختراق هو أي وكيل وصل أولاً.












