
Certighost POC
이것은 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으로 전달된 계정을 재사용합니다.cdc 속성(--listener로 지정, 생략 시 자동 감지)과 대상 DC의 DNS 이름을 담은 rmd 속성을 포함합니다.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를 대상으로 익스플로잇을 사용할 수 있습니다.EDITF_ATTRIBUTESUBJECTALTNAME2 / ESC6)의 경우, 인증서 요청은 이제 rogue 컴퓨터가 아닌 대상 DC의 DNS 이름(rmd_value)으로 SAN:dns ID를 설정하여 PKINIT 단계에서 KDC_ERR_CLIENT_NAME_MISMATCH가 발생하지 않도록 합니다. AD 기반 템플릿에서는 요청 SAN이 무시되므로 이 변경은 안전한 no-op입니다.