Apache Airflow Security
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie 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 Ihnen ermöglichen, die Ausführung von Code zu planen, wenn etwas (Ereignis, Cron) passiert.
Sie können 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 Sie auf MacOS sind, stellen Sie sicher, dass Sie der Docker-VM mindestens 6 GB RAM zuweisen).
Eine einfache Möglichkeit, Apache Airflow auszuführen, besteht darin, es mit Minikube auszuführen:
Airflow könnte sensible Informationen in seiner Konfiguration speichern oder Sie können schwache Konfigurationen finden:
Airflow ConfigurationBevor Sie mit dem Angriff auf Airflow beginnen, sollten Sie verstehen, wie Berechtigungen funktionieren:
Airflow RBACWenn 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 auf 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 diesem möglich, 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 im Rest der 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 Berechtigungen den Wert der Variablen in der GUI steuern könnten). Variablen werden mit zugegriffen:
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)