CVE-2020-11978 · Bilgilendirme

Apache Airflow Command Injection

Airflow'daki örnek DAG'lerde keşfedilen uzaktan kod enjeksiyonu zafiyeti, sistem güvenliğini tehdit ediyor.

Üretici
Apache
Ürün
Airflow
Seviye
yüksek
Yayın Tarihi
05 Nisan 2026
Okuma
8 dk okuma

CVE-2020-11978: Apache Airflow Command Injection

Zorluk Seviyesi: Orta | Kaynak: CISA KEV

Zafiyet Analizi ve Giriş

CVE-2020-11978, Apache Airflow'un örnek DAG'larından (Directed Acyclic Graph) birinde keşfedilen uzaktan kod/komut enjeksiyonu zafiyetidir (RCE). Apache Airflow, veri işleme iş akışlarını yönetmek için popüler bir açık kaynaklı platformdur ve genellikle ETL (Extract, Transform, Load) süreçlerinde kullanılır. Bu zafiyet, özellikle örnek uygulamaları kullanarak proje geliştiren kullanıcılar için kritik bir tehdit oluşturabilir.

Zafiyetin tarihi, 2020 yılına kadar uzanmaktadır. Apache Airflow, sürekli olarak kullanıcı ihtiyaçlarına göre güncellenmekte ve özellikler eklenmektedir. Ancak, bu zafiyetin ortaya çıkışı, örnek DAG'larının içerisinde kötü niyetli bir yüklenici tarafından kullanılabilecek bir kod parçacığı içerisindeki hatadan kaynaklanmaktadır. Bu durum, kötü niyetli bir saldırganın uygulamanın çalıştığı sunucu üzerinde komut çalıştırmasına olanak tanımaktadır. Apache Airflow'un örnek DAG’ları, kurulum sırasında otomatik olarak kullanıcıların sistemlerine yüklenir ve bu da olası bir saldırıda genellikle ilk hedef olur.

CVE-2020-11978 zafiyetinin kullanıcılarıyla birlikte birçok sektörü etkilediği gözlemlenmiştir. Özellikle finans, sağlık, eğitim ve e-ticaret alanlarında yoğun olarak kullanılan Apache Airflow, zafiyetin keşfedilmesiyle birlikte bu sektörlerde ciddi riskler doğurmuştur. Örneğin, bir finansal kuruluş, veri işleme süreçlerinde Airflow kullanıyorsa, bu zafiyet aracılığıyla bir saldırganın işlem verilerini değiştirebilmesi veya hassas verilere erişebilmesi mümkün hale gelmiştir. Benzer şekilde, sağlık kuruluşları da hasta verilerini ve tedavi süreçlerini etkileyebilecek risklerle karşı karşıya kalmıştır.

Zafiyetin detaylarına inildiğinde, kullanıcıların doğrudan gelmesi gereken bir dizi kontrole tabi tutulmadan belirli bir komut ve kod geçişine izin vermesi dikkat çekmektedir. Örnek DAG'lar, gerektiğinde kod parçalarını dışarıdan alıp çalıştırabilmektedir. Bu durumda, bir komut enjeksiyonu gerçekleştirilebilir ve sistem üzerinden uzaktan komut kontrolü sağlanabilir. Kötü niyetli bir kullanıcı aşağıdaki gibi basit bir komut ile bu zafiyeti kullanabilir:

from airflow import DAG
from airflow.operators.bash_operator import BashOperator

dag = DAG('example_dag', schedule_interval='@daily')

command = "{{ var.value.user_input }} && cat /etc/passwd"

run_this = BashOperator(
    task_id='run_command',
    bash_command=command,
    dag=dag,
)

Yukarıdaki örnekte, user_input değişkenine girilen herhangi bir komut, sistem üzerinde çalıştırılabilir. Bu tür bir durum, saldırganlara sistem üzerinde tam kontrol sağlamak için kapı açar.

Sonuç olarak, CVE-2020-11978, Apache Airflow kullanıcıları için ciddi bir güvenlik tehdidi olarak karşımıza çıkmaktadır. Bu zafiyetin etkileri, veri güvenliği, sistem bütünlüğü ve hizmet sürekliliği açısından oldukça ağır sonuçlara yol açabilir. Kullanıcıların bu tür zafiyetleri minimize etmek için güvenlik yamalarını uygulanmaları ve kod gözden geçirme süreçlerine ekstra önem vermeleri gerekmektedir. Özellikle örnek kodların ve uygulamaların dikkatle incelenmesi, potansiyel kötü niyetli kullanımları önleyebilir.

Teknik Sömürü (Exploitation) ve PoC

Apache Airflow, veri işleme ve ETL (Extract, Transform, Load) süreçlerini yönetmek için oldukça popüler olan bir araçtır. Ancak, CVE-2020-11978 zafiyeti, Apache Airflow ile gelen örnek DAG'lerden (Directed Acyclic Graph) birinde uzaktan kod/komut enjeksiyonu (Remote Code Execution - RCE) riski taşıdığı anlamına geliyor. Bu zafiyet sayesinde kötü niyetli bir saldırgan, belirli bir ortamda zararlı komutlar çalıştırabilir. Şimdi bu zafiyetin nasıl sömürülebileceğine dair adım adım bir rehber sunacağız.

Öncelikle, hedef sistemin Apache Airflow uygulamasını çalıştırdığı ve uygun konfigürasyona sahip olduğu varsayımını yapıyoruz. Kullanıcıların yükleyebileceği veya değiştirebileceği örnek DAG'ler genellikle izinsiz kod çalıştırmak için potansiyel bir zemin sunar. RCE zafiyetinin istismar edilmesi, sistem yöneticileri ve geliştiricileri tarafından kontrol edilmediği sürece, büyük veri setlerine ve kritik bilgilere erişim sağlayabilir.

Adım 1: Hedef Analizi

İlk adım, Apache Airflow uygulamasının çalıştığı sunucunun adresini ve kullanılan AngularJS veya Flask gibi kullanıcı arayüzü bileşenlerini belirlemektir. Bunun için aşağıdaki gibi bir HTTP isteği gönderebiliriz:

curl -X GET http://<hedef_sunucu>:8080/

Sunucunun yanıtından, kullanılan sürüm hakkında bilgi alabiliriz. Özellikle, "DAG" ifadesinin geçip geçmediğini kontrol edin; bu, hedef sistemin Airflow kullanıp kullanmadığını gösterebilir.

Adım 2: Zafiyetin Varlığını Doğrulama

Eğer sunucuda örnek DAG'ler (örneğin, "example_bash_operator.py") varsa, bu, zafiyetin doğrulanması açısından önemlidir. DAG dosyasına bir istek göndererek belirli bir parametre üzerinden potansiyel bir komut çalıştırma arayışına geçebiliriz:

curl -X POST http://<hedef_sunucu>:8080/api/experimental/dags/example_bash_operator/dag_runs \
-H "Content-Type: application/json" \
-d '{"conf": {"key": "&& whoami"}}'

Burada, Airflow'un bir DAG çalıştırma isteği almasını sağlıyoruz. "key" parametresi içerisine eklenen && whoami komutu, sistemde hangi kullanıcı altında çalıştığımızı kontrol etmemize olanak tanıyacaktır.

Adım 3: Sömürü

Zafiyeti kesin bir şekilde açığa çıkardıktan sonra, komutun sistemde çalıştırılmasına yönelik bir payload oluşturabiliriz. Bu aşamada, "command" veya "bash" operatörünü kullanarak istediğimiz herhangi bir komutu çalıştırmamıza olanak tanıyacak bir JSON payload hazırlıyoruz:

curl -X POST http://<hedef_sunucu>:8080/api/experimental/dags/example_bash_operator/dag_runs \
-H "Content-Type: application/json" \
-d '{"conf": {"key": "&& <zarar_verici_komut>" }}'

Burada <zarar_verici_komut> yerine, sistem üzerinde çalıştırmak istediğimiz zararlı komut veya script yer almalıdır. Örneğin, dosyaları okumak için cat /etc/passwd komutunu kullanabiliriz.

Adım 4: Sonuç ve İzleme

İlgili komut çalıştırıldıktan sonra, sistemin yanıtını kontrol ederek başarılı olup olmadığını doğruladık. Komut çıktısını elde ettikten sonra (eğer bir yazılım sistemi veya veritabanına erişim sağlanmışsa), bu bilgileri kullanarak daha karmaşık saldırılar geliştirebiliriz.

Zafiyetin kapatılması için gerekli önlemler alınmalı ve sistem yöneticileri, Apache Airflow konfigürasyonlarını sıkı bir şekilde gözden geçirmelidir. Ayrıca, bu tarz örnek DAG'lerin, yalnızca eğitim ve test amaçları için kullanılmanın ötesinde, canlı sistemlerde kullanılmaması gerektiği unutulmamalıdır.

Sonuç olarak, CVE-2020-11978 zafiyeti, Apache Airflow kullanıcıları için önemli bir tehdit oluşturmaktadır. Bu tür güvenlik açıklarını proaktif bir yaklaşım benimseyerek kapatmak, sistem güvenliğini artırmak adına kritik öneme sahiptir.

Forensics (Adli Bilişim) ve Log Analizi

CVE-2020-11978, Apache Airflow'da keşfedilen ciddi bir uzaktan kod/komut enjeksiyon (RCE) zafiyetidir. Bu tür zafiyetler, siber güvenlik uzmanlarının dikkat etmesi gereken önemli tehlikeleri oluşturur. Özellikle bu zafiyet, Airflow'un sunduğu örnek DAG'lar (Directed Acyclic Graph) içinde yer almaktadır ve kötü niyetli kişilerin zararlı komutlar çalıştırmasına olanak tanımaktadır. Bu tür bir açık, bir saldırganın hedef sistemde istenmeyen komutlar çalıştırmasına ve potansiyel olarak sistemin tüm kontrolünü ele geçirmesine yol açabilir.

Bu tür bir zafiyet üzerinden bir saldırı gerçekleştirildiğinde, siber güvenlik uzmanları olayları tespit etmek için SIEM (Security Information and Event Management) sistemlerini ve log (kayıt) dosyalarını kullanmalıdır. Uygun log analizi, zafiyetten etkilenmiş bir sistemde meydana gelen olağandışı aktiviteleri tespit edebilmek için kritik öneme sahiptir.

Log analizinde dikkat edilmesi gereken bazı imzalar (signature) şunlardır:

  1. Olağandışı Hatalar (Error Logs): Apache Airflow'un hata loglarında (error logs) beklenmeyen hatalar veya komut çalıştırma girişimleri dikkat çekici olabilir. Özellikle komut satırı veya sistem yanıtları ile ilgili hatalar araştırılmalıdır. Örneğin, bir hata mesajındaki "command not found" ifadesi, belirtilen bir komutun çalıştırılmaya çalışıldığını ve bunun başarısız olduğunu gösterebilir.

  2. Erişim Kayıtları (Access Logs): Erişim logları (access logs), kullanıcıların sistemle etkileşimlerini gösterdiği için potansiyel saldırganların IP adreslerini ve zaman damgalarını içerebilir. Saldırganın IP adresi üzerinden sistemdeki olağandışı erişim desenleri veya bilinmeyen IP'lerden gelen erişim talepleri araştırılmalıdır.

  3. Şüpheli Komutlar: Logdaki belirli komutların yürütülmesi veya kötü niyetli komut kalıplarının tespit edilmesi önemlidir. Örneğin, curl, wget veya bash -c gibi komutların beklenmedik ve izinsiz bir şekilde kullanılması durumunda, bu tür log kayıtları ciddiyetle incelenmelidir.

# Şüpheli bir kullanımı örneklendiren bir komut:
curl -X POST http://&lt;TARGET_IP&gt;/execute --data 'command=malicious_command'
  1. Yetkisiz Erişim Denemeleri: Log dosyalarında görülen tekrarlanan 404 ve 403 hataları, saldırganların yetkisiz komutları çalıştırmaya veya sisteme girmeye çalıştığını gösterebilir. Bu tür girişimler genellikle hedef sistemin zayıf noktalarını araştıran bir saldırganın izlerini taşır.

Gerçek dünya senaryolarında, zafiyetten faydalanarak yapılacak saldırılar genellikle birkaç aşamalı olarak gerçekleşir: İlk olarak, bir saldırgan belirli bir örnek DAG'a erişim sağlamaya çalışır. Log kayıtları bu tür bir erişim talebini gösterebilir. Sonrasında, saldırgan kendi komutlarını çalıştırmak için kötü niyetli bir yük yükleme girişiminde bulunur. Bu noktada ilgili log dosyalarındaki imzalar, saldırının başarılı olup olmadığını tespit etmek için kritik öneme sahiptir.

Sonuç olarak, Apache Airflow üzerindeki CVE-2020-11978 zafiyeti, adli bilişim ve log analizi açısından siber güvenlik uzmanları için önemli bir konudur. Doğru log kaydı incelemesi ve imza analizi, bu tür zafiyetlerin etkilerini minimize etmek ve sistem güvenliğini sağlamak için önemli bir araçtır.

Savunma ve Sıkılaştırma (Hardening)

Apache Airflow, veri iş akışlarını yönetmek için yaygın olarak kullanılan bir platformdur. Ancak, CVE-2020-11978 zafiyeti, örnek DAG'lerde (Directed Acyclic Graph) uzaktan kod/komut enjeksiyonu (RCE - Remote Code Execution) yapma potansiyeline sahip olduğu için kritik bir tehdit oluşturmaktadır. Etkilenmiş DAG'lar, kötü niyetli kullanıcıların sistemde komutlar çalıştırmasına olanak tanır, bu da potansiyel veri sızıntıları ve sistem ihlalleri anlamına gelir.

Zafiyetin temel kaynağı, Airflow'un sağladığı bazı örnek DAG'ların, zararlı girdilere karşı yeterince koruma sağlamamasıdır. Bir saldırgan, bu DAG'ları kullanarak komut enjeksiyonu gerçekleştirebilir ve sunucuda istenmeyen işlemler yapabilir. Örneğin, bir saldırgan sistemde kullanıcı bilgilerini çalabilir veya kötü amaçlı yazılım yükleyebilir. Bu tür senaryolar, bir organizasyonun güvenlik açıklarını artırmakta ve ciddi veri ihlallerine yol açabilmektedir.

Bu durum, savunma ve sıkılaştırma (hardening) uygulamalarının ne kadar önemli olduğunu ortaya koymaktadır. Öncelikle, Apache Airflow'un en güncel sürümüne geçiş yaparak bu zafiyetin kapatıldığından emin olunmalıdır. Yeni sürümler genellikle güvenlik yamalarını içerir ve bilinen zafiyetlerin giderilmesine yardımcı olur. Bu güncellemeler dışında, zafiyetin etkilerini azaltmak için aşağıdaki teknik savunma yöntemleri önerilmektedir:

  1. Girdilerin Doğrulanması ve Filtrelenmesi: Kullanıcı girdileri, hesaplanan ve beklenen formatlarda olduğundan emin olmak için doğrulanmalı ve filtrelenmelidir. Örneğin, DAG'larda kullanılacak tüm giriş verileri, geçerlilik kontrolünden geçmeli ve zararlı karakterler (örneğin, ;, &&, ||) temizlenmelidir.

  2. Kod incelemesi ve güvenlik testleri: DAĞ'ların düzenli olarak gözden geçirilmesi ve güvenlik testlerine tabi tutulması, olası zafiyetlerin tespit edilmesine yardımcı olabilir. Buna örnek olarak, statik analiz araçları veya dinamik test yöntemleri kullanılabilir.

  3. Uygulama Güvenlik Duvarı (WAF) Kuralları: Uygulama katmanında bir WAF kullanarak, belirli kurallar eklemek, zararlı istekleri filtreleyebilir. Örneğin, aşağıdaki gibi bir kural, komut enjeksiyonunu engellemeye yardımcı olabilir:

   SecRule ARGS "@rx (system|exec|shell_exec|passthru|eval|assert|unlink|base64_decode)" "id:1000001,phase:2,deny,status:403"

Bu kural, belirli istemci girişlerini inceleyip, zararlı olanları engelleyecektir.

  1. Minimum İzin-Prensibi: Airflow kullanırken, yalnızca gerekli izinlere sahip kullanıcıların oluşturulması, zafiyetin kötüye kullanılmasını önlemek için önemlidir. Örneğin, geliştirme ortamlarında farklı erişim seviyeleri belirlemek, kritik iş akışlarının korunmasına yardımcı olabilir.

  2. Narkozlama ve Güvenli Ortamlar: Önemli iş akışlarını çalıştırmak için sanal ortamlar veya konteyner teknolojileri kullanılmalı, her bir iş akışının ve bağımlılıklarının izole edilmesi sağlanmalıdır. Bu, bir iş akışında meydana gelen bir zafiyetin diğer iş akışlarını etkilemesini önler.

Sonuç olarak, Airflow üzerinde bu tür güvenlik açıklarına karşı önlemler almak, sistemin genel dayanıklılığını artıracak ve olası veri ihlallerinin önüne geçecektir. Kurumsal güvenlik politikaları çerçevesinde, yerel güvenlik yazılımları, güncellemeler ve düzenli audit süreçleriyle, zafiyetlerin kullanımını minimize etmek ve güvenli bir ortam oluşturmak mümkündür. Her organizasyon, bu tür kaynakları kullanarak bir adım da önde olabilir.