Apache Airflow Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apache Airflow служить платформою для орchestrating та планування даних pipelines або workflows. Термін "орchestrating" в контексті даних pipelines означає процес організації, координації та управління складними даними workflows, що походять з різних джерел. Основна мета цих оркестрованих даних pipelines полягає в наданні оброблених та споживаних наборів даних. Ці набори даних широко використовуються безліччю додатків, включаючи, але не обмежуючись, інструментами бізнес-аналітики, моделями науки про дані та машинного навчання, які є основою функціонування додатків великих даних.
В основному, Apache Airflow дозволить вам планувати виконання коду, коли щось (подія, cron) відбувається.
Ви можете використовувати файл конфігурації docker-compose з https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml для запуску повного середовища apache airflow docker. (Якщо ви на MacOS, переконайтеся, що ви виділили принаймні 6 ГБ оперативної пам'яті для docker VM).
Один із простих способів запустити apache airflow - це запустити його з minikube:
Airflow може зберігати чутливу інформацію у своїй конфігурації або ви можете знайти слабкі конфігурації:
Airflow ConfigurationПеред початком атаки на Airflow ви повинні зрозуміти як працюють дозволи:
Airflow RBACЯкщо у вас є доступ до веб-консолі, ви можете отримати доступ до деякої або всієї наступної інформації:
Змінні (Користувацька чутлива інформація може зберігатися тут)
З'єднання (Користувацька чутлива інформація може зберігатися тут)
Доступ до них за адресою http://<airflow>/connection/list/
Конфігурація (Чутлива інформація, така як secret_key
та паролі, може зберігатися тут)
Список користувачів та ролей
Код кожного DAG (який може містити цікаву інформацію)
Змінні можуть зберігатися в Airflow, щоб DAG могли отримувати їх значення. Це схоже на секрети інших платформ. Якщо у вас є достатні дозволи, ви можете отримати доступ до них у GUI за адресою http://<airflow>/variable/list/
.
Airflow за замовчуванням покаже значення змінної в GUI, однак, відповідно до цього, можливо встановити список змінних, значення яких з'являться як зірочки в GUI.
Однак ці значення все ще можуть бути отримані через CLI (вам потрібно мати доступ до БД), виконання довільного DAG, API доступ до кінцевої точки змінних (API потрібно активувати) і навіть сам GUI! Щоб отримати доступ до цих значень з GUI, просто виберіть змінні, до яких ви хочете отримати доступ, і натисніть на Дії -> Експорт. Інший спосіб - виконати брутфорс до прихованого значення, використовуючи фільтрацію пошуку, поки ви його не отримаєте:
Якщо конфігурація expose_config
встановлена на True, з ролі Користувач і вище можуть читати конфігурацію в вебі. У цій конфігурації з'являється secret_key
, що означає, що будь-який користувач з цим дійсним ключем може створити свій власний підписаний cookie, щоб видавати себе за будь-який інший обліковий запис користувача.
Якщо у вас є доступ на запис до місця, де зберігаються DAG, ви можете просто створити один, який надішле вам зворотний шелл. Зверніть увагу, що цей зворотний шелл буде виконуватись всередині контейнера airflow worker:
Якщо ви налаштуєте щось на виконання в корені коду, на момент написання цього тексту, це буде виконано планувальником через кілька секунд після розміщення його в папці DAG.
Якщо вам вдасться зламати машину всередині кластера DAG, ви зможете створити нові скрипти DAG у папці dags/
, і вони будуть репліковані на решті машин всередині кластера DAG.
Коли ви виконуєте DAG з GUI, ви можете передавати аргументи йому. Отже, якщо DAG не правильно закодований, він може бути вразливим до впровадження команд. Саме це сталося в цьому CVE: https://www.exploit-db.com/exploits/49927
Все, що вам потрібно знати, щоб почати шукати впровадження команд у DAG, це те, що параметри доступні за допомогою коду dag_run.conf.get("param_name")
.
Більше того, та ж вразливість може виникнути з змінними (зверніть увагу, що з достатніми привілеями ви могли б контролювати значення змінних в GUI). Змінні доступні за допомогою:
Якщо вони використовуються, наприклад, всередині команди bash, ви можете виконати ін'єкцію команди.
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)