← Radar

Konu: Güvenlik3 dk okuma

Bir sertifika otoritesinin gizli anahtarı 4 çıktı: eMudhra olayı ve tarayıcı dışındaki güven sorunu

Bu neden önemli?

HTTPS'in bütün güveni, sertifika otoritelerinin anahtarlarını gerçekten rastgele ve gizli tutmasına dayanıyor. Bu olay bir anahtarın her yapısal kontrolden geçip yine de değersiz olabileceğini gösteriyor. Asıl risk de tarayıcıda değil, sunucularındaki betiklerde, CI işlerinde ve container imajlarında.

Ne oldu?

17 Ekim 2026’da bir araştırmacı Chrome’un kök sertifika programına bir rapor gönderdi, kısa süre sonra Mozilla’ya da ulaştı. Hint sertifika otoritesi (CA) eMudhra’nın sekiz ara sertifikasının gizli anahtarları ele geçirilebilir durumdaydı. Altısı web siteleri için TLS sertifikası, ikisi kod imzalama sertifikası veriyordu. Sectigo da bu anahtarları Mayıs 2025’te çapraz imzalamıştı.

Mozilla anahtarları aynı akşam kendisi de çıkardı. Hepsi 256’dan küçük tam sayılardı. Scott Helme’nin listesine göre değerler 4, 56, 66, 115, 155, 156, 230 ve 237.

Anahtar neden bu kadar kolay kırıldı?

Bunlar P-384 eğrisinde eliptik eğri anahtarları. Gizli anahtar d denen tek bir sayı. Açık anahtar, bu sayının eğri üzerindeki sabit bir G noktasıyla “çarpılmasıyla” bulunuyor. İleri yön kolay, geri yön ise d rastgele bir 384 bitlik sayıysa pratikte imkânsız: yaklaşık 10^115 ihtimal var. Bu eğrilerin nereden geldiğini NIST eğri tohumları yazısında anlatmıştık.

eMudhra’nın anahtarlarında ise 47 bayt sıfırın ardından tek bir bayt vardı. Saldırganın yapması gereken 1·G, 2·G, 3·G diye denemek ve sertifikadaki açık anahtarla eşleşeni bulmak. En fazla 255 adım. Helme sekizini bir saniyenin altında buldu. İşin kötüsü, 4 gibi bir anahtar da eğri üzerinde geçerli bir nokta veriyor. Hiçbir yapısal kontrol bunu yakalamıyor.

Nasıl oldu?

eMudhra’nın Mozilla’nın hata kaydındaki açıklamasına göre anahtarlar 30 Nisan 2025’teki bir anahtar üretim töreninde (key ceremony) oluşturuldu. Anahtarlar dışarı aktarılacağı için törene bir sarma/açma (wrap/unwrap) testi eklendi. Bu testteki bir kod hatası donanım güvenlik modülünde (HSM) ikinci, zayıf bir anahtar çifti yarattı. Etiketler birbirine benzediği için sertifika istekleri yanlış anahtarla hazırlandı. Kök anahtar törenlerinin normalde ne kadar sıkı yürütüldüğünü DNS kök anahtarı yazısında görebilirsin.

Uyarı işareti de vardı. Haziran 2025’te bu ara sertifikaların iptal listelerinin (CRL) imzaları doğrulanmıyordu. eMudhra listeleri asıl anahtarlarla imzalamıştı, sertifikalardaki ise zayıf anahtarlardı. Şirket nedenini araştırmak yerine listeleri zayıf anahtarlarla yeniden imzaladı. Hata kaydında birçok kişi bunun neden o zaman incelenmediğini soruyor.

Tarayıcı neden güvende, curl neden değil?

Chrome aynı gün CRLSet güncellemesiyle bu anahtarları engelledi, Firefox da birkaç saat sonra OneCRL ile. İkisi de güncelleme ya da yeniden başlatma istemedi. Ayrıca tarayıcılar Certificate Transparency (CT) istiyor: Geçerli sayılması için her sertifika herkese açık kayıtlara yazılmalı. Google’a göre bu ara sertifikalardan çıkan hiçbir sertifika CT kayıtlarında yoktu.

Tarayıcı dışındaki dünya farklı. curl, Python, Node, Go ve git çoğunlukla diskteki bir sertifika paketine güveniyor, varsayılan olarak iptal ya da CT kontrolü yapmıyor. Helme sahte bir api.stripe.com sertifikası üretti. Denediği bütün Linux ve macOS makinelerinde curl, Python ve Node onu kabul etti. Güncellenmeyen gömülü cihazlar bu sertifikalara Temmuz 2039’daki son kullanma tarihine kadar güvenecek.

Temizlik

Mozilla 20 Ekim’de NSS paketinden ara sertifikaları imzalayan kökü (emSign ECC Root CA - G3) çıkardı. Chrome da 27 Ekim’de çıkarıyor. eMudhra’nın tahminine göre yaklaşık 30.000 sertifikanın başka bir zincire taşınması gerekiyor. Cloudflare WARP, 1.1.1.1 ve cloudflared’i güncelledi, kendi servislerinde istismar izi bulmadı. eMudhra 22 Ekim’de küresel SSL/TLS işinden çekildiğini açıkladı. Videoya göre olay, 2011’de hacklenip iflas eden Hollandalı CA DigiNotar ile karşılaştırılıyor. Aynı hafta başka bir “4” de gömülü cihazlardaki GoAhead web sunucusunun TLS kodunda çıktı: GoAhead Diffie-Hellman yazısı.

Senin yapman gereken

  • İşletim sistemindeki ca-certificates paketini güncelle.
  • Python’da certifi’yi 2026.10.19’a, Go’yu 1.27.3 ya da 1.26.10’a yükselt. Node için düzeltilmiş sürümler test sitesindeki listede.
  • Container imajlarını yeniden derle. Eski imajlar eski sertifika paketini taşır.
  • curl https://dv-g3b-emudhra.we-have-a-problem.com çalıştır. Sertifika hatası alıyorsan istemcin güvende.
  • Hata alınca doğrulamayı kapatma. Cloudflare’in de vurguladığı gibi, testi uygulamanın gerçekten kullandığı TLS yolundan yap.

Düşün

  • Sunucundaki servisler hangi sertifika paketine güveniyor? Bunu en son ne zaman güncelledin?
  • “İmza tutmuyor” gibi bir tutarsızlıkla karşılaştığında, sorunu susturmak ile kökünü bulmak arasında nasıl karar veriyorsun?

Videoyu izle

Tıklayınca video YouTube'dan yüklenir; o ana kadar bu sayfa YouTube'a hiçbir istek göndermez.
Kaynaklar (11, İngilizce)

Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.