---
title: "اختراق Nx على npm: ما فعله على Mac الخاص بمطور، وما كان Kilobat سيعرضه"
url: "https://kilobat.app/ar/incidents/nx-s1ngularity"
description: "كيف استخدمت إصدارات Nx الخبيثة في أغسطس 2025 أدوات الذكاء الاصطناعي المثبتة للعثور على الأسرار ورفعها إلى GitHub، وما كان Kilobat سيرصده وما لم يكن ليرصده."
---

حادثة · اختراق حزمة npm

# اختراق Nx على npm: ما فعله على Mac الخاص بمطور، وما كان Kilobat سيعرضه

لنحو خمس ساعات يومي 26 و27 أغسطس 2025، حملت ثمانية إصدارات من نظام البناء Nx على npm نصًا برمجيًا يعمل بعد التثبيت، يبحث عن أسرار على أجهزة المطورين ويستعين بأدوات البرمجة بالذكاء الاصطناعي التي يجدها، ثم ينشر ما جمعه في مستودع عام جديد بحساب الضحية نفسه على GitHub.

الوقت: 26–27 أغسطس 2025 · تاريخ التحقق من المصادر: 1 نوفمبر 2026

## باختصار

- [الحماية](https://kilobat.app/ar/mac-malware-blocker): لم يكن ليساعد

  لا شيء للحظر. جاءت الشيفرة من registry.npmjs.org وذهبت البيانات إلى api.github.com، وهما غير مدرجين في قوائم التهديدات.
- [حارس الوكلاء](https://kilobat.app/ar/mac-malware-blocker): لم يكن ليساعد

  لم يُستخدم موقع لصق أو نفق أو عنوان IP مباشر، ويتجاوز قطع الرفع المضيفين المعروفين مثل api.github.com عمدًا.
- [سجل شبكة الوكلاء](https://kilobat.app/ar/ai-coding-agents): محدودة

  كان سيسجل نص تثبيت يتصل بواجهة GitHub API وعمليات أدوات الذكاء الاصطناعي التي بدأها النص، لكن فقط لعمليات التثبيت على هذا Mac ودون حظر.

## ما حدث

حصل المهاجم على رمز نشر Nx في npm عبر نظام التكامل المستمر الخاص بالمشروع. وفقًا [لتنبيه المشرفين](https://github.com/nrwl/nx/security/advisories/GHSA-cxm3-wv7p-598c)، استخدم سير عمل GitHub Actions دُمج في 21 أغسطس المشغّل `pull_request_target` ومرر عناوين طلبات السحب إلى الصدفة، مما سمح لعنوان مصمم خصيصًا بتنفيذ أوامر بصلاحيات المستودع. وفي 24 أغسطس استُخدم هذا المسار لبدء سير عمل النشر من إيداع خبيث وإرسال رمز npm إلى webhook.

باستخدام الرمز نشر المهاجم `nx` بالإصدارات 20.9.0–20.12.0 و21.5.0–21.8.0، بالإضافة إلى إصدارات من `@nx/devkit` و`@nx/js` و`@nx/workspace` و`@nx/node` و`@nx/eslint` و`@nx/key` و`@nx/enterprise-cloud`. حمل كل منها خطاف `postinstall` شغّل `telemetry.js`، الذي لم يعمل إلا على macOS وLinux.

بحث النص عن أدوات سطر الأوامر `claude` و`gemini` و`q`، وحيث كانت مثبتة شغّلها بمعاملات تتجاوز طلبات الإذن (`--dangerously-skip-permissions` و`--yolo` و`--trust-all-tools`) وتعليمات تطلب منها سرد الملفات التي تبدو كمحافظ ومفاتيح وملفات `.env` في `/tmp/inventory.txt`. نشرت [Snyk](https://snyk.io/blog/weaponizing-ai-coding-agents-for-malware-in-the-nx-malicious-package/) و[StepSecurity](https://www.stepsecurity.io/blog/supply-chain-security-alert-popular-nx-build-system-package-compromised-with-data-stealing-malware) الشيفرة. ورأت [Wiz](https://www.wiz.io/blog/s1ngularity-supply-chain-attack) نجاح ذلك في مئات الحالات، مع رفض ضوابط مزودي الذكاء الاصطناعي أحيانًا.

ثم قرأ تلك الملفات وجمع رمز GitHub CLI باستخدام `gh auth token` ورمز npm من `~/.npmrc`، وأنشأ مستودعًا عامًا باسم `s1ngularity-repository` في حساب الضحية ورفع كل شيء في `results.b64` بترميز base64 ثلاث مرات. كما أضاف `sudo shutdown -h 0` إلى `~/.zshrc` و`~/.bashrc`، بحيث تطلب كل نافذة طرفية جديدة كلمة مرور وتطفئ الجهاز.

لم يكتب أحد كثيرًا من أوامر التثبيت. وجد المشرفون أن إضافة المحرر Nx Console بالإصدارات 18.6.30 إلى 18.65.1 تتحقق من أحدث `nx` عند البدء، فكان فتح محرر أثناء الفترة كافيًا. ووجدت Wiz البرمجية تعمل أيضًا في مسارات CI. أحصت Wiz أكثر من ألف رمز GitHub صالح بين البيانات المسرّبة؛ وفي مرحلة ثانية استُخدمت الرموز المسروقة لجعل أكثر من 5,500 مستودع خاص عامًا.

## التسلسل الزمني

1. 21 أغسطس 2025

   دمج سير عمل فيه ثغرة حقن أوامر صدفة في مستودع Nx (تنبيه المشرفين).
2. 24 أغسطس 2025

   طلب سحب مصمم خصيصًا يبدأ سير عمل النشر من إيداع خبيث يرسل رمز npm إلى webhook.
3. 26 أغسطس، 22:32 UTC

   نشر `nx` بالإصدار 21.5.0 وعدة حزم `@nx/*` مع `telemetry.js`؛ وتبعه 20.9.0 بعد سبع دقائق.
4. 27 أغسطس، 00:30 UTC

   فتح مستخدم مشكلة على GitHub بشأن الإصدارات الخبيثة. وظهر الإصداران الأخيران 21.8.0 و20.12.0 عند 00:37.
5. 27 أغسطس، 02:44 UTC

   أزالت npm الإصدارات المتأثرة ورموز النشر.
6. 27 أغسطس، نحو 09:00 UTC

   عطّل GitHub المستودعات التي أنشأها المهاجم، بعد نحو ثماني ساعات من ظهور أولها (Wiz).
7. 27 أغسطس 2025

   أوقف Nx Console 18.66.0 تثبيت أحدث `nx`؛ ونقل Nx النشر إلى Trusted Publishers في npm مع المصادقة الثنائية.
8. 28–29 أغسطس 2025

   استُخدمت رموز مسروقة لإعادة تسمية مستودعات خاصة وجعلها عامة؛ وأحصت Wiz أكثر من 400 حساب و5,500 مستودع.

## كيف بدا على الشبكة

على Mac استخدم الهجوم مضيفين يتصل بهما جهاز المطور يوميًا. جاءت الحزمة من `registry.npmjs.org` كالمعتاد. وذهبت البيانات المسروقة إلى `api.github.com` بصفتها الضحية، باستخدام رمز GitHub CLI الخاص بها: طلب `POST /user/repos` لإنشاء المستودع، ثم `PUT /repos/<owner>/s1ngularity-repository/contents/results.b64` بالبيانات المرمّزة. لم يكن هناك خادم قيادة وتحكم أو وجهة رفع أخرى.

كانت شجرة العمليات قصيرة. شغّل `npm` أو إضافة المحرر صدفة، وشغّلت الصدفة `node telemetry.js`، وبدأ node العمليات الفرعية `claude` أو `gemini` أو `q`. اتصلت كل أداة ذكاء اصطناعي بمزودها كما تفعل عادةً؛ وحدثت قراءة الملفات محليًا. وجاء الرفع نفسه من node، واعتمد حجمه كليًا على محتويات الملفات.

## المؤشرات

كما توثقها المصادر. النطاقات نصوص وليست روابط، وقد عُطلت صيغتها (`[.]`) حيث فعل المصدر ذلك. معظم هذه البنية اختفى منذ زمن: تساعد المؤشرات في فحص السجلات والملفات والحسابات القديمة، لا حظر حملات اليوم.

| المؤشر | النوع | أين يظهر | ملاحظة |
|---|---|---|---|
| `api.github.com` | المضيف (مشروع) | جهاز Mac | `POST /user/repos` ثم `PUT …/contents/results.b64` من node أثناء تثبيت npm. |
| `s1ngularity-repository, s1ngularity-repository-0, s1ngularity-repository-1` | اسم مستودع GitHub | حساب GitHub | كان عامًا عند إنشائه؛ وعطله GitHub في 27 أغسطس. استخدمت المستودعات المعاد تسميتها في المرحلة الثانية `s1ngularity-repository-` مع خمسة أحرف. |
| `results.b64` | ملف | مستودع GitHub | البيانات المجمعة، مرمزة بـ base64 مرتين أو ثلاثًا. |
| `/tmp/inventory.txt, /tmp/inventory.txt.bak` | ملف | جهاز Mac | قائمة مسارات الملفات من أدوات الذكاء الاصطناعي. |
| `sudo shutdown -h 0` | سطر في ~/.zshrc و~/.bashrc | جهاز Mac | يطفئ Mac عند فتح نافذة طرفية وإدخال كلمة المرور. |
| `nx 20.9.0–20.12.0, 21.5.0–21.8.0` | إصدارات npm | ملفات القفل وذاكرة npm المؤقتة | وكذلك `@nx/devkit` و`@nx/js` و`@nx/workspace` و`@nx/node` بالإصدارين 20.9.0 و21.5.0، و`@nx/eslint` بالإصدار 21.5.0، و`@nx/key` و`@nx/enterprise-cloud` بالإصدار 3.2.0. |

## ما كان Kilobat سيعرضه أو يحظره

- **[سجل شبكة الوكلاء](https://kilobat.app/ar/ai-coding-agents).** عندما يشغّل وكيل عملية التثبيت، مثل تشغيل Claude Code للأمر `npm install`، كانت جلسته ستعرض `node` تحت `npm` يرسل إلى `api.github.com` أثناء التثبيت: يستحق نص تثبيت يتصل بواجهة GitHub API المراجعة. لم يكن سيُعلَّم بأنه *أول مرة* لأن api.github.com مضيف معروف، ولم يكن سيُعلَّم بأنه *رفع كبير* إلا فوق 10 MB.
- **[سجل شبكة الوكلاء](https://kilobat.app/ar/ai-coding-agents).** يتعرف Kilobat على Claude Code وGemini CLI من ملفاتهما التنفيذية لا ممن بدأهما، لذا كانت العمليات التي بدأها النص ستظهر كجلسات مستقلة في مجلد المشروع، في وقت لم تبدأ فيه وكيلًا. أما `q` من Amazon فليس من الوكلاء الذين يتعرف عليهم Kilobat.
- **[الحماية](https://kilobat.app/ar/mac-malware-blocker).** لا شيء. لا يشكل registry.npmjs.org وapi.github.com تهديدًا، ولا ينبغي لـ Kilobat حظرهما مطلقًا.
- **[حارس الوكلاء](https://kilobat.app/ar/mac-malware-blocker).** لا شيء أيضًا. تغطي قواعد الحارس مواقع اللصق ومشاركة الملفات والأنفاق ومستقبلات الطلبات وعناوين IP المباشرة، ولم يظهر أي منها؛ ويتجاوز قطع الرفع المضيفين المعروفين حتى يواصل `git push` العمل.

## أين لم يكن Kilobat ليساعد

- يبدو تسريب البيانات إلى github.com باستخدام رمز الضحية نفسه مماثلًا لعمل GitHub CLI المعتاد. يرى Kilobat المضيفين وعدد البايتات، ولا يرى ما أُرسل.
- سُرق رمز npm في GitHub Actions الخاصة بـ Nx على مشغلات GitHub، ونُفذت المرحلة الثانية من جانب المهاجم باستخدام رموز مسروقة. لم يمس أي منهما جهاز Mac الخاص بك.
- لا تُنسب عمليات التثبيت التي تبدأها إضافة محرر في VS Code إلى وكيل، فلا تحصل على جلسة وكيل؛ وفي Cursor وWindsurf تُحسب ضمن التطبيق.
- قراءة الملفات وتشغيل بحث أدوات الذكاء الاصطناعي في الملفات وتعديل `~/.zshrc` ليست أحداث شبكة.
- يحتفظ سجل شبكة الوكلاء ببيانات 30 يومًا، فلا يمكنه إخبارك الآن إن كان هذا قد عمل على Mac في أغسطس 2025.

## تحقق من Mac الآن

1. في كل مشروع، تحقق مما إذا كان إصدار متأثر من Nx مثبتًا وحدّثه إن وجد.

   ```
   npm ls nx
   ```
2. ابحث عن الملفات التي تركها النص. يمسح macOS `/tmp` عند إعادة التشغيل، لذا فإن عدم العثور على شيء لا يثبت الكثير.

   ```
   ls -la /tmp/inventory.txt /tmp/inventory.txt.bak
   ```
3. تحقق من ملفات بدء تشغيل الصدفة بحثًا عن سطر إيقاف التشغيل واحذفه إن وجد.

   ```
   grep -n "shutdown" ~/.zshrc ~/.bashrc
   ```
4. في سجل أمان GitHub، ابحث عن حدث `repo.create` يتضمن `s1ngularity-repository` في الاسم: [github.com/settings/security-log](https://github.com/settings/security-log?q=action%3Arepo.create). ربما يكون المستودع نفسه قد عُطّل بالفعل.
5. إذا تأثرت، فألغِ وصول GitHub CLI من **الإعدادات ‹ التطبيقات ‹ تطبيقات OAuth المصرح بها**، وسجّل الدخول مجددًا باستخدام `gh auth login`، وبدّل رموز npm وكل سر في ملفات `.env` وبيئتك.
6. امسح ذاكرة npm المؤقتة حتى لا يمكن تثبيت نسخة قديمة مجددًا.

   ```
   npm cache clean --force
   ```
7. في المرة القادمة: مع تسجيل سجل شبكة الوكلاء في Kilobat، انظر إلى ما اتصلت به كل عملية تثبيت شغّلها وكيل. راقب اتصال npm أو node بـ api.github.com وجلسات الوكلاء التي لم تبدأها.

   ```
   kilobat agent-log --all
   ```

## الأسئلة

**هل انقلبت أدوات الذكاء الاصطناعي على مستخدميها؟**

لا. بدأها النص الخبيث بنفسه بمعاملات تعطل طلبات الإذن، وأعطاها تعليماته الخاصة. وهذه المعاملات نفسها سبب للحذر عند تشغيل الوكلاء دون مراقبة وبصلاحيات كاملة.

**لماذا لا يحظر Kilobat عمليات الرفع الكبيرة إلى GitHub؟**

لأن رفع الشيفرة والإصدارات والحزم إلى GitHub عمل عادي، وقطعه سيعطل `git push`. يعرض السجل عملية الرفع وعدد بايتاتها وعمليتها بدلًا من ذلك لتتمكن من رؤيتها.

## المصادر

- [تنبيه أمان nrwl/nx GHSA-cxm3-wv7p-598c: نُشرت إصدارات خبيثة من Nx وبعض الإضافات المساندة](https://github.com/nrwl/nx/security/advisories/GHSA-cxm3-wv7p-598c)
- [مدونة Nx: S1ngularity، ما حدث وكيف استجبنا وما تعلمناه](https://nx.dev/blog/s1ngularity-postmortem)
- [StepSecurity: اختراق حزمة نظام البناء الشهير Nx ببرمجية تسرق البيانات](https://www.stepsecurity.io/blog/supply-chain-security-alert-popular-nx-build-system-package-compromised-with-data-stealing-malware)
- [Wiz: s1ngularity، هجوم على سلسلة التوريد يسرّب الأسرار على GitHub](https://www.wiz.io/blog/s1ngularity-supply-chain-attack)
- [Snyk: تسخير وكلاء البرمجة بالذكاء الاصطناعي للبرمجيات الخبيثة في حزمة Nx الخبيثة](https://snyk.io/blog/weaponizing-ai-coding-agents-for-malware-in-the-nx-malicious-package/)
- [Socket: اختراق حزم Nx على npm في هجوم على سلسلة التوريد يسخّر أدوات الذكاء الاصطناعي](https://socket.dev/blog/nx-packages-compromised)

تم التحقق في 1 نوفمبر 2026.

## اعرف ما تتصل به وكلاؤك وتطبيقاتك

Kilobat تطبيق لشريط قوائم Mac يحدد التطبيق والعملية والوكيل وراء كل اتصال، ويبعدها عن المضيفين المعروفين بسوئهم، ويسجل الوجهات التي بلغتها كل جلسة وكيل.

[تنزيل لـ Mac ↓](https://kilobat.app/downloads/Kilobat-1.31.1.dmg?via=site)

```
brew install seifip/kilobat/kilobat
```

## حوادث أخرى

- [دودة npm «Shai-Hulud»](https://kilobat.app/ar/incidents/shai-hulud-npm-worm): دودة سرقت رموز المطورين وأعادت نشر نفسها بها وسرّبت الأسرار عبر GitHub وwebhook.site.
- [الباب الخلفي في postmark-mcp](https://kilobat.app/ar/incidents/postmark-mcp): أضاف خادم MCP لإرسال البريد عبر Postmark نسخة مخفية بصمت إلى كل رسالة.
- [كل الحوادث](https://kilobat.app/ar/incidents): كل دراسة حالة، مع ما كان Kilobat سيفعله وما لم يكن ليفعله.
