Apache Airflow Security
Last updated
Last updated
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Apache Airflow sirve como una plataforma para orquestar y programar tuberías de datos o flujos de trabajo. El término "orquestación" en el contexto de las tuberías de datos significa el proceso de organizar, coordinar y gestionar flujos de trabajo de datos complejos que provienen de diversas fuentes. El propósito principal de estas tuberías de datos orquestadas es proporcionar conjuntos de datos procesados y consumibles. Estos conjuntos de datos son utilizados extensamente por una multitud de aplicaciones, incluyendo, pero no limitado a, herramientas de inteligencia empresarial, modelos de ciencia de datos y aprendizaje automático, todos los cuales son fundamentales para el funcionamiento de aplicaciones de big data.
Básicamente, Apache Airflow te permitirá programar la ejecución de código cuando algo (evento, cron) suceda.
Puedes usar el archivo de configuración de docker-compose de https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml para lanzar un entorno docker completo de apache airflow. (Si estás en MacOS asegúrate de darle al menos 6GB de RAM a la VM de docker).
Una forma fácil de ejecutar apache airflow es ejecutarlo con minikube:
Airflow podría almacenar información sensible en su configuración o puedes encontrar configuraciones débiles en su lugar:
Airflow ConfigurationAntes de comenzar a atacar Airflow, deberías entender cómo funcionan los permisos:
Airflow RBACSi tienes acceso a la consola web, podrías acceder a parte o toda la siguiente información:
Variables (Información sensible personalizada podría estar almacenada aquí)
Conexiones (Información sensible personalizada podría estar almacenada aquí)
Acceder a ellas en http://<airflow>/connection/list/
Configuración (Información sensible como el secret_key
y contraseñas podría estar almacenada aquí)
Listar usuarios y roles
Código de cada DAG (que podría contener información interesante)
Las variables pueden ser almacenadas en Airflow para que los DAGs puedan acceder a sus valores. Es similar a los secretos de otras plataformas. Si tienes suficientes permisos, puedes acceder a ellas en la GUI en http://<airflow>/variable/list/
.
Airflow por defecto mostrará el valor de la variable en la GUI, sin embargo, de acuerdo a esto, es posible establecer una lista de variables cuyo valor aparecerá como asteriscos en la GUI.
Sin embargo, estos valores aún pueden ser recuperados a través de CLI (necesitas tener acceso a la base de datos), ejecución de DAG arbitrarios, API accediendo al endpoint de variables (la API necesita estar activada), y ¡incluso la propia GUI! Para acceder a esos valores desde la GUI, simplemente selecciona las variables que deseas acceder y haz clic en Acciones -> Exportar. Otra forma es realizar un bruteforce al valor oculto utilizando el filtro de búsqueda hasta que lo obtengas:
Si la configuración expose_config
está establecida en True, desde el rol Usuario y hacia arriba pueden leer la configuración en la web. En esta configuración, aparece el secret_key
, lo que significa que cualquier usuario con esto válido puede crear su propia cookie firmada para suplantar cualquier otra cuenta de usuario.
Si tienes acceso de escritura al lugar donde se guardan los DAGs, puedes simplemente crear uno que te enviará un reverse shell. Ten en cuenta que este reverse shell se ejecutará dentro de un contenedor de trabajador de airflow:
Si configuras algo para que sea ejecutado en la raíz del código, en el momento de escribir esto, será ejecutado por el programador después de un par de segundos de colocarlo dentro de la carpeta del DAG.
Si logras comprometer una máquina dentro del clúster DAG, puedes crear nuevos scripts de DAG en la carpeta dags/
y serán replicados en el resto de las máquinas dentro del clúster DAG.
Cuando ejecutas un DAG desde la GUI, puedes pasar argumentos a él. Por lo tanto, si el DAG no está correctamente codificado, podría ser vulnerable a la Inyección de Comandos. Eso es lo que ocurrió en este CVE: https://www.exploit-db.com/exploits/49927
Todo lo que necesitas saber para comenzar a buscar inyecciones de comandos en DAGs es que los parámetros son accedidos con el código dag_run.conf.get("param_name")
.
Además, la misma vulnerabilidad podría ocurrir con variables (ten en cuenta que con suficientes privilegios podrías controlar el valor de las variables en la GUI). Las variables son accedidas con:
Si se utilizan, por ejemplo, dentro de un comando bash, podrías realizar una inyección de comandos.
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)