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

news2024/11/17 14:47:08

漏洞简介

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的结果

65f910e3eb998cff1fcd66ce7b611179.png

漏洞分析-_load_prompt_from_file

langchain.prompts.loading.load_prompt

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

langchain.prompts.loading._load_prompt_from_file

eb62cee33ba0af7883abfcdbc04c7b94.png_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

4488ffe1144414e5467bb2d3726da73c.png langchain.utilities.loading.try_load_from_hub 229ac02ea30438052ac874c36eb541e3.png 首先匹配了 HUB_PATH_RE = re.compile(r"lc(?Pref@[^:]+)?://(?Ppath.*)")  所以需要满足最开始是 lc:// 然后对后面的内容进行匹配,要求第一个字段的值是 prompts 最后的后缀要在 {'py', 'yaml', 'json'}0443885b4a4a18dcca2e0dee03d8be19.png 最后拼接请求的url 可以通过 ../../../ 绕出项目的限制,指向我们设定好的文件,并读取加载实现任意命令执行

漏洞小结

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

原创稿件征集

征集原创技术文章中,欢迎投递

投稿邮箱:edu@antvsion.com

文章类型:黑客极客技术、信息安全热点安全研究分析等安全相关

通过审核并发布能收获200-800元不等的稿酬。

更多详情,点我查看!

b8f080c8f10892f7845e0abd03d246bd.gif

九周年庆,戳“阅读原文

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

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

相关文章

单片机学习 14-DS18B20温度传感器实验

DS18B20 温度传感器实验 ​ 本次实验我们来学习精度较高的外部 DS18B20 数字温度传感器,由于此传感器是单总线接口,所以需要使用 51 单片机的一个 IO 口模拟单总线时序与 DS18B20 通信,将检测的环境温度读取出来。开发板上集成了 1 个 DS18B…

createdTime(new Date()) 数据库时间比实际多八小时

本来是createdTime(new Date()),一次生成两条数据 一直正常,今天却多八小时 一开始往new Date()差八个小时的问题上找, 网上说要 在apprication.yml文件中配置一下数据…

大佬详细讲解:银行核心项目之测试阶段

最近有小伙伴留言说「想了解核心系统建设中,冒烟、SIT、UAT、回归测试的重点,如何设计测试案例,或相关的资料推荐等」。 这个话题很笼统,测试这一块儿除了业务测试,还有性能测试、安全测试等;以及不同的角…

解决pyecharts图表在jupyter notebook无法显示的问题

在jupyter notebook尝试制作pyecharts图表,遇到无法显示的问题,网上查到的结果有各种不同原因,此处一一罗列,便于大家排查并彻底解决问题。 情况1:图表完全无法显示 解决方案:参考此文档 注:…

web自动化测试——xpath和css语法详解(五)

目录 1.css选择器 1.1什么是css选择器? 1.2css选择器语法 2.xpath 1.什么是xpath? 2.什么是XML? 3.XML与HTML 4.节点的概念 5.XPath 🎁更多干货 完整版文档下载方式: 1.css选择器 1.1什么是css选择器&#xff1…

SmaAt-UNet github

来源 SmaAt-UNet github SmaAt-UNet: 使用小型关注网结构的降水预报 论文链接 安装依赖 这个项目使用poetry作为依赖性管理。因此,安装所需的依赖项就像这样简单: conda create --name smaat-unet python3.9 conda activate smaat-unet p…

基于Java学生宿舍管理设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

正负压自动控制技术在离体肺通气系统中的应用

摘要:模拟肺呼吸过程的离体肺通气控制新方法——真空压力(正负压)法,目前还停留在理论层面的文献报道,还未见到这种方法的仪器化内容和细节。本文基于这种新方法提出了仪器化实现的具体解决方案,解决方案的…

闲置iPad Pro打造真正的生产力工具!使用vscode编程写代码

文章目录 前言视频教程1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7…

Windows电脑玩游戏出现白屏的解决方法

逢年过节玩游戏,周末放假玩游戏,休闲娱乐玩游戏…玩游戏成了不少电脑用户的小乐趣。但是有时候在玩游戏的过程中,会遇到一些令人头疼的问题,比如游戏突然白屏,无法正常进行。这种情况可能会影响游戏体验,甚…

Recurdyn导入x_t格式装配体

装配层次结构:选上表示导入的装配体包括子装配体,再勾选body或者subsystem表示子装配体以零件或者子系统显示在recurdyn中;不选,表示导入的装配体全部以零件显示。

如何修改 Linux 的时区

文章结构 一、查看 Linux 当前时区二、获取时区 TZ 值(可选做)三、配置 TZ 值四、加载配置并检验是否生效 TZ 是 time zone 的缩写! 一、查看 Linux 当前时区 你可以使用如下命令非常容易地就查看到 Linux 系统的当前时区: # 查…

AE插件:能量激光描边光效特效Saber Mac

Saber Mac插件主要用于AE软件中创造制作:能量光束,光剑,激光,传送门,霓虹灯,闪电,电流,朦胧等特效,插件操作直观简单,含有25种不同类型的特效预设&#xff08…

【sql注入-WAF绕过】编写sqlmap的tamper进行sql注入

目录 编写sqlmap的绕过脚本 二、理论知识2 sqlmap的tamper脚本 三、实战部分 一、理论知识1 编写sqlmap的绕过脚本 编写sqlmap的一个简单WAF绕过脚本 #!/usr/bin/env python""" Copyright (c) 2006-2023 sqlmap developers (https://sqlmap.org/) See th…

网络安全合规-银行业数据治理架构体系搭建(二)

本次《指引》使用了许多新兴词汇,这些词汇均是首次被监管部门正式引用,并出现在银行业金融机构的监督管理文件中。我们将通过这些词汇更好地理解《指引》。 首席数据官:“首席数据官”首次作为需要监管机构任职资格许可的管理岗位被提出。通过…

Cortex-M内核知识点总结

总览 Cortex内核 基础 寄存器组 程序在经过编译后,生成可执行二进制文件,如上图,是截取某个函数在flash中存储的内容 (反汇编文件)可以看到以下信息: 指令的存储地址 ,指令的二进制内容 , 指令代表的汇编类…

MyBatis—环境配置

MyBatis 🔎MyBatis 的定义🔎MyBatis 的环境配置添加依赖链接数据库配置 MyBatis 中的 XML 路径 一些人习惯将 MyBatis 称为 iBatis MyBatis → iBatis(Plus 版) 🔎MyBatis 的定义 MyBatis 是⼀款优秀的持久层框架, 它⽀持⾃定义 SQL、存储过…

基于 FFmpeg 的跨平台视频播放器简明教程(四):像素格式与格式转换

系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程(一):FFMPEG Conan 环境集成基于 FFmpeg 的跨平台视频播放器简明教程(二):基础知识和解封装(demux)基于 FFmpeg 的跨平台视频…

5G NR:RACH随机接入过程

1. 简述 无论是3G,4G还是现在的5G都需要随机接入过程,随机接入过程主要是为了让基站和UE之间做好上行同步以及初始接入。此文章仅仅帮助大家了解此过程,更加具体的用途及其场景需要参考具体的3GPP协议(38.211,38.212,38.213).主要帮助理解如下…

Redis设计与实现笔记之链表

以下为Redis链表中一个节点的结构 typedef struct listNode {// 前置节点struct listNode *prev;// 后置节点struct listNode *next;// 节点的值void *value;} listNode; 可以看见此结构与我们常见的双向链表结构类似。由前去后继节点的地址以及当前节点的值组成。 redis中链…