
نشرة أمنية وPoC غير ضار لثغرة حقن أوامر نظام التشغيل في خادم nmap MCP، مع تتبع CVE المكررة، وإرشادات الكشف، ووسائل التخفيف.
run_nmap_scanتبني أداة MCP المسماة run_nmap_scan أمرها عبر الإدراج النصي للمعاملين
target وadditionalFlags ثم تشغّله عبر
child_process.exec، أي /bin/sh -c.
⚠ اقرأ هذا أولاً — معرّف مكرر
كانت هذه الثغرة علنية بالفعل قبل وجود معرّف CVE هذا. وهي مشمولة بـ CVE-2026-3484 / GHSA-xc68-rrqc-qgq3، التي خصّصتها VulDB ونُشرت في 2026-03-03 ضد
mcp-nmap-server <= 1.0.1— الحزمة نفسها، ونقطة الوصول نفسها CWE-78child_process.exec.خُصّص CVE-2026-52616 لـ s1ko من قِبل MITRE CNA-LR في 2026-07-13 استجابةً لتقرير مستقل. ويبدو أن هذا التخصيص مكرر، وقد أُشير إليه على هذا النحو. والمعرّف الموجود مسبقاً CVE-2026-3484 هو المعرّف الذي ينبغي الاستشهاد به.
نُشر هذا المستودع من باب الاكتمال وتوثيق التكرار، وليس بوصفه ادعاءً باكتشاف جديد. وفضل الإفصاح العلني الأصلي ليس لـ s1ko.
| CVE | CVE-2026-52616 — مكرر لـ CVE-2026-3484 |
| CWE | CWE-78 (عدم التحييد السليم للعناصر الخاصة المستخدمة في أمر نظام التشغيل) |
| الحزمة | mcp-nmap-server (npm) |
| المتأثرة | 1.0.1 وما قبلها — جميع الإصدارات المنشورة |
| تم إصلاحها في | لا شيء — المستودع مؤرشف |
| CVSS v3.1 | AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 8.4 High (نقل stdio). AV:N → 9.8 Critical إذا غُلّف الخادم بنقل شبكي. |
| أبلغ عنها بشكل مستقل | s1ko (github.com/s1ko، [email protected]) |
| تاريخ تخصيص CVE | 2026-07-13، MITRE CNA-LR |
من الفخاخ التسميةية الجديرة بالملاحظة لمن يعمل على إزالة تكرار هذا الأمر: حزمة npm هي
mcp-nmap-server والمستودع هو nmap-mcp-server. والترتيبان
يشيران إلى المشروع نفسه.
معاملات أداة MCP عرضة لتأثير المهاجم. فهي تُنتَج بواسطة نموذج لغوي كبير (LLM) من
المحتوى الذي تعالجه الوكيلة — مستندات وصفحات ويب ومخرجات أدوات — لذا فإن
حقن الأوامر غير المباشر يضع المهاجم في موقع التحكم بالقيم التي يتلقاها معالج
الأداة. وأي معالج يمرّر أياً من تلك القيم إلى صدفة (shell) يحوّل
ذلك التأثير إلى تنفيذ شيفرة على المضيف الذي يشغّل خادم MCP. وهذا هو
النموذج نفسه المتبع في الحالة السابقة aws-mcp-server / CVE-2026-5058.
dist/index.js — يُلحق الهدف بسلسلة أمر ثم
يُسلَّم إلى exec:
command += ` ${target}`;
…
const { stdout, stderr } = await promisify(exec)(command);
child_process.exec يشغّل الوسيط الخاص به في /bin/sh -c، لذا فإن كل ما ساهم به المستدعي هو صيغة صدفة (shell syntax). يعلن مخطط إدخال Zod عن z.string()، الذي يتحقق من النوع ولا يقول شيئًا عن المحتوى، لذا تمر الأحرف الخاصة (metacharacters) دون اعتراض. ويصل additionalFlags إلى السلسلة نفسها عبر المسار نفسه.
نداء run_nmap_scan مع ضبط target على
127.0.0.1; touch /tmp/marker; echo INJECTED ينتج:
/bin/sh -c "nmap … 127.0.0.1; touch /tmp/marker; echo INJECTED"
poc/driver.mjs يتحدث MCP عبر stdio: يهيّئ الخادم، ويصدر استدعاءً واحدًا tools/call لـ run_nmap_scan مع target مُحقَن، ويتحقق من وجود ملف علامة. الحمولة هي touch غير ضار.
npm pack [email protected]
tar xf mcp-nmap-server-1.0.1.tgz && cd package && npm install
node ../poc/driver.mjs
متوقع على إصدار متأثر:
==== POC RESULT (mcp-nmap-server) ====
marker /tmp/PWNED_nmap created: true
verdict: CONFIRMED — command injection executed
لا حاجة لتثبيت nmap — فالأمر المحقون يعمل داخل نفس سلسلة
/bin/sh -c بغض النظر عمّا إذا كان الملف التنفيذي الأول قابلاً للحل.
تم التحقق منه في 2026-06-01 داخل حاوية معزولة وأُعيد التحقق في 2026-06-13.
لا تشغّله إلا ضد بنية تحتية مصرّح لك باختبارها.
nmap يحتوي على ; أو && أو || أو | أو علامة backtick أو $(.sh -c يبدأ سطر أوامرها بـ nmap وتحتوي على أمر ثانٍ
بعد فاصل — إشارة على مستوى شجرة العمليات (auditd، eBPF، Falco، EDR)
لا تعتمد على تسجيل التطبيق.nmap متوقع؛ أما shell
أو مفسّر أو عميل شبكة فليس كذلك.target أو additionalFlags على
محارف meta الخاصة بالـ shell. ينبغي أن تطابق target عنوان IP أو CIDR أو اسم مضيف ولا شيء غير ذلك.MITRE ATT&CK T1059.004 Command and Scripting Interpreter: Unix Shell.
المستودع مؤرشف وللقراءة فقط، وأحدث إصدار على npm هو الإصدار المتأثر 1.0.1، ولن يُنشر أي إصدار مُصحّح. الإزالة هي التخفيف:
target مقابل نمط IP/CIDR/اسم مضيف
ولإدراج additionalFlags في قائمة مسموحة قبل وصول أي منهما إلى سلسلة
الأمر.الإصلاح، لمن ينسخه (fork)، هو استدعاء
execFile("nmap", [...args]) بمتجه وسائط بدلاً من بناء سلسلة
لـ exec. التحقق من المحتوى، وليس فقط التحقق من النوع عبر Zod، هو
المتطلب الأساسي.
NIST SP 800-53r5 SI-10؛ OWASP ASVS v4 §5.3.8؛ تخفيفات CWE-78 M1 وM2.
| التاريخ | الحدث |
|---|---|
| 2026-03-03 | نشر VulDB الثغرة CVE-2026-3484 / GHSA-xc68-rrqc-qgq3 — الإفصاح العام الأصلي، من مُبلّغ آخر |
| 2026-05-29 | تم تحديدها بشكل مستقل عبر مراجعة شفرة الحزمة المضغوطة المنشورة، دون علم بالتنبيه الصادر في مارس |
| 2026-06-01 | تم التحقق منها ديناميكياً عبر MCP stdio في حاوية معزولة |
| 2026-06-13 | تم تحديد التكرار أثناء إزالة التكرار قبل الإرسال؛ تأكد أن المستودع مؤرشف مع عدم توفر الإبلاغ الخاص عن الثغرات. الحكم الداخلي: لا تُقدّم |
| 2026-07-13 | يخصّص MITRE CNA-LR الثغرة CVE-2026-52616 على أي حال، مع نسبة الاكتشاف إلى s1ko |
| 2026-08-22 | نُشر هذا التقرير، موثّقاً التكرار |
aws-mcp-server)تنبيهات مرافقة من نفس جولة البحث: CVE-2026-52617، CVE-2026-52618.
MIT — انظر LICENSE.