
نشرة أمنية و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-78 عبرchild_process.exec.تم تخصيص CVE-2026-52616 لـ s1ko من قبل MITRE CNA-LR في 2026-07-13 استجابةً لتقرير مستقل. يبدو أن هذا التخصيص مكرر، وقد تم وسمه على هذا النحو. المعرّف السابق CVE-2026-3484 هو الذي ينبغي الاستشهاد به.
نُشر هذا المستودع من أجل الاكتمال وتوثيق التكرار، وليس كادعاء باكتشاف جديد. الفضل في الإفصاح العلني الأصلي ليس عائدًا لـ s1ko.
فخ تسمية جدير بالملاحظة لأي شخص يزيل التكرار: حزمة 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. مخطط الإدخال Zod يصرّح بـ z.string()، الذي يتحقق من النوع ولا يقول شيئًا عن المحتوى، لذا تمرر الرموز الفوقية دون عوائق. تصل 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 محقون، ويتحقق من وجود ملف علامة (marker). الحمولة هي أمر 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 على رموز فوقية خاصة بالـ Shell. يجب أن يطابق target عنوان IP أو نطاق CIDR أو اسم مضيف فقط، ولا شيء غيره.MITRE ATT&CK T1059.004 مترجم الأوامر والبرمجة النصية: 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.
aws-mcp-server)إشعارات مصاحبة من نفس جولة البحث: CVE-2026-52617, CVE-2026-52618.
MIT — انظر LICENSE.
| 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 = 7.8 عالية (نقل stdio). AV:N → 9.8 حرجة إذا كان الخادم مغلّفًا في نقل شبكي. |
| أُبلغ عنه بشكل مستقل بواسطة | s1ko (github.com/s1ko, [email protected]) |
| تخصيص CVE | 2026-07-13, MITRE CNA-LR |
| التاريخ | الحدث |
|---|
| 2026-03-03 | CVE-2026-3484 / GHSA-xc68-rrqc-qgq3 منشور بواسطة VulDB — الإفصاح العلني الأصلي، بواسطة مُبلغ آخر |
| 2026-05-29 | تم تحديدها بشكل مستقل عبر مراجعة مصدر الحزمة المنشورة (tarball)، دون علم بإشعار مارس |
| 2026-06-01 | تم التحقق الديناميكي عبر MCP stdio في حاوية معزولة |
| 2026-06-13 | تم تحديد التكرار أثناء إزالة التكرار قبل التقديم؛ تأكد أن المستودع مؤرشَف مع عدم توفر الإبلاغ الخاص بالثغرات (Private Vulnerability Reporting). القرار الداخلي: عدم التقديم |
| 2026-07-13 | MITRE CNA-LR يخصص CVE-2026-52616 رغم ذلك، مع نسب الاكتشاف إلى s1ko |
| 2026-08-22 | نُشر هذا التقرير، موثقًا التكرار |