CVE-2025-55234 Anatomisi ve Python ile SMB Zafiyet Keşfi (PoC Analizi)
Eylül 2025'te Microsoft'un "Patch Tuesday" güncellemeleriyle duyurduğu CVE-2025-55234, ağ güvenliği dünyasında ciddi yankı uyandırdı. CVSS v3 skoru 8.8 (Yüksek) olarak belirlenen bu zafiyet, Windows SMB (Server Message Block) protokolündeki kimlik doğrulama eksikliklerini kullanarak saldırganlara "Relay" (Yönlendirme) saldırıları yapma ve ayrıcalık yükseltme (Privilege Escalation) imkanı tanıyor.
Peki bu zafiyet tam olarak nedir ve laboratuvar ortamımızda geliştirdiğimiz cve-2025-55234-poc10.py aracı bu saldırı zincirinin neresinde yer alıyor? Gelin, teknik detaylara inelim.
1. CVE-2025-55234 Nedir? Neden Tehlikeli?
CVE-2025-55234, Windows NTLM/SMB kimlik doğrulama sürecindeki uygunsuz doğrulama (Improper Authentication - CWE-287) hatalarından kaynaklanmaktadır.
Eğer bir hedef sistemde SMB Signing (SMB İmzalama) ve EPA (Extended Protection for Authentication) zorunlu kılınmamışsa, saldırgan ağdaki kimlik doğrulama trafiğini araya girerek (MitM) yakalayabilir ve bu yetkili oturumu başka bir sunucuya yönlendirerek (Relay) o kullanıcının haklarıyla işlem yapabilir.
Microsoft'un Yaması Ne İş Yapıyor? Eylül 2025'te yayınlanan yama, aslında doğrudan bir kod onarımından ziyade işletim sistemine yepyeni "Denetim (Audit)" yetenekleri ekliyor. Ağ yöneticileri, SMB imzalama ve EPA özelliklerini zorunlu hale getirmeden önce Event ID'leri (Olay Kimlikleri) üzerinden hangi eski veya uyumsuz istemcilerin bağlantı sorunu yaşayacağını görebiliyor.
2. Keşif Aşaması: cve-2025-55234-poc10.py Aracının Rolü
Relay saldırıları yapabilmek veya ağı denetleyebilmek için, sızma testi uzmanının öncelikle ağda hangi makinelerin SMB paylaşımlarına açık olduğunu ve hangilerinin "Null Session" (anonim) erişime izin verdiğini bulması gerekir. Geliştirdiğimiz betik, Linux tabanlı smbclient aracını bir Python Wrapper (sarmalayıcı) ile otomatize ederek tam olarak bu keşif (reconnaissance) görevini üstleniyor.
İşte analiz edeceğimiz kod yapısı:
import subprocess
import argparse
import sys
def parse_shares_from_smbclient(output):
"""
smbclient çıktısını ayrıştırarak sadece paylaşım isimlerini döndürür.
"""
shares = []
lines = output.split('\n')
parsing_shares = False
for line in lines:
# Paylaşım listesinin başlangıcını yakala
if line.startswith('\tSharename'):
parsing_shares = True
continue
if line.startswith('\t---------'):
continue
# Paylaşım bloğunun içindeysek verileri topla
if parsing_shares:
if line.startswith('\t'):
parts = line.strip().split()
if len(parts) >= 1:
share_name = parts[0]
shares.append(share_name)
elif line.strip() == "":
continue
else:
# Share block bitti (Server/Workgroup bloğu başladı)
parsing_shares = False
return shares
def enumerate_shares(ip, debug=False):
"""
Hedef IP adresinde anonim SMB oturumu açmayı dener.
"""
cmd = ['smbclient', '-L', f'//{ip}', '-N']
if debug:
cmd.extend(['-d', '3'])
try:
# Subprocess ile komutu çalıştırıp çıktıyı yakalıyoruz
result = subprocess.run(cmd, capture_output=True, text=True, timeout=10)
if debug:
print("[DEBUG] STDOUT:\n", result.stdout)
print("[DEBUG] STDERR:\n", result.stderr)
return parse_shares_from_smbclient(result.stdout)
except subprocess.TimeoutExpired:
print(f"[-] Hedefe ({ip}) bağlantı zaman aşımına uğradı.")
return []
except Exception as e:
print(f"[-] Beklenmeyen Hata ({ip}): {e}")
return []
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="CVE-2025-55234 Keşif Aracı - SMB Numaralandırma")
parser.add_argument("ip", help="Hedef IP adresi")
parser.add_argument("--debug", action="store_true", help="Detaylı smbclient loglarını açar (-d 3)")
args = parser.parse_args()
print(f"[*] {args.ip} adresi üzerinde SMB paylaşımları taranıyor...")
shares = enumerate_shares(args.ip, args.debug)
if shares:
print("[+] Keşfedilen Paylaşımlar:")
for share in shares:
print(f" -> {share}")
else:
print("[-] Hiçbir paylaşım bulunamadı veya anonim erişim kapalı.")
3. Kodun Satır Satır Analizi
Kod, karmaşık bir komut satırı aracını son derece okunabilir ve entegre edilebilir bir Python objesine dönüştürüyor. Temel yapı taşlarını inceleyelim:
A. Subprocess ve Otomasyon (enumerate_shares fonksiyonu)
Kodun kalbi subprocess.run(cmd, ...) fonksiyonunda atıyor.
* smbclient -L //{ip}: Hedef sunucudaki paylaşımları listeleme (List) komutudur.
* -N parametresi (No Pass): Aracın kullanıcıdan parola sormamasını, yani oturumu anonim (Null Session) olarak açmaya çalışmasını zorunlu kılar. Bu, yetkisiz kullanıcıların hedef sistemden ne kadar bilgi sızdırabildiğini anlaması için kritik bir zafiyet testidir.
* timeout=10: Ağ taramalarında hedefin "Drop" durumuna (yanıt vermeme) geçmesi çok olasıdır. Koda eklenen bu limit, aracın sonsuz döngüde asılı kalmasını (hang) engeller. Defansif programlama açısından çok iyi bir detay.
B. Akıllı Ayrıştırma Algoritması (parse_shares_from_smbclient)
Konsol araçlarının (smbclient gibi) çıktılarını diğer otomasyonlara dahil edebilmek için temizlenmesi gerekir. smbclient -L komutu varsayılan olarak paylaşımların yanında sunucu yorumlarını ve çalışma gruplarını (Workgroup) da listeler.
* Döngüdeki "State Machine" mantığı (yani parsing_shares bayrağının kullanımı) harika bir çözüm.
* Kod, Sharename başlığını gördüğünde okuma moduna geçiyor, Tab (\t) karakteriyle başlayan satırları algılayıp split() metoduyla sadece ilk sütunu (örneğin ADMIN$, C$) dinamik bir diziye atıyor. Alakasız bloklara geçildiğinde ise bayrağı indirerek işlemi sonlandırıyor.
C. Hata Ayıklama (Debug) Mekanizması
Bağlantı sorunları yaşandığında problemin ağ duvarından (firewall) mı yoksa kimlik doğrulama reddinden (Access Denied) mi kaynaklandığını anlamak zordur. Koda eklediğin --debug argümanı ve bunun smbclient -d 3 (level 3 debugging) parametresini tetiklemesi, sorun giderme (troubleshooting) sürecini profesyonel bir seviyeye taşıyor.
4. Sonuç ve Çözüm Önerileri
Bu araç sayesinde hedefte anonim oturumlara izin veren sistemlerin haritasını çıkararak, CVE-2025-55234 zafiyeti için SMB Relay saldırılarına açık potansiyel noktaları tespit etmiş oluyoruz.
Nasıl Korunulur? Sistemleri bu tür yetki yükseltme saldırılarından korumak için sadece sunucuları yamamak tek başına yeterli değildir: * Yamaları Uygulayın: Eylül 2025 Windows güncellemelerini sunucu ve masaüstü işletim sistemlerinize kurun. * Audit Modunu Kullanın: Yamanın getirdiği yeni denetim özelliklerini (Audit Events) aktif ederek, ağınızdaki hangi cihazların imzalama standartlarına uymadığını raporlayın. * SMB Signing ve EPA Zorunluluğu: Denetim sürecini bitirdikten sonra, tüm ağ iletişiminde SMB imzalama ve "Extended Protection for Authentication" özelliklerini kesin olarak zorunlu (Enforce) hale getirin. * Ağ İzolasyonu: Dış ağdan gelen 445 portu (SMB) bağlantılarını güvenlik duvarlarında mutlaka engelleyin.