# دالة wordexp في POSIX تنفّذ أوامر من النص الداخل، وحمايتها WRDE_NOCMD ضعيفة في musl وmacOS

> **المغزى:** المغزى: الخطر هنا ليس ثغرة تُصلَح ثم تُنسى، بل سلوك موثّق في دالة قياسية، والسلوك الموثّق يبقى في كل كود يستدعيها على مدخلات غير موثوقة.

- المصدر: المغزى (https://almaghza.com/a/2026-10-26-posix-wordexp-command-execution/)
- التاريخ: 15 جمادى الأولى - 26 أكتوبر 2026 (2026-10-26)
- القسم: أمن سيبراني
- الوسوم: لغة C، الثغرات الأمنية، Linux، macOS

نشر موقع yossarian.net في 25 أكتوبر 2026 مقالة قصيرة تحذّر من دالة wordexp في معيار POSIX، وتخلص إلى أنها لا يجوز أن تُستدعى على مدخلات غير موثوقة، حتى مع الـ flag المخصص لحمايتها.

ووظيفة الدالة أن تُجري على النص توسيعًا شبيهًا بما يفعله الـ shell: تفكّ الـ tilde إلى مسار المستخدم، وتعوّض المتغيرات، وتنفّذ أيضًا command substitution، أي تشغيل أمر مكتوب داخل النص ووضع ناتجه مكانه. فإذا وصل إلى الدالة نص من المستخدم يحتوي على أمر مضمّن، شغّلته الدالة. وإذا مُررت قيمة 0 في الـ flags، تبقى كل هذه القدرات مفعّلة.

ويفترض أن يغلق الـ flag المسمّى WRDE_NOCMD هذا الباب، لكن المقالة توضح أنه ضعيف في أكثر من تنفيذ لمكتبة libc. ففي musl، تسلّم الدالة المهمة إلى الـ shell بعد فحص أولي بسيط، وهذا الفحص لا يلتقط كل الصيغ التي يعدّها bash نفسه command substitution. وفي macOS، يذهب التوسيع إلى برنامج مساعد خارجي بالفكرة نفسها. وقد رصد Julian Squires تجاوزًا مماثلًا على macOS في 2023، وتقول المقالة إنها لم تختبر إن كان لا يزال قائمًا مع zsh بوصفه الـ shell الافتراضي.

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

ويخص ذلك من يكتب بلغة C أو يصون كودًا قديمًا يستخدم الدالة لتوسيع المسارات. فالتوسيع الذي يحتاجه كثير من البرامج يقتصر على الـ tilde، وهو ممكن بقراءة متغير البيئة HOME وتركيب المسار مباشرة، دون أي دالة تنفّذ أوامر. ولا تُسمّي الصفحة كاتبًا بعينه، فالمقالة منسوبة إلى الموقع.

## المصادر

- [المقالة على موقع yossarian.net](https://yossarian.net/til/post/posix-wordexp-3-is-dangerous/)
- [توثيق الدالة في دليل Linux](https://man7.org/linux/man-pages/man3/wordexp.3.html)
