업데이트로 돌아가기
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)가 현재 디렉터리에 생성됩니다.

이 스크립트가 수행하는 작업

  1. 새 컴퓨터 계정(예: GHOSTABCDEFGH$)을 생성하거나 --computer-name으로 전달된 계정을 재사용합니다.
  2. 두 개의 rogue 리스너를 시작합니다: 포트 445의 SMB/LSA 서버와 포트 389의 LDAP 서버.
  3. 해당 컴퓨터 계정으로 인증서 요청을 보내고, 제어된 IP를 가리키는 사용자 지정 cdc 속성(--listener로 지정, 생략 시 자동 감지)과 대상 DC의 DNS 이름을 담은 rmd 속성을 포함합니다.
  4. CA는 rogue LSA/LDAP 리스너로 다시 연결합니다. 리스너는 생성된 계정으로 인증하고(Netlogon을 통해 실제 DC로 검증됨), CA의 조회에 대해 대상 DC의 ID(sAMAccountName, SID, dNSHostName)로 대신 응답합니다.
  5. CA는 DC 소유의 유효한 인증서를 발급합니다.
  6. 또한 이 스크립트는 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:dns ID를 설정하여 PKINIT 단계에서 KDC_ERR_CLIENT_NAME_MISMATCH가 발생하지 않도록 합니다. AD 기반 템플릿에서는 요청 SAN이 무시되므로 이 변경은 안전한 no-op입니다.

참고 자료

카테고리