Apache Airflow Security
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apache Airflow dient als Plattform für die Orchestrierung und Planung von Datenpipelines oder Workflows. Der Begriff "Orchestrierung" im Kontext von Datenpipelines bezeichnet den Prozess der Anordnung, Koordination und Verwaltung komplexer Daten-Workflows, die aus verschiedenen Quellen stammen. Der Hauptzweck dieser orchestrierten Datenpipelines besteht darin, verarbeitete und konsumierbare Datensätze bereitzustellen. Diese Datensätze werden umfassend von einer Vielzahl von Anwendungen genutzt, einschließlich, aber nicht beschränkt auf Business-Intelligence-Tools, Datenwissenschafts- und Machine-Learning-Modelle, die alle grundlegend für das Funktionieren von Big-Data-Anwendungen sind.
Im Grunde wird Apache Airflow es dir ermöglichen, die Ausführung von Code zu planen, wenn etwas (Ereignis, Cron) passiert.
Du kannst die Docker-Compose-Konfigurationsdatei von https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml verwenden, um eine vollständige Apache Airflow Docker-Umgebung zu starten. (Wenn du auf MacOS bist, stelle sicher, dass du der Docker-VM mindestens 6 GB RAM zuweist).
Eine einfache Möglichkeit, Apache Airflow auszuführen, besteht darin, es mit Minikube zu betreiben:
Airflow könnte sensible Informationen in seiner Konfiguration speichern oder Sie könnten schwache Konfigurationen finden:
Bevor Sie mit dem Angriff auf Airflow beginnen, sollten Sie verstehen, wie Berechtigungen funktionieren:
Wenn Sie Zugriff auf die Webkonsole haben, könnten Sie in der Lage sein, einige oder alle der folgenden Informationen zuzugreifen:
Variablen (Benutzerdefinierte sensible Informationen könnten hier gespeichert sein)
Verbindungen (Benutzerdefinierte sensible Informationen könnten hier gespeichert sein)
Zugriff darauf in http://<airflow>/connection/list/
Konfiguration (Sensible Informationen wie der secret_key
und Passwörter könnten hier gespeichert sein)
Liste der Benutzer & Rollen
Code jedes DAG (der interessante Informationen enthalten könnte)
Variablen können in Airflow gespeichert werden, damit die DAGs auf ihre Werte zugreifen können. Es ist ähnlich wie bei Geheimnissen anderer Plattformen. Wenn Sie genug Berechtigungen haben, können Sie sie in der GUI unter http://<airflow>/variable/list/
abrufen.
Airflow zeigt standardmäßig den Wert der Variablen in der GUI an, jedoch ist es laut dieser Möglichkeit, eine Liste von Variablen festzulegen, deren Wert in der GUI als Sternchen angezeigt wird.
Diese Werte können jedoch weiterhin über CLI (Sie müssen DB-Zugriff haben), willkürliche DAG-Ausführung, API-Zugriff auf den Variablen-Endpunkt (die API muss aktiviert sein) und sogar die GUI selbst! Um auf diese Werte über die GUI zuzugreifen, wählen Sie einfach die Variablen aus, auf die Sie zugreifen möchten, und klicken Sie auf Aktionen -> Exportieren. Eine andere Möglichkeit besteht darin, einen Bruteforce auf den versteckten Wert durchzuführen, indem Sie die Suchfilterung verwenden, bis Sie ihn erhalten:
Wenn die Konfiguration expose_config
auf True gesetzt ist, können Benutzer ab der Rolle Benutzer und darüber hinaus die Konfiguration im Web lesen. In dieser Konfiguration erscheint der secret_key
, was bedeutet, dass jeder Benutzer mit diesem gültigen Schlüssel seinen eigenen signierten Cookie erstellen kann, um sich als ein anderer Benutzeraccount auszugeben.
Wenn Sie Schreibzugriff auf den Ort haben, an dem die DAGs gespeichert sind, können Sie einfach einen erstellen, der Ihnen eine Reverse-Shell sendet. Beachten Sie, dass diese Reverse-Shell innerhalb eines Airflow-Worker-Containers ausgeführt wird:
Wenn Sie etwas auf der Wurzel des Codes ausführen lassen, wird es zum Zeitpunkt des Schreibens vom Scheduler ausgeführt, nachdem es ein paar Sekunden lang im DAG-Ordner platziert wurde.
Wenn es Ihnen gelingt, eine Maschine im DAG-Cluster zu kompromittieren, können Sie neue DAG-Skripte im dags/
-Ordner erstellen, und sie werden in den restlichen Maschinen im DAG-Cluster repliziert.
Wenn Sie einen DAG über die GUI ausführen, können Sie Argumente an ihn übergeben. Daher könnte der DAG, wenn er nicht ordnungsgemäß codiert ist, anfällig für Command Injection sein. Das ist, was in diesem CVE passiert ist: https://www.exploit-db.com/exploits/49927
Alles, was Sie wissen müssen, um nach Command Injections in DAGs zu suchen, ist, dass Parameter mit dem Code dag_run.conf.get("param_name")
zugegriffen werden.
Darüber hinaus könnte die gleiche Verwundbarkeit auch bei Variablen auftreten (beachten Sie, dass Sie mit ausreichenden Rechten den Wert der Variablen in der GUI steuern könnten). Variablen werden zugegriffen mit:
Wenn sie beispielsweise innerhalb eines Bash-Befehls verwendet werden, könnten Sie eine Befehlsinjektion durchführen.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)