August 16, 2026
ADCS — ESC4 Zafiyeti
ESC4 Zafiyeti Nedir? Lab ortamı nasıl kurulur? Nasıl exploit edilir?

By Elif Bensu K.
3 min read
ESC4 zafiyeti AD CS certificate template'lerinde yapılan yanlış yapılandırmalardan ziyade Erişim Kontrol Listelerinden ve Entrylerinden yani (ACL/ACE) dolayı olan hatalar sebepli oluşan zafiyettir.
Böylece saldırgan üzerinde kontrol sahibi olduğu bir şablon üzerindeki güvenlik ayarlarını değiştirerek şablonu zafiyetli getirebilir.
ESC4 Zafiyeti için:
→ Düşük yetkili bir kullanıcının bir Certificate Template üzerinde şu erişim haklarından en az birine sahip olması gereklidir.
- GenericAll : Şablon üzerinde tam kontrol yetkisi
- WriteDacl : Şablonun erişim izinlerini değiştirme yetkisi
- WriteOwner : Şablonun sahibini değiştirme hakkı
- GenericWrite ve WriteProperty : Şablonun EKU, SAN izni ve onay mekanizmaları gibi özellikleri değiştirme hakkı
→ Düşük yetkili bir kullanıcının savunmasız olan bu şablon üzerinde Enroll veya AutoEnrollment yetkisi olmalıdır.
→ Şablonun kendi SAN değerini tanımlamasına izin vermiş olmalıdır.
→ Manager Approval disable olmalıdır.
LAB Ortamını Ayarlayalım:
certtmpl.msccerttmpl.mscSmartCard Logon Şablonunu Duplicate ediyorum.
General → İsmini Example_ESC4 olarak ayarlıyorum.
Security kısmında → Domain Users → Write yetkisi veriyorum.
EKU'lardan Server Authentication ve Client Authentication verilmiş olabilir.
Ardına sertifikayı publish ediyorum CA üzerinden
Bu aşamaların detaylı ekran görüntülerine önceki yazılarımdan bakabilirsiniz Lab ortamı kurulumu belirli bir mantık üzerinde ilerliyor zaten.
Ben bu senaryoda bir Example_ESC4 şablonu oluşturdum onda EKU olarak Server Authentication tanımladım.
Diğerinde de Code Signing EKU tanımlamadım o da Copy of Example_ESC4
Nasıl Exploit edilir?
İlk önce certipy-ad ile zafiyetli şablon ve yayında olan şablonları arıyoruz.
Ardına ESC4 zafiyetinin olduğunu fark edip
certipy template -u 'jean.cristy@MYLAB.local' -p joseph -template Example_ESC4 -dc-ip 192.168.250.167 -write-default-configuration -no-ldap-channel-bindingcertipy template -u 'jean.cristy@MYLAB.local' -p joseph -template Example_ESC4 -dc-ip 192.168.250.167 -write-default-configuration -no-ldap-channel-bindingburadaki komutları açıklamak gerekirse:
template ile Certipy'ın Active Directory üzerindeki şablon nesnelerini okuma ve değiştirme/düzenleme modülünü çalıştırır.
ve bu komut ile bazı attributelar değiştirilir.
-write-default-configuration ile de şuanki durumun backupı alınıyor ve sonra değişiklikleri eski hale getirmek için kullanılabiliyor.
- msPKI-Certificates-Name-Flag LDAP değeri
CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT(0x1) olarak değiştirilir ve burada SAN değerinin istenildiği gibi belirlenmesine sağlar yani Supply in the request özelliği aktifleştirilir. - Manager approval disable edilir.
- Client Authentication gibi EKU'lar eklenir.
- Hesaba Enroll ekler
- Yetkili imza isteme kaldırılır.
komutu çalıştırdıktan sonra tekrardan sertifika templatelerini kontrol ediyoruz ve değiştirildiğini görüyoruz.
Şuan ESC1'e geri dönmüşüz de onu sömürüyormuşuz gibi düşünebiliriz. Client Authentication açık Enroll yetkisi var aynı o senaryoya geri döndük ayar değişimi ile
Daha iyi anlamak için üstteki sertifika özellikleri alttakileri karşılaştırarak değişenlere bakabilirsiniz :)
Şimdi sertifika talebinde bulunuyoruz.
administrator adına ve administrator adına sertifikamızı alıyoruz.
Ardına bu sertifika ile authenticate olmaya çalışarak yine hem NTLM hashini hem de TGT'sini alabiliyoruz.
Bu senaryoda iki tane template tanımlamıştım hatırlarsanız ki birinde sadece Server Authentication tanımlamıştım diğerinde sadece code signing vardı ve iki template ile de başarılı bir şekilde administrator adına sertifika alabildim.
Not : Bu yazıda paylaştıklarımın hepsi eğitim amaçlıdır. Yetkiniz olmadığı ortamlarda kullanmayınız.