llama_index的CVE-2024-4181漏洞根因分析
2024-11-21 16:10:20 Author: www.freebuf.com(查看原文) 阅读量:0 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

在日常开发工作中,我遇到过一个让人心惊胆战的情况。

当时,我们的团队正忙着处理用户反馈,一个客户报告说他们的服务器上运行的代码遭受了异常的攻击迹象。

经过深入调查,我们发现问题的根源在于代码中对eval函数的不当使用,这暴露了系统的巨大风险。

类似的问题也出现在了llama_index库(版本0.9.47)中的RunGptLLM类中,该类存在一个命令注入漏洞。

这个库被JinaAI的RunGpt框架用来连接语言学习模型(LLM)。

该漏洞的产生是由于不正确地使用了eval函数,这种错误的使用使得恶意或被攻陷的LLM托管服务商可以在客户端机器上执行任意命令。

这个问题已经在版本0.10.13中得到了修复。如果这个漏洞被利用,托管服务商可以获得对客户端机器的完全控制权限。

下面是一个类似的代码示例,用以说明漏洞的基本原理:

import json
import os

# 模拟用户输入的数据
data = "__import__('os').system(\"echo '# Hello, Markdown!' > hello.md\")"

def main():
    # 直接在 eval 中使用用户可控的数据
    item_dict = json.loads(json.dumps(eval(data)))

if __name__ == "__main__":
    main()

在以上代码中,我们用到了eval函数直接执行用户输入的内容,这是一种非常危险的做法。

eval函数会将传入的字符串作为代码执行,这意味着如果用户输入包含恶意命令,例如上例中的__import__('os').system(...),它会执行任意命令。

在这个示例中,攻击者可以在你的系统中创建、删除文件甚至运行其它系统命令,完全控制机器。

为了避免这种情况,应避免直接使用eval来处理用户输入的数据。如果必须执行类似功能,可以考虑使用更为安全的库或采取严格的输入验证和限制。

总结来说,eval函数虽然强大,但也非常危险,它常常成为安全漏洞的根源。

在安全开发中,我们应尽量避免这种不安全的做法,替代方案包括使用专门的解析库、明确的数据验证以及安全沙箱环境等方法,确保代码在任何情况下都不会被恶意利用。

这个漏洞也被官方定义为CVE-2024-4181,

详细地址在:https://vulners.com/github/GHSA-PW38-XV9X-H8CH

image.png
相关PR见:https://github.com/run-llama/llama_index/commit/d73715eaf0642705583e7897c78b9c8dd2d3a7ba?diff=unified#diff-024fc1b3e2dc420507d50a44ae07ef0764c33ddcf84b61aa8b1bba4eb15e6e6dL217

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022


文章来源: https://www.freebuf.com/vuls/415855.html
如有侵权请联系:admin#unsafe.sh