Apache Airflow 严重漏洞 CVE-2026-68982 允许未经身份验证的远程代码执行
原创
ZM
ZM
暗镜
2026年11月12日 07:00
北京
去阅读
Apache Airflow 中存在一个严重的身份验证缺失漏洞,攻击者无需任何 Airflow 凭据即可在 Celery 工作节点上运行代码。该漏洞编号为CVE-2026-68982,属于 CWE-306 类型,影响使用 CeleryExecutor 的 3.4.0 之前的 Airflow 版本。
任何能够向 Celery 代理写入数据的人都可以让工作进程运行它可以导入的任何 Python 函数,并可以使用攻击者选择的参数。
安全研究员Or Sahar(来自 Reflectiz)发现了这个问题。他在 Docker Compose 环境中,使用 CeleryExecutor、Redis 代理和 PostgreSQL 后端,在 Airflow 3.2.1 和 3.3.0 版本上验证了该漏洞。Airflow 近几个月来出现了一些安全问题,但这次的漏洞完全不需要登录。
Airflow 为工作进程提供了三种接收指令的方式。Web UI 和 REST API 会拒绝没有凭据的用户。代理上的 ExecuteTask 消息携带一个签名令牌,执行 API 会在任务运行前验证该令牌。同一代理上的 ExecuteCallback 消息则不进行任何验证。
ExecuteCallback 函数用于同步截止时间警报回调,当 DAG 运行错过截止时间时,该函数会执行一个特定函数。调度器通过代理将回调发送给工作节点,工作节点导入并调用已配置的函数。由于代理从不对消息进行身份验证,攻击者可以伪造消息并自定义函数名称。execute\_workload 任务会将来自代理的任何 JSON 正文转换为类型化对象。它没有签名、HMAC 或代理端访问控制。回调消息包含一个 token 字段,但 3.2.1 版本中的 execute\_callback\_workload() 函数以及 3.3.0 版本中的 supervise\_callback() 和 CallbackSubprocess 函数都不会对其进行验证。
工作进程从消息中读取路径和关键字参数,使用 import\\_module 和 getattr 加载函数,并立即调用它。这样就能访问任何可导入的模块,包括操作系统、子进程和提供程序通知器类。
该功能被标记为实验性功能,但这并不限制其风险暴露。一旦 Celery 提供程序加载完毕,该处理程序就会注册到每个 CeleryExecutor 工作进程中。此前对Airflow 凭证泄露的研究表明,这些工作进程可以存储大量敏感数据。
攻击者伪造一个类型设置为 ExecuteCallback 且令牌为空的工作负载。回调对象使用 fetch\_method import\_path 并将路径设置为 os.system。其 kwargs 包含一个命令,例如 touch /tmp/pwned\_by\_broker\_callback。攻击者使用 Celery 的 send\_task(“execute\_workload”, …) 将其发送到类似 redis://:6379/0 的代理。
该攻击不需要 JWT、DAG、DagRun 或调度器。攻击后,Airflow 的 API 仍然报告 DAG 和 DagRun 的数量均为零,因此 UI 也未显示任何信息。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论