CVE-2025-7707CVE-2025-7707是llama_index库0.12.33版本中存在的一个高危安全漏洞。该漏洞源于llama_index在初始化NLTK(Natural Language Toolkit)组件时,默认将NLTK数据目录设置为代码库的一个子目录,而非用户专属目录。在多用户操作系统环境(如Linux多用户服务器或共享开发环境)中,该子目录的权限配置为全局可写(world-writable),这意味着任何本地用户都可以读取、修改、删除或替换该目录下的NLTK数据文件。
该漏洞由安全研究员[email protected]通过huntr漏洞赏金平台发现并披露,CVSS 3.1评分为7.8分,属于高危级别。漏洞的攻击向量为本地(AV:L),攻击者只需具备低权限(PR:L),无需用户交互(UI:N)即可实施攻击。一旦被利用,攻击者可以篡改NLTK数据文件,导致拒绝服务、数据篡改,甚至在特定场景下实现权限提升。例如,攻击者可以将恶意的NLTK数据文件(如恶意分词模型或语料库)植入共享目录,当其他用户或特权进程使用llama_index时,将加载并执行恶意数据,从而导致代码执行或敏感信息泄露。
该漏洞的根本问题在于使用了共享缓存目录而非用户隔离的缓存目录(如~/.cache/nltk_data),违反了最小权限原则。llama_index作为一款广泛使用的LLM应用开发框架,其安全性直接影响到大量下游应用,因此该漏洞的影响范围不容忽视。官方已通过提交98816394d57c7f53f847ed7b60725e69d0e7aae4进行修复,建议用户尽快升级到修复版本。
漏洞的技术原理在于llama_index库在版本0.12.33中对NLTK数据路径的硬编码处理。NLTK是Python自然语言处理的核心库,其数据文件(如分词器、语料库、训练模型等)默认下载到nltk.data.path中指定的目录。llama_index在集成NLTK功能时,将NLTK数据搜索路径设置为了代码库内的一个相对路径子目录(如./nltk_data或类似路径),而非标准的用户级缓存目录(如~/.local/share/nltk_data或~/nltk_data)。
在多用户Linux系统中,如果该子目录以默认权限创建(即umask为022),则目录权限为drwxr-xr-x-r(755)或更宽松的drwxrwxrwx(777),使得所有本地用户均具备写权限。攻击者利用方式如下:
1. 攻击者以普通用户身份登录多用户系统,定位llama_index安装目录下的NLTK数据子目录。
2. 攻击者利用写权限,在该目录中植入恶意的NLTK数据文件,例如恶意的pickle序列化文件(Python pickle反序列化漏洞可导致任意代码执行)或被篡改的语料库文件。
3. 当系统中的其他用户(特别是特权用户或运行llama_index应用的服务进程)使用llama_index进行文本处理时,NLTK会自动从该共享目录加载数据文件。
4. 恶意文件被加载后,攻击者可以实现拒绝服务(通过删除或损坏关键数据文件导致程序崩溃)、数据篡改(修改分词结果影响下游AI应用的输出)或权限提升(通过pickle反序列化等机制执行任意代码)。
修复方案是将NLTK数据目录设置为用户专属目录,或在创建目录时设置严格的权限(如0700),确保只有当前用户能够读写。