
CVE-2026-54121 (Certighost) AD CS DC-प्रतिरूपण PoC। पैच किया गया SAN हैंडलिंग + MAQ-सुरक्षित खाता पुन: उपयोग।
CVE-2026-54121 के लिए प्रूफ-ऑफ-कॉन्सेप्ट टूल का एक कार्यशील फ़ोर्क, जिसे Certighost के नाम से भी जाना जाता है। मूल शोध और PoC @H0j3n और @aniqfakhrul द्वारा, विस्तृत विश्लेषण:
यह फ़ोर्क SAN हैंडलिंग को ठीक करता है जो PKINIT को उन CAs पर सफल होने से रोकती थी जो अनुरोधित SAN का सम्मान करते हैं, --target-san पार्सिंग को मज़बूत करता है, और कंप्यूटर-अकाउंट हैंडलिंग को दोबारा तैयार करता है ताकि यह अब ms-DS-MachineAccountQuota को समाप्त न करे।
रूट के रूप में निष्पादित करें क्योंकि रोग LDAP और SMB सेवाओं को विशेषाधिकार प्राप्त पोर्ट 389 और 445 की आवश्यकता होती है।
sudo python3 certighost.py -d playground.local -u lowpriv -p 'Password1234' --dc-ip 192.168.1.10
सफल समापन पर, लक्ष्य प्रमाणपत्र (.pfx) और Kerberos कैश (.ccache) वर्तमान कार्यशील निर्देशिका में लिखे जाते हैं।
CERTIGHOST$, पहले रन पर बनाया गया) का पुन: उपयोग करें या --computer-name के माध्यम से निर्दिष्ट एक का उपयोग करें।cdc एट्रिब्यूट (--listener के माध्यम से; वैकल्पिक, छोड़े जाने पर स्वतः पता लगाया जाता है) और लक्ष्य DC के DNS नाम को ले जाने वाला एक rmd एट्रिब्यूट एम्बेड किया गया हो।.ccache और NT हैश का अनुरोध करने के लिए DC के pfx के साथ PKINIT करती है।मूल ने प्रमाणपत्र SAN को CSR subjectAltName एक्सटेंशन और SAN:dns= अनुरोध एट्रिब्यूट दोनों में रोग कंप्यूटर के होस्टनाम से बनाया था, न कि लक्ष्य DC के FQDN से। इसलिए, एक CA पर जो अनुरोधित SAN का सम्मान करता है, जारी किया गया प्रमाणपत्र रोग अकाउंट का dNSHostName लेकर आया, जिससे PKINIT ने इसे गलत प्रिंसिपल से मैप किया और इस त्रुटि के साथ विफल रहा:
KDC_ERR_CLIENT_NAME_MISMATCH(Reserved for PKINIT)
SAN अब लक्ष्य DC का dNSHostName (rmd_value / target_dns) उपयोग करता है, जिस पर PKINIT एक मशीन अकाउंट को मैप करता है। जारी किया गया प्रमाणपत्र अब DNS:<dc>.<domain> प्रस्तुत करता है और AS-REQ DC के रूप में पूरा होता है।
--target-san--target-san अब केवल छोटे NAME रूप के बजाय MEEREEN, MEEREEN$, या FQDN meereen.essos.local (जो sAMAccountName या dNSHostName द्वारा मिलान किया जाता है) में से किसी को भी स्वीकार करता है।
मूल हर रन पर एक नया रैंडम GHOST********$ अकाउंट बनाता था। चूँकि ms-DS-MachineAccountQuota के माध्यम से बनाए गए कंप्यूटर अकाउंट Domain Admins के स्वामित्व में होते हैं (निर्माता के नहीं), एक कम-विशेषाधिकार वाला उपयोगकर्ता उन्हें हटा नहीं सकता, इसलिए बार-बार रन करने से अनाथ अकाउंटों के साथ कोटा (डिफ़ॉल्ट 10) जल्दी समाप्त हो जाता था।
यह फ़ोर्क एक स्थिर अकाउंट (CERTIGHOST$, केवल तभी बनाया जाता है जब वह पहले से मौजूद न हो) का पुन: उपयोग करता है, इसलिए कोटा कभी नहीं बढ़ता और रनों के बीच साफ करने के लिए कुछ भी नहीं होता।
जब अकाउंट पहली बार बनाया जाता है, तो स्क्रिप्ट एक चेतावनी प्रिंट करती है जिसमें बताया जाता है कि इसे AD में छोड़ दिया गया है:
[!] WARNING: computer account CERTIGHOST$ was created and is left in AD.
अकाउंट बाद के रनों पर पुन: उपयोग के लिए बना रहता है। इसे पूरी तरह से हटाने के लिए, इसे Domain Admin (ऑब्जेक्ट के स्वामी) के साथ हटाएँ:
Get-ADComputer CERTIGHOST | Remove-ADComputer -Confirm:$false
impacketcryptography, pyasn1, asn1crypto, pycryptodomexकेवल अधिकृत सुरक्षा परीक्षण और शैक्षिक उद्देश्यों के लिए। इसका उपयोग केवल उन प्रणालियों के विरुद्ध करें जिनका परीक्षण करने की आपके पास स्पष्ट अनुमति है।