Apache Airflow Security
Grundlegende Informationen
Apache Airflow dient als Plattform zur Orchestrierung und Planung von Datenpipelines oder Workflows. Der Begriff "Orchestrierung" im Kontext von Datenpipelines bezeichnet den Prozess des Anordnens, Koordinierens und Verwaltens komplexer Datenworkflows, die aus verschiedenen Quellen stammen. Der Hauptzweck dieser orchestrierten Datenpipelines besteht darin, verarbeitete und nutzbare Datensätze bereitzustellen. Diese Datensätze werden von einer Vielzahl von Anwendungen umfassend genutzt, einschließlich, aber nicht beschränkt auf Business-Intelligence-Tools, Datenwissenschaft und Machine-Learning-Modelle, die alle grundlegend für die Funktionsweise von Big-Data-Anwendungen sind.
Grundsätzlich ermöglicht Ihnen Apache Airflow, die Ausführung von Code zu planen, wenn etwas (Ereignis, Cron) geschieht.
Lokales Labor
Docker-Compose
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).
Minikube
Eine einfache Möglichkeit, Apache Airflow auszuführen, besteht darin, es mit Minikube auszuführen:
Airflow Konfiguration
Airflow könnte sensible Informationen in seiner Konfiguration speichern oder es könnten schwache Konfigurationen vorhanden sein:
pageAirflow ConfigurationAirflow RBAC
Bevor Sie Airflow angreifen, sollten Sie verstehen, wie Berechtigungen funktionieren:
pageAirflow RBACAngriffe
Web-Konsolen-Auflistung
Wenn Sie Zugriff auf die Web-Konsole haben, könnten Sie möglicherweise auf einige oder alle der folgenden Informationen zugreifen:
Variablen (Benutzerdefinierte sensible Informationen könnten hier gespeichert sein)
Verbindungen (Benutzerdefinierte sensible Informationen könnten hier gespeichert sein)
Greifen Sie auf sie zu unter
http://<airflow>/connection/list/
Konfiguration (Sensible Informationen wie der
secret_key
und Passwörter könnten hier gespeichert sein)Liste der Benutzer & Rollen
Code jeder DAG (der möglicherweise interessante Informationen enthält)
Abrufen von Variablenwerten
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 ausreichende Berechtigungen haben, können Sie auf sie im GUI unter http://<airflow>/variable/list/
zugreifen.
Standardmäßig zeigt Airflow den Wert der Variablen im GUI an, jedoch ist es gemäß diesem möglich, eine Liste von Variablen festzulegen, deren Wert im GUI als Sternchen angezeigt wird.
Diese Werte können jedoch immer noch über CLI (Zugriff auf die DB erforderlich), beliebige DAG-Ausführung, API-Zugriff auf den Variablen-Endpunkt (die API muss aktiviert sein) und sogar das GUI selbst! abgerufen werden. Um auf diese Werte aus dem GUI zuzugreifen, wählen Sie einfach die Variablen aus, auf die Sie zugreifen möchten, und klicken Sie auf Aktionen -> Export. Ein weiterer Weg ist, eine Brute-Force auf den versteckten Wert durchzuführen, indem Sie ihn mit der Suchfilterung suchen, bis Sie ihn erhalten:
Privilege Escalation
Wenn die Konfiguration expose_config
auf True gesetzt ist, können ab der Rolle Benutzer aufwärts 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 ein beliebiges anderes Benutzerkonto zu imitieren.
DAG Backdoor (RCE in Airflow worker)
Wenn Sie Schreibzugriff auf den Ort haben, an dem die DAGs gespeichert sind, können Sie einfach einen erstellen, der Ihnen eine umgekehrte Shell sendet. Beachten Sie, dass diese umgekehrte Shell innerhalb eines Airflow-Worker-Containers ausgeführt wird:
DAG Backdoor (RCE in Airflow Scheduler)
Wenn Sie etwas im Stamm des Codes ausführen, wird es zum Zeitpunkt des Verfassens dieses Textes vom Scheduler ausgeführt, ein paar Sekunden nachdem es im DAG-Ordner platziert wurde.
DAG-Erstellung
Wenn es Ihnen gelingt, eine Maschine innerhalb des DAG-Clusters zu kompromittieren, können Sie neue DAG-Skripte im dags/
-Ordner erstellen, die dann in den anderen Maschinen im DAG-Cluster repliziert werden.
DAG-Codeinjektion
Wenn Sie einen DAG aus der GUI ausführen, können Sie Argumente übergeben. Daher könnte der DAG anfällig für Befehlsinjektion sein, wenn er nicht ordnungsgemäß codiert ist. Das ist das, was bei dieser CVE passiert ist: https://www.exploit-db.com/exploits/49927
Alles, was Sie wissen müssen, um nach Befehlsinjektionen in DAGs zu suchen, ist, dass Parameter mit dem Code dag_run.conf.get("param_name")
abgerufen werden.
Darüber hinaus könnte dieselbe Schwachstelle bei Variablen auftreten (beachten Sie, dass Sie mit ausreichenden Berechtigungen den Wert der Variablen in der GUI steuern könnten). Variablen werden mit abgerufen:
Wenn sie zum Beispiel innerhalb eines Bash-Befehls verwendet werden, könnten Sie eine Befehlsinjektion durchführen.
Last updated