Probllama:Ollama AI 远程代码执行漏洞 (CVE-2024-37032) - 概述和缓解措施

admin 2024年6月30日22:18:50评论22 views字数 4130阅读13分46秒阅读模式

Probllama:Ollama  AI 远程代码执行漏洞 (CVE-2024-37032) - 概述和缓解措施

简介与概述 

Ollama是运行 AI 模型的最受欢迎的开源项目之一,在GitHub上有超过 7 万颗星,在Docker Hub上每月有数十万次拉取。受 Docker 的启发,Ollama 旨在简化打包和部署 AI 模型的过程。 

Wiz Research 在 Ollama 中发现了一个易于利用的远程代码执行漏洞:CVE-2024-37032,称为“Probllama”。此安全问题已负责任地披露给 Ollama 的维护人员,并且已得到缓解。建议 Ollama 用户将其 Ollama 安装升级到 0.1.34 或更高版本。 

我们的研究表明,截至 6 月 10 日,有大量运行易受攻击版本的 Ollama 实例暴露在互联网上。在这篇博文中,我们将详细介绍我们发现的内容和发现过程,以及组织可以采取的缓解技术和预防措施。  

人工智能安全要点 

总的来说,鉴于 Wiz Research 团队持续关注人工智能系统固有的风险,我们的研究结果强调了这样一个事实:人们更关注人工智能的变革力量及其彻底改变商业运作方式的潜力,而人工智能安全措施在很大程度上被忽视了。  

各组织正在迅速采用各种新的 AI 工具和基础设施,以期提高竞争优势。这些工具通常处于开发的早期阶段,缺乏标准化的安全功能,例如身份验证。此外,由于它们的代码库较新,因此相对容易找到关键的软件漏洞,使其成为潜在威胁行为者的完美目标。这是我们发现中反复出现的主题——请参阅 Wiz Research 之前对 AI 即服务提供商Hugging Face和Replicate的研究,以及我们的《云端 AI 现状》报告和去年发现的AI 研究人员意外泄露的 38TB 数据。  

过去一年,推理服务器中发现了多个远程代码执行 (RCE) 漏洞,包括 TorchServe、Ray Anyscale 和 Ollama。这些漏洞可能允许攻击者接管自托管的 AI 推理服务器,窃取或修改 AI 模型,并破坏 AI 应用程序。  

关键问题不仅在于漏洞本身,还在于这些新工具本身缺乏身份验证支持。如果暴露在互联网上,任何攻击者都可以连接到它们,窃取或修改 AI 模型,甚至可以作为内置功能执行远程代码(如 TorchServe 和Ray Anyscale所见)。缺乏身份验证支持意味着这些工具绝不应该在没有保护性中间件(例如具有身份验证的反向代理)的情况下暴露在外部。尽管如此,当我们在互联网上扫描暴露的 Ollama 服务器时,我们发现有 1,000 多个暴露的实例托管着大量 AI 模型,包括 Ollama 公共存储库中未列出的私有模型,这凸显出一个重大的安全漏洞。 

缓解和检测

要利用此漏洞,攻击者必须向 Ollama API 服务器发送特制的 HTTP 请求。在默认的 Linux 安装中,API 服务器绑定到 localhost,这大大降低了远程利用风险。然而,在docker 部署(ollama/ollama)中,API 服务器是公开的,因此可以被远程利用。 

Wiz 客户可以使用 Wiz 威胁中心中预先构建的查询和建议来搜索其环境中的易受攻击的实例。 

解释和技术说明 

为什么要研究Ollama? 

我们的研究团队积极努力为人工智能服务、工具和基础设施的安全做出贡献,并且我们也在研究工作中使用人工智能。 

对于另一个项目,我们希望利用大上下文 AI 模型。幸运的是,大约在那个时候,Gradient 发布了他们的 Llama3 版本,该版本具有 100 万个 token 的上下文。  

Ollama是运行 AI 模型的最受欢迎的开源项目之一,在GitHub上有超过 7 万颗星,在Docker Hub上每月有数十万次拉取,Ollama 似乎是自托管该模型的最简单方法😊。 

Probllama:Ollama  AI 远程代码执行漏洞 (CVE-2024-37032) - 概述和缓解措施

Ollama 架构 

Ollama 由两个主要组件组成:客户端和服务器。服务器公开多个 API来执行核心功能,例如从注册表中提取模型、针对给定提示生成预测等。客户端是用户与之交互的部分(即前端),例如 CLI(命令行界面)。 

在试验 Ollama 时,我们的团队在 Ollama 服务器中发现了一个严重的安全漏洞。由于输入验证不足,可以利用路径遍历漏洞任意覆盖服务器上的文件。正如我们在下面演示的那样,这可以进一步利用为完整的远程代码执行。 

该问题在 Docker 安装中极其严重,因为服务器以root特权运行并默认进行监听0.0.0.0- 这使得该漏洞可以被远程利用。 

Probllama:Ollama  AI 远程代码执行漏洞 (CVE-2024-37032) - 概述和缓解措施

值得一提的是,Ollama 不支持开箱即用的身份验证。如果用户决定公开其安装,通常建议将Ollama 部署在反向代理后面以强制执行身份验证。实际上,我们的研究表明,有大量安装在没有任何身份验证的情况下暴露在互联网上。 

漏洞:通过路径遍历进行任意文件写入 

Ollama 的 HTTP 服务器公开执行各种操作的多个 API 端点。  

Probllama:Ollama  AI 远程代码执行漏洞 (CVE-2024-37032) - 概述和缓解措施

其中一个端点/api/pull可用于从 Ollama 注册表下载模型。 

默认情况下,模型是从 Ollama 的官方注册表 ( registry.ollama.com) 下载的,但是,也可以从私人注册表中获取模型。

Probllama:Ollama  AI 远程代码执行漏洞 (CVE-2024-37032) - 概述和缓解措施

从私有注册表中提取模型

虽然 Ollama 的官方注册表可以被视为“可信的”,但任何人都可以建立自己的注册表并在其上托管模型。作为研究人员,我们对这个攻击面很感兴趣——私人注册表是否被盲目信任?恶意的私人注册表会造成什么损害? 

我们发现,当从私有注册表中提取模型时(通过查询http://[victim]:11434/api/pullAPI 端点),有可能提供包含digest字段中的路径遍历负载的恶意清单文件。 

例子: 

{  "schemaVersion": 2,  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",  "config": {    "mediaType": "application/vnd.docker.container.image.v1+json",    "digest": "../../../../../../../../../../../../../../../../../../../traversal",    "size": 5  },  "layers": [    {      "mediaType": "application/vnd.ollama.image.license",      "digest": "../../../../../../../../../../../../../../../../../../../../../traversal",      "size": 7020    }  ]}

给定层的字段digest应等于该层的哈希值。除其他外,digest层的还用于将模型文件存储在磁盘上:  

/root/.ollama/models/blobs/sha256-04778965089b91318ad61d0995b7e44fad4b9a9f4e049d7be90932bf8812e828

然而,我们发现该digest 字段的使用没有经过适当的验证,导致在尝试将其存储在文件系统时发生路径遍历。此问题可被用来破坏系统上的任意文件。 

实现任意文件读取 

通过利用上一个问题,我们可以在服务器上植入一个额外的恶意清单文件(例如/root/.ollama/models/manifests/%ATTACKER_IP%/library/manifest/latest),从而有效地将新模型注册到服务器。我们发现,如果我们的模型清单包含digest其某一层的遍历有效负载,则在尝试通过端点将此模型推送到远程注册表时http://[victim]:11434/api/push,服务器将泄露字段中指定的文件的内容digest 。 

Probllama:Ollama  AI 远程代码执行漏洞 (CVE-2024-37032) - 概述和缓解措施

最后,远程代码执行 

正如我们之前提到的,可以利用任意文件写入漏洞来破坏系统中的某些文件。在 Docker 安装中,利用该漏洞并实现远程代码执行非常简单,因为服务器以root特权运行。 

我们认为实现远程代码执行的最简单方法是破坏配置文件,具体来说。此文件包含一个空格分隔的共享库列表,这些共享库应在启动新进程时加载。使用我们的任意文件写入漏洞利用原语,我们将有效载荷作为共享库植入文件系统(),然后我们破坏它以包含它。最后,我们在 Ollama API 服务器上查询端点,随后创建一个新进程并加载我们的有效载荷!ld.so /etc/ld.so.preload/root/bad.soetc/ld.so.preload/api/chat

关于利用未使用root特权运行的实例 - 我们确实有一个利用 /Arbitrary File Read 原语的利用策略。不过,这将留给读者练习😊 

https://youtu.be/nINPZbsf0-g

结论 

 CVE-2024-37032 是一种易于利用的远程代码执行漏洞,会影响现代 AI 基础设施。尽管代码库相对较新且采用现代编程语言编写,但路径遍历等经典漏洞仍然存在问题。 

安全团队应将其 Ollama 实例更新至最新版本以缓解此漏洞。此外,建议不要将 Ollama 暴露在互联网上,除非它受到某种身份验证机制(如反向代理)的保护。 

负责任的披露时间表 

我们于 2024 年 5 月负责任地向 Ollama 的开发团队披露了此漏洞。Ollama 迅速调查并解决了该问题,并向我们通报了最新情况。 

2024 年 5 月 5 日——Wiz Research 向 Ollama 报告了该问题。

2024 年 5 月 5 日——Ollama 确认收到报告。 

2024 年 5 月 5 日——Ollama 通知 Wiz Research,他们已向 GitHub 提交了修复程序。 

2024 年 5 月 8 日——Ollama 发布修补版本。 

2024 年 6 月 24 日——Wiz Research 发布了一篇关于此问题的博客。 

Ollama 在收到我们的初步报告后大约 4 小时内就做出了修复,展现了令人印象深刻的响应时间和对产品安全的承诺。 

https://www.wiz.io/blog/probllama-ollama-vulnerability-cve-2024-37032#the-vulnerability-arbitrary-file-write-via-path-traversal-25

原文始发于微信公众号(Ots安全):Probllama:Ollama AI 远程代码执行漏洞 (CVE-2024-37032) – 概述和缓解措施

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月30日22:18:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Probllama:Ollama AI 远程代码执行漏洞 (CVE-2024-37032) - 概述和缓解措施https://cn-sec.com/archives/2901520.html

发表评论

匿名网友 填写信息