
UpdatedAug 1, 2026
CVE-2026-54121 — Updated!
Certighost POC
CVE-2026-54121 (Certighost)
이것은 CVE-2026-54121(일명 Certighost)을 시연하기 위한 개념 증명 도구입니다. 자세한 분석은 https://gist.github.com/H0j3n/a5ef2609b5f2944ac2390a191a534c26 에서 확인하세요.
의존성 설치
이 개념 증명 도구는 단일 Python 스크립트입니다. impacket, cryptography, pyasn1, asn1crypto, dnspython이 필요합니다.
sudo pip install --break-system-packages git+https://github.com/fortra/impacket.git cryptography pyasn1 asn1crypto pycryptodome dnspython
사용법
rogue LDAP 및 SMB 서비스가 높은 권한이 필요한 포트 389와 445에서 수신 대기하므로 루트 권한으로 실행하세요.
sudo python3 certighost.py -d playground.local -u lowpriv -p 'Password1234' --dc-ip 192.168.1.10
실행에 성공하면 대상 인증서(.pfx)와 Kerberos 캐시(.ccache)가 현재 디렉터리에 생성됩니다.
이 스크립트가 수행하는 작업
- 새 컴퓨터 계정(예:
GHOSTABCDEFGH$)을 생성하거나--computer-name으로 전달된 계정을 재사용합니다. - 두 개의 rogue 리스너를 시작합니다: 포트 445의 SMB/LSA 서버와 포트 389의 LDAP 서버.
- 해당 컴퓨터 계정으로 인증서 요청을 보내고, 제어된 IP를 가리키는 사용자 지정
cdc속성(--listener로 지정, 생략 시 자동 감지)과 대상 DC의 DNS 이름을 담은rmd속성을 포함합니다. - CA는 rogue LSA/LDAP 리스너로 다시 연결합니다. 리스너는 생성된 계정으로 인증하고(Netlogon을 통해 실제 DC로 검증됨), CA의 조회에 대해 대상 DC의 ID(sAMAccountName, SID, dNSHostName)로 대신 응답합니다.
- CA는 DC 소유의 유효한 인증서를 발급합니다.
- 또한 이 스크립트는 DC의 pfx로 PKINIT을 수행하여 .ccache 및 NT 해시를 요청합니다.
타임라인
- 2026년 7월 28일 —
STATUS_NOLOGON_SERVER_TRUST_ACCOUNT문제를 수정한 PR을 제공한 @GregDurys 님께 감사드립니다. 이제certighost는 rogue SMB NetLogon 경로에 대한 적절한 스크립트 내 핫패치를 포함합니다(MS-NRPC 2.2.1.4.15에 따라ParameterControl에서 K 비트0x800과 함께 E 비트0x20을 설정). 따라서 다른/포크된 Impacket 버전을 설치할 걱정 없이 도메인 컨트롤러에 호스팅된 CA를 대상으로 익스플로잇을 사용할 수 있습니다. - 2026년 7월 28일 — 요청 SAN 수정을 언급한 @Hack0ura 님께 감사드립니다. 요청에 포함된 SAN을 준수하는 CA(
EDITF_ATTRIBUTESUBJECTALTNAME2/ ESC6)의 경우, 인증서 요청은 이제 rogue 컴퓨터가 아닌 대상 DC의 DNS 이름(rmd_value)으로SAN:dnsID를 설정하여 PKINIT 단계에서KDC_ERR_CLIENT_NAME_MISMATCH가 발생하지 않도록 합니다. AD 기반 템플릿에서는 요청 SAN이 무시되므로 이 변경은 안전한 no-op입니다.