
PHP 8.1.0-dev باب خلفي في User-Agentt لتنفيذ التعليمات البرمجية عن بُعد (RCE)
User-Agentt Backdoor Remote Code Execution (RCE)الشدّة: حرجة (ما يعادل CVSS: 10.0)
نوع الثغرة: باب خلفي في سلسلة التوريد / تنفيذ برمجيات عن بُعد (RCE)
البرنامج المتأثر: PHP 8.1.0-dev (الإصدار التطويري فقط)
متجه الهجوم: عن بُعد (بدون مصادقة)
المصادقة المطلوبة: لا
تفاعل المستخدم: لا
الأثر: اختراق كامل للنظام
يُعد باب PHP 8.1.0-dev الخلفي User-Agentt واحداً من أشهر عمليات اختراق سلسلة التوريد في تاريخ البرمجيات مفتوحة المصدر. وعلى عكس الثغرات التقليدية التي تنشأ عن أخطاء برمجية، نتجت هذه المشكلة عن إدخال كود خبيث عمداً في المستودع الرسمي لشفرة PHP المصدرية.
ظهر الباب الخلفي في الإصدارات التطويرية من PHP 8.1.0-dev خلال مارس 2021 بعد أن تمكن المهاجمون من اختراق البنية التحتية لـ Git الخاصة بـ PHP. وانتحلت الالتزامات الخبيثة (commits) هوية مطورين موثوقين في PHP، وقدّمت آلية خفية قادرة على تنفيذ أي كود PHP عند استقبال ترويسة HTTP مصممة خصيصاً.
على الرغم من أن الباب الخلفي ظل موجوداً لفترة وجيزة فقط قبل اكتشافه وإزالته، فإن أي خادم نشر أحد الإصدارات التطويرية المخترقة أصبح فوراً عرضةً لـ تنفيذ برمجيات عن بُعد دون مصادقة (RCE).
غيّر هذا الحادث أسلوب عمل تطوير PHP بشكل جذري، وأدى في النهاية إلى نقل مستودع PHP المصدري بعيداً عن البنية التحتية الذاتية الاستضافة لـ Git. :contentReference[oaicite:0]{index=0}
معظم ثغرات تنفيذ البرمجيات عن بُعد تنشأ من:
لكن هذه الثغرة كانت مختلفة.
لم تكن خطأ برمجياً.
بل كانت باباً خلفياً مزروعاً عمداً مخفياً داخل شفرة PHP المصدرية المشروعة.
بدلاً من استغلال نقطة ضعف موجودة، عدّل المهاجمون PHP نفسها لتنفيذ أي كود PHP يوفره أي شخص يرسل طلب HTTP.
وهذا يجعل هذا الحادث واحداً من أشهر الأمثلة على هجمات سلسلة التوريد.
في 28 مارس 2021، ظهر التزامان مشبوهان في مستودع Git الخاص بـ PHP.
بدا الالتزامان وكأنهما صادران عن مطورين معروفين في PHP.
في البداية بدوا غير مؤذيين.
شبهت رسائل الالتزام إصلاحات أخطاء مطبعية عادية.
ومع ذلك، لاحظ الباحثون بسرعة كوداً مشبوهاً أُضيف إلى مُفسِّر PHP.
البحث في الكود المُدرج داخل طلبات HTTP الواردة عن ترويسة مخصصة:
User-Agentt
لاحظ حرف "t" الإضافي.
ساعد هذا الاختلاف الطفيف في الإملاء على إخفاء الباب الخلفي أثناء المراجعة العادية.
إذا بدأت الترويسة بسلسلة التشغيل:
zerodium
فإن PHP تنفذ فوراً كل ما يليها باستخدام:
zend_eval_string()
وقد سمح هذا فعلياً لأي شخص بتنفيذ كود PHP عشوائي عن بُعد.
أُزيلت الالتزامات الخبيثة في غضون ساعات بعد اكتشافها. وأشار التحقيق لاحقاً إلى أن المهاجمين اخترقوا البنية التحتية لـ Git الخاصة بـ PHP بدلاً من حصولهم بشكل شرعي على مفاتيح توقيع المطوّرين. :contentReference[oaicite:1]{index=1}
نفّذ الكود المُدرج منطقياً ما يلي تقريباً:
Incoming HTTP Request
│
▼
Read User-Agentt Header
│
▼
Does header start with "zerodium"?
│
Yes ▼
Execute remaining text as PHP
│
▼
Attacker gains Remote Code Execution
بدلاً من التعامل مع الترويسة كبيانات وصفية غير ضارة، قامت PHP بتقييمها مباشرة ككود PHP قابل للتنفيذ.
عادةً ما يحتوي طلب HTTP على ترويسات مشابهة لما يلي:
GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla Firefox
الإصدار المخترق من PHP عالج بالإضافة إلى ذلك:
User-Agentt:
إذا بدأت قيمته بـ:
zerodium
استدعت PHP:
zend_eval_string()
أصبح المحتوى المتبقي كود PHP قابلاً للتنفيذ.
من الناحية المفاهيمية:
User-Agentt:
zerodium
│
▼
zend_eval_string(payload)
│
▼
Remote Code Execution
Attacker
│
│ HTTP Request
▼
GET /
User-Agentt: zerodiumsystem("id");
│
▼
PHP 8.1.0-dev
│
▼
Backdoor Triggered
│
▼
system("id")
│
▼
Command Executed
│
▼
Output Returned
لا مصادقة.
لا جلسة.
لا بيانات اعتماد.
طلب HTTP واحد كان كافياً.
اختار المهاجمون عمداً
User-Agentt
بدلاً من
User-Agent
لأن:
أخفى هذا الخطأ المطبعي الصغير باباً خلفياً كاملاً لتنفيذ البرمجيات عن بُعد.
فقط:
PHP 8.1.0-dev
وتحديداً الإصدارات التطويرية المخترقة التي نُشرت خلال حادثة مارس 2021.
الإصدارات المستقرة مثل:
لم تتأثر أبداً.
المهاجم يحتاج فقط إلى:
لا مصادقة.
لا تخمين كلمات مرور.
لا تسجيل دخول.
لا وصول مسبق.
يمكّن الاستغلال الناجح المهاجمين من:
عملياً، تؤدي هذه الثغرة إلى اختراق كامل للخادم.
يجب على المسؤولين فحص الأنظمة التي تكشف عن:
PHP/8.1.0-dev
في ترويسات الاستجابة مثل:
X-Powered-By:
PHP/8.1.0-dev
كما يجب فحص سجلات HTTP بحثاً عن طلبات مشبوهة تحتوي على:
User-Agentt
أو
zerodium
تتضمن الآن العديد من أنظمة كشف التسلل ومنتجات IPS توقيعات محددة لهذا النمط الهجومي. :contentReference[oaicite:2]{index=2}
قد تتضمن المؤشرات المحتملة:
User-Agenttzerodium| الخاصية | القيمة |
|---|---|
| المصادقة | لا شيء |
| تفاعل المستخدم | لا شيء |
| التعقيد | منخفض جداً |
| الامتيازات المطلوبة | لا شيء |
يُعتبر هذا من أسهل ثغرات تنفيذ البرمجيات عن بُعد استغلالاً لأن المهاجم يرسل ببساطة طلب HTTP مصمماً خصيصاً.
لا تنشر أبداً إصدارات تطويرية من PHP على الأنظمة الإنتاجية.
إذا اكتُشف أن خادماً كان يعمل بالإصدار المخترق:
أظهر هذا الحادث عدة دروس مهمة:
سارع هذا الاختراق إلى إحداث تغييرات في البنية التحتية التطويرية لـ PHP، وسلط الضوء على الأهمية المتزايدة لأمن سلسلة توريد البرمجيات في جميع أنحاء الصناعة. :contentReference[oaicite:3]{index=3}
يظل باب PHP 8.1.0-dev الخلفي User-Agentt واحداً من أهم أمثلة هجمات سلسلة التوريد التي أثرت على مشروع مفتوح المصدر كبير. بدلاً من استغلال خلل برمجي، أدخل المهاجمون باباً خلفياً مخفياً مباشرة في الشفرة المصدرية للغة، مما سمح بتنفيذ كود PHP عشوائي عن بُعد دون مصادقة عبر ترويسة HTTP مصممة خصيصاً باسم User-Agentt. على الرغم من أن الإصدارات التطويرية المخترقة أُزيلت بسرعة ولم تتأثر أي إصدارات PHP مستقرة، فقد أكد الحادث الأهمية الحاسمة لتأمين البنية التحتية لتطوير البرمجيات، والتحقق من مصدر الشفرة، وتجنب نشر الإصدارات التطويرية في بيئات الإنتاج. واليوم، تُدرس هذه الثغرة على نطاق واسع كقضية بارزة في أمن سلسلة التوريد، وتُذكّرنا بأن سلامة عملية بناء البرمجيات لا تقل أهمية عن أمان الشفرة نفسها.
| التقنية | الوصف |
|---|
| T1195 | Supply Chain Compromise |
| T1059 | Command and Scripting Interpreter |
| T1505 | Server Software Component |
| T1105 | Ingress Tool Transfer |
| T1071 | Application Layer Protocol |
| T1106 | Native API |
| T1055 | Process Injection (possible post exploitation) |
| T1027 | Obfuscated Files or Information |
| عن بُعد |
| نعم |