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 χρησιμεύει ως πλατφόρμα για τον προγραμματισμό και την οργάνωση ροών δεδομένων ή εργασιών. Ο όρος "οργάνωση" στο πλαίσιο των ροών δεδομένων σημαίνει τη διαδικασία της διάταξης, συντονισμού και διαχείρισης σύνθετων ροών εργασίας δεδομένων που προέρχονται από διάφορες πηγές. Ο κύριος σκοπός αυτών των οργανωμένων ροών δεδομένων είναι να παρέχουν επεξεργασμένα και καταναλώσιμα σύνολα δεδομένων. Αυτά τα σύνολα δεδομένων χρησιμοποιούνται εκτενώς από μια πληθώρα εφαρμογών, συμπεριλαμβανομένων, αλλά όχι περιοριστικά, εργαλείων επιχειρηματικής ευφυΐας, μοντέλων επιστήμης δεδομένων και μηχανικής μάθησης, τα οποία είναι θεμελιώδη για τη λειτουργία εφαρμογών μεγάλων δεδομένων.
Βασικά, το Apache Airflow θα σας επιτρέψει να προγραμματίσετε την εκτέλεση κώδικα όταν κάτι (γεγονός, cron) συμβαίνει.
Μπορείτε να χρησιμοποιήσετε το αρχείο ρυθμίσεων docker-compose από https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml για να εκκινήσετε ένα πλήρες περιβάλλον docker apache airflow. (Αν είστε σε MacOS, βεβαιωθείτε ότι δίνετε τουλάχιστον 6GB RAM στη VM docker).
Ένας εύκολος τρόπος για να τρέξετε το apache airflow είναι να το τρέξετε με το minikube:
Το Airflow μπορεί να αποθηκεύει ευαίσθητες πληροφορίες στη διαμόρφωσή του ή μπορεί να βρείτε αδύναμες διαμορφώσεις σε εφαρμογή:
Airflow ConfigurationΠριν ξεκινήσετε να επιτίθεστε στο Airflow, θα πρέπει να κατανοήσετε πώς λειτουργούν οι άδειες:
Airflow RBACΑν έχετε πρόσβαση στην κονσόλα ιστού, μπορεί να είστε σε θέση να αποκτήσετε πρόσβαση σε ορισμένες ή όλες τις παρακάτω πληροφορίες:
Μεταβλητές (Προσαρμοσμένες ευαίσθητες πληροφορίες μπορεί να αποθηκεύονται εδώ)
Συνδέσεις (Προσαρμοσμένες ευαίσθητες πληροφορίες μπορεί να αποθηκεύονται εδώ)
Πρόσβαση σε αυτές στο http://<airflow>/connection/list/
Διαμόρφωση (Ευαίσθητες πληροφορίες όπως το secret_key
και κωδικοί πρόσβασης μπορεί να αποθηκεύονται εδώ)
Λίστα χρηστών & ρόλων
Κώδικας κάθε DAG (ο οποίος μπορεί να περιέχει ενδιαφέρουσες πληροφορίες)
Οι μεταβλητές μπορούν να αποθηκεύονται στο Airflow ώστε οι DAGs να μπορούν να προσεγγίζουν τις τιμές τους. Είναι παρόμοιο με τα μυστικά άλλων πλατφορμών. Αν έχετε αρκετές άδειες, μπορείτε να τις αποκτήσετε μέσω της GUI στο http://<airflow>/variable/list/
.
Το Airflow από προεπιλογή θα δείξει την τιμή της μεταβλητής στη GUI, ωστόσο, σύμφωνα με αυτό, είναι δυνατόν να ορίσετε μια λίστα μεταβλητών των οποίων η τιμή θα εμφανίζεται ως αστερίσκοι στη GUI.
Ωστόσο, αυτές οι τιμές μπορούν να ανακτηθούν μέσω CLI (χρειάζεστε πρόσβαση στη βάση δεδομένων), εκτέλεσης αυθαίρετου DAG, API που αποκτά πρόσβαση στο endpoint μεταβλητών (η API πρέπει να είναι ενεργοποιημένη), και ακόμα και η ίδια η GUI! Για να αποκτήσετε πρόσβαση σε αυτές τις τιμές από τη GUI, απλώς επιλέξτε τις μεταβλητές που θέλετε να αποκτήσετε πρόσβαση και κάντε κλικ σε Ενέργειες -> Εξαγωγή. Ένας άλλος τρόπος είναι να εκτελέσετε μια bruteforce στην κρυφή τιμή χρησιμοποιώντας το φιλτράρισμα αναζήτησης μέχρι να την αποκτήσετε:
Αν η διαμόρφωση expose_config
είναι ρυθμισμένη σε True, από το ρόλο Χρήστη και άνω μπορούν να διαβάσουν τη διαμόρφωση στο διαδίκτυο. Σε αυτή τη διαμόρφωση, εμφανίζεται το secret_key
, που σημαίνει ότι οποιοσδήποτε χρήστης με αυτό το έγκυρο μπορεί να δημιουργήσει το δικό του υπογεγραμμένο cookie για να προσποιηθεί οποιονδήποτε άλλο λογαριασμό χρήστη.
Αν έχετε δικαιώματα εγγραφής στον χώρο όπου αποθηκεύονται οι DAGs, μπορείτε απλά να δημιουργήσετε έναν που θα σας στείλει μια reverse shell. Σημειώστε ότι αυτή η reverse shell θα εκτελείται μέσα σε ένα airflow worker container:
Αν ορίσετε κάτι να εκτελείται στη ρίζα του κώδικα, τη στιγμή που γράφεται αυτό, θα εκτελείται από τον προγραμματιστή μετά από μερικά δευτερόλεπτα αφού το τοποθετήσετε μέσα στον φάκελο του DAG.
Εάν καταφέρετε να συμβιβάσετε μια μηχανή μέσα στο DAG cluster, μπορείτε να δημιουργήσετε νέα σενάρια DAG στον φάκελο dags/
και θα αντιγραφούν στις υπόλοιπες μηχανές μέσα στο DAG cluster.
Όταν εκτελείτε ένα DAG από το GUI μπορείτε να περάσετε παραμέτρους σε αυτό. Επομένως, εάν το DAG δεν είναι σωστά κωδικοποιημένο, θα μπορούσε να είναι ευάλωτο σε Command Injection. Αυτό συνέβη σε αυτήν την CVE: https://www.exploit-db.com/exploits/49927
Όλα όσα χρειάζεται να γνωρίζετε για να ξεκινήσετε να αναζητάτε command injections σε DAGs είναι ότι οι παράμετροι προσπελάζονται με τον κώδικα 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)