Apache Airflow Security
Last updated
Last updated
AWS Hacking öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
Apache Airflow, veri boru hatlarını veya iş akışlarını düzenlemek ve zamanlamak için bir platform olarak hizmet vermektedir. Veri boru hatları bağlamında "orchestrasyon" terimi, çeşitli kaynaklardan gelen karmaşık veri iş akışlarını düzenleme, koordine etme ve yönetme sürecini ifade eder. Bu düzenlenmiş veri boru hatlarının temel amacı, işlenmiş ve tüketilebilir veri setleri sağlamaktır. Bu veri setleri, iş zekası araçları, veri bilimi ve makine öğrenimi modelleri gibi birçok uygulama tarafından yaygın olarak kullanılmaktadır ve bunlar büyük veri uygulamalarının işleyişi için temeldir.
Temelde, Apache Airflow, bir şey (olay, cron) gerçekleştiğinde kodun yürütülmesini zamanlamanıza olanak tanır.
Tam bir apache airflow docker ortamı başlatmak için https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml adresinden docker-compose yapılandırma dosyasını kullanabilirsiniz. (Eğer MacOS kullanıyorsanız, docker VM'ye en az 6GB RAM vermeyi unutmayın).
Apache Airflow'u çalıştırmanın kolay bir yolu, minikube ile çalıştırmaktır:
Airflow, yapılandırmasında hassas bilgileri saklayabilir veya zayıf yapılandırmalar bulabilirsiniz:
Airflow'a saldırmaya başlamadan önce izinlerin nasıl çalıştığını anlamalısınız:
Eğer web konsoluna erişiminiz varsa, aşağıdaki bilgilerden bazılarına veya hepsine erişim sağlayabilirsiniz:
Değişkenler (Özel hassas bilgiler burada saklanabilir)
Bağlantılar (Özel hassas bilgiler burada saklanabilir)
http://<airflow>/connection/list/
adresinden erişin
Yapılandırma (Hassas bilgiler, örneğin secret_key
ve şifreler burada saklanabilir)
kullanıcılar & roller listesini görüntüleyin
Her DAG'ın kodu (ilginç bilgiler içerebilir)
Değişkenler Airflow'da saklanabilir, böylece DAG'lar değerlerine erişebilir. Bu, diğer platformların gizli bilgilerine benzer. Eğer yeterli izinleriniz varsa, bunlara http://<airflow>/variable/list/
adresinden GUI'de erişebilirsiniz.
Airflow varsayılan olarak değişkenin değerini GUI'de gösterir, ancak şuna göre, değerleri yıldızlar olarak görünecek şekilde değişkenler listesi ayarlamak mümkündür.
Ancak, bu değerler hala CLI aracılığıyla (DB erişiminiz olmalı), rastgele DAG çalıştırarak, API ile değişkenler uç noktasına erişerek (API'nin etkinleştirilmesi gerekir) ve hatta GUI'nin kendisiyle geri alınabilir! Bu değerleri GUI'den erişmek için sadece erişmek istediğiniz değişkenleri seçin ve Eylemler -> Dışa Aktar seçeneğine tıklayın. Başka bir yol, gizli değere ulaşmak için arama filtrelemesi kullanarak bruteforce yapmaktır:
Eğer expose_config
yapılandırması True olarak ayarlandıysa, Kullanıcı rolünden ve üstü web'deki yapılandırmayı okuyabilir. Bu yapılandırmada, secret_key
görünür, bu da geçerli olan herhangi bir kullanıcının kendi imzalı çerezini oluşturup başka bir kullanıcı hesabını taklit edebileceği anlamına gelir.
Eğer DAG'ların kaydedildiği yere yazma erişiminiz varsa, sadece bir tane oluşturabilirsiniz ve bu size bir ters kabuk gönderecektir. Bu ters kabuğun bir airflow işçi konteyneri içinde çalıştırılacağını unutmayın:
Eğer bir şeyi kodun kökünde çalıştırılacak şekilde ayarlarsanız, bu yazının yazıldığı anda, DAG'ın klasörüne yerleştirildikten birkaç saniye sonra zamanlayıcı tarafından çalıştırılacaktır.
Eğer DAG kümesindeki bir makineyi ele geçirirseniz, dags/
klasöründe yeni DAG scriptleri oluşturabilirsiniz ve bunlar DAG kümesindeki diğer makinelere kopyalanacaktır.
GUI'den bir DAG çalıştırdığınızda ona argümanlar geçirebilirsiniz. Bu nedenle, eğer DAG düzgün kodlanmamışsa Komut Enjeksiyonuna karşı savunmasız olabilir. Bu, bu CVE'de olan bir durumdur: https://www.exploit-db.com/exploits/49927
DAG'lerde komut enjeksiyonları aramaya başlamak için bilmeniz gereken tek şey, parametrelerin dag_run.conf.get("param_name")
kodu ile erişildiğidir.
Ayrıca, aynı zafiyet değişkenlerle de meydana gelebilir (yeterli ayrıcalıklara sahip olduğunuzda değişkenlerin değerini GUI'de kontrol edebilirsiniz). Değişkenler şu şekilde erişilir:
Eğer bir bash komutu içinde kullanılırlarsa, bir komut enjeksiyonu gerçekleştirebilirsiniz.
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)