CVE-2023-34541 LangChain 任意命令执行

news2024/11/16 21:26:02

漏洞简介

LangChain是一个用于开发由语言模型驱动的应用程序的框架。

在LangChain受影响版本中,由于load_prompt函数加载提示文件时未对加载内容进行安全过滤,攻击者可通过构造包含恶意命令的提示文件,诱导用户加载该文件,即可造成任意系统命令执行。

漏洞复现

在项目下编写 test.py

from langchain.prompts import load_prompt
if __name__ == '__main__':
    loaded_prompt = load_prompt("system.py")

同级目录下编写 system.py 执行系统命令 dir

import os
os.system("dir")

运行 test.py 返回了执行系统命令dir的结果

漏洞分析-_load_prompt_from_file

langchain.prompts.loading.load_prompt

try_load_from_hub 是尝试从给定的路径远程加载文件但是因为我们是加载本地文件,所以接下会跳转到 _load_prompt_from_file

langchain.prompts.loading._load_prompt_from_file

在 _load_prompt_from_file 根据文件的后缀,当后缀是 .py 时 最终会读取该文件并利用 exec 去执行

也就相当于,代码可以简写为

if __name__ == '__main__':
    file_path = "system.py"
    with open(file_path, "rb") as f:
        exec(f.read())

漏洞分析-try_load_from_hub

因为网络的原因一直没有办法复现成功,这里就代码层面进行一个详细的分析

from langchain.prompts import load_prompt

if __name__ == '__main__':
    loaded_prompt = load_prompt("lc://prompts/../../../../../../../system.py")

langchain.prompts.loading.load_prompt

langchain.utilities.loading.try_load_from_hub

首先匹配了 HUB_PATH_RE = re.compile(r"lc(?Pref@[^:]+)?://(?Ppath.*)")  所以需要满足最开始是 lc://然后对后面的内容进行匹配,要求第一个字段的值是 prompts 最后的后缀要在 {'py', 'yaml', 'json'} 中

最后拼接请求的url 可以通过 ../../../ 绕出项目的限制,指向我们设定好的文件,并读取加载实现任意命令执行

漏洞小结

在最新版本上面进行尝试,仍然存在这个漏洞,这个漏洞的本质就是可以加载执行本地或者指定的 python  文件,但是在实际应用中这个问题应该并不是那么好进行利用,因为 python 文件的地址要可控才行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/692700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS:服务通信机制详解

目录 ROS:通信机制一、服务通信机制简介1.1概念1.2作用 二、服务通信理论模型三、服务通信自定义srv3.1目的3.2流程3.2.1创建srv文件3.2.2编辑配置文件3.2.3.编译 四、服务通信自定义srv调用(C)4.1要求4.2流程4.3vscode配置4.4服务端代码4.5客户端代码4.6配置 CMake…

知识图谱相关概念整理

文章目录 1、概论2、什么是知识图谱?3、知识图谱构建3.1、构建知识图谱的生命周期3.2、Schema定义3.3、知识抽取3.4、知识融合3.5、知识存储3.6、知识推理 4、图谱建设的一些经验 1、概论 知识图谱(KnowledgeGraph)以结构化的形式描述客观世界…

C# Winform DataGridView 控件和 DataTable

目录 一、概述 二、DataTable 的用法 1.创建表和列 2.添加行 3.取值和赋值 4.删除行 5.遍历 DataTable 6.判断 DataTable 列中是否存在某个值 7.设置主键 8.获取 DataRow 所在的行号 9.DataTable 转换为 List 10.将 List 转 DataTable 三、DataGridView 的用法 1…

记录好项目D16

记录好项目 你好呀,这里是我专门记录一下从某些地方收集起来的项目,对项目修改,进行添砖加瓦,变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是个电影购票系统 一、系统介绍 前台 普通用户注册、登录、注销 用户…

Redis哨兵——单机安装部署

Redis哨兵——单机安装部署 目录 主从配置: 部署redis哨兵: 结 果 验 证: 主从配置: 1.安装epel源:yum install epel-release -y 2.安装软件:yum install redis -y 3.新建文件夹便于验证:m…

DAY31:回溯算法(六):子集+子集Ⅱ+递增子序列(经典子集问题)

78.子集 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例1: 输入:nums [1,2,3] 输出:[[],[1],[2],…

Label,RC,HPA

上面简单说了一下 pod 的基本知识点,待到后面会使用到 pod 的一些高阶知识点的时候,还可以再细细琢磨底层原理 我们接着继续学习 Lable , RC,HPA 的相关知识点 Label 是什么? label 就是标签,例如之前我们…

Redis进阶 - Redis哨兵

原文首更地址,阅读效果更佳! Redis进阶 - Redis哨兵 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-advance-sentinel.html 思考 slave 节点宕机恢复以后可以找 master 节点同步数据,那么 master 节点宕机怎么办&am…

Vue事件捕获和事件冒泡

什么是事件? 当一个HTML元素产生一个事件时 该事件会在元素节点与根节点之间的路径传播, 路径所经过的节点都会收到该事件,这个传播的过程叫做DOM事件流 什么是事件捕获?(网景) 事件捕获:事件捕获会从document开始触…

神经网络如何入门?

推荐《Python神经网络编程》这本入门书。豆瓣评分9.2。 如果你可以进行加、减、乘、除运算,那么你就可以制作自己的神经网络。我们使用的最困难运算是梯度演算(gradient calculus),但是,我们会对这一概念加以说明&…

基于Java+Springboot+Vue的校园爱心捐赠互助管理系统设计和实现

博主介绍:擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案例…

Android Studio 找不到 uploadArchives 入口

在4.2之前版本的 Android Studio 中想要module 打包arr,上传Maven 我们只需要 在对应module的build.gradle文件顶部添加 apply plugin: maven然后每一次修改记得要修改版本号,相同版本号提交失败,是不会覆盖的 defaultConfig {......versi…

GitLab+Jenkins实现持续集成自动化测试

一、Jenkins和GitLab互相关联 1、在Jenkins设置gitlab的认证。 1)复制gitlab->clone with HTTP 的URL 如果你想学习接口自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的接口自动化测试教程,同时在线人数到达1000人…

Python3.7源码编译

1.下载Python3.7.0源码 git clone https://github.com/python/cpython.git git checkout v3.7.0wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz源码目录结构如下所示: (1)Include目录:包含Python提供的所有…

反射来命令执行存在的一些问题

一.利用Runtime进行反射 java.lang.Runtime.getRuntime().exec("")若使用该paylaod,比如若依利用点如下: Object bean Class.forName(beanName).newInstance(); invokeMethod(bean, methodName, methodParams)想要通过Class.forName(beanNa…

2023年软考成绩查询方式有变,成绩快出来了!

2023年软考成绩查询方式有变化,准考证不再作为成绩查询凭证使用。以前的成绩查询方式是考生可以凭准考证或者证件号查询,2023年则取消准考证方式,改为考生必须先登录自己的账号,再凭登录账户的注册证件号查询考试成绩。 那为什么…

psd 2

而 P X ( ω ) P_{X}(\omega) PX​(ω)则是随机信号在该(角)频率处平均具有的能量

《论文阅读》DiaASQ:基于会话方面的情感四重分析的基准 ACL2023

《论文阅读》DiaASQ : A Benchmark of Conversational Aspect-based Sentiment Quadruple Analysis 前言相关知识Aspect-based Sentiment Analysis简介数据集基线模型损失函数总结前言 你是否也对于理解论文存在困惑? 你是否也像我之前搜索论文解读,得到只是中文翻译的解读…

C++学习 运算符

运算符 执行代码的运算。 种类 算数运算符 用于四则运算。 #include <iostream> using namespace std; int main() // 除了cout那行代码外&#xff0c;所有C程序都要写那些默认行 -endl进行换行 // 格式化代码 ctrlk ctrlf {int a 11;int b 3;int c 0;double d 9.17…

绘制原型图xstar简介

文章目录 1. 文章引言2. xstar的安装3. xstar的元件库4. xstar的下载地址 1. 文章引言 最近在学习原型图&#xff0c;针对画原型图的工具&#xff0c;反复对比墨刀、Axure、xiaopiu后&#xff0c;最终选择了Axure。 同时也看到另一款&#xff0c;绘制原型图的工具&#xff0c;…