Sploitus

Exploit for CVE-2026-41089-LongLogon

kitploit Β· 2026-08-25

Exploit Code

MARKDOWN86 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ADSCANPRO-CVE-2026-41089-LONGLOGON
# LongLogon Β· CVE-2026-41089

![CVE-2026-41089 Β· NVD](https://img.shields.io/badge/CVE--2026--41089-NVD-1f6feb?style=flat-square&labelColor=24292f) ![MSRC advisory](https://img.shields.io/badge/MSRC-advisory-005a9e?style=flat-square&labelColor=24292f) ![CVSS 3.1 9.8](https://img.shields.io/badge/CVSS_3.1-9.8-d11a2a?style=flat-square&labelColor=24292f) ![CWE-121 stack buffer overflow](https://img.shields.io/badge/CWE--121-stack_buffer_overflow-f08c00?style=flat-square&labelColor=24292f)   
![checker Β· non-destructive](https://img.shields.io/badge/checker-non--destructive-2ea043?style=flat-square&labelColor=24292f) ![unauthenticated Β· pre-auth](https://img.shields.io/badge/vector-unauthenticated-1AA0AE?style=flat-square&labelColor=24292f) ![run with uv](https://img.shields.io/badge/run-uv-261230?style=flat-square&labelColor=24292f) ![MIT license](https://img.shields.io/badge/license-MIT-3fb950?style=flat-square&labelColor=24292f)

> **LongLogon** 은 **CVE-2026-41089** 에 λŒ€ν•œ μΈμ¦λ˜μ§€ μ•Šμ€, λΉ„νŒŒκ΄΄μ μΈ **사전 쑰건 검사기** μž…λ‹ˆλ‹€. 이 취약점은 Windows **Netlogon** μ„œλΉ„μŠ€μ˜ 사전 인증 μŠ€νƒ 버퍼 μ˜€λ²„ν”Œλ‘œμš°μž…λ‹ˆλ‹€. 자격 증λͺ… 없이, 그리고 μ˜€λ²„ν”Œλ‘œμš°λ₯Ό μ „μ†‘ν•˜μ§€ μ•Šκ³ , 도메인 컨트둀러의 DNS 도메인 이름이 버그λ₯Ό ν¬λž˜μ‹œμ‹œν‚€κΈ°μ— μΆ©λΆ„νžˆ κΈ΄μ§€ μ—¬λΆ€λ₯Ό λ³΄κ³ ν•©λ‹ˆλ‹€.

![LongLogon checking a domain controller](https://assets.kitploit.com/production/public/readmes/14882/1974909cacfaaeb84c40505ded65da9c121a60073bc1f575107c0d1464b73396.gif)

## 곡개 PoCκ°€ μ‹€μ œλ‘œ λ™μž‘ν•˜λ‚˜μš”?

일반적인 이름을 κ°€μ§„ 도메인 μ»¨νŠΈλ‘€λŸ¬μ—μ„œλŠ” κ·Έλ ‡μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이 CVE에 λŒ€ν•œ 곡개 **μ΅μŠ€ν”Œλ‘œμž‡** PoC(κ°€μž₯ λ§Žμ€ λ³„ν‘œλ₯Ό 받은 것과 κ·Έ 볡사본듀)λŠ” κΈ΄ μ‚¬μš©μž 이름을 μ „μ†‘ν•˜μ—¬ 도메인 컨트둀러λ₯Ό ν¬λž˜μ‹œμ‹œν‚¨λ‹€κ³  μ£Όμž₯ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 패치 μ „ν›„ `netlogon.dll`을 λΉ„κ΅ν•˜κ³  μ‹€ν—˜μ‹€μ—μ„œ ν¬λž˜μ‹œλ₯Ό μž¬ν˜„ν•˜μ—¬ ν™•μΈλœ 두 κ°€μ§€ 이유둜 인해 일반 λ„λ©”μΈμ—μ„œ νŒ¨μΉ˜λ˜μ§€ μ•Šμ€ DCλ₯Ό ν¬λž˜μ‹œμ‹œν‚€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€:

  1. **잘λͺ»λœ NtVer.** V5EX λΉ„νŠΈ(`0x16`)κ°€ μ„€μ •λœ μƒνƒœλ‘œ 핑을 보내며, μ΄λŠ” 경계 검사가 μ μš©λ˜λŠ” `BuildSamLogonResponseEx`둜 λΌμš°νŒ…λ©λ‹ˆλ‹€. μ·¨μ•½ν•œ λ ˆκ±°μ‹œ `BuildSamLogonResponse`λŠ” ν•΄λ‹Ή λΉ„νŠΈκ°€ μ§€μ›Œμ§„ κ²½μš°μ—λ§Œ 도달할 수 μžˆμŠ΅λ‹ˆλ‹€. LongLogon은 `0x02`λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
  2. **κΈ΄ μ‚¬μš©μž μ΄λ¦„λ§ŒμœΌλ‘œλŠ” μ˜€λ²„ν”Œλ‘œμš°κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.** κ³΅κ²©μžκ°€ μ œμ–΄ν•˜λŠ” `User` ν•„λ“œλŠ” λ°”μ΄λ„ˆλ¦¬μ— μ˜ν•΄ 130μ™€μ΄λ“œ 문자둜 μ œν•œλ˜λ©°, 528λ°”μ΄νŠΈ 버퍼에 훨씬 λͺ» λ―ΈμΉ©λ‹ˆλ‹€. μŠ€νƒ μΏ ν‚€ μœ„λ‘œ μ“°κΈ°λ₯Ό μˆ˜ν–‰ν•˜λŠ” λ°”μ΄νŠΈλŠ” μ„œλ²„ 자체의 κΈ΄ DNS 이름이며, νŽ˜μ΄λ‘œλ“œ 길이에 μ˜ν•΄ λ³€κ²½λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.



λ”°λΌμ„œ 널리 μ•Œλ €μ§„ μ΅μŠ€ν”Œλ‘œμž‡μ€ 일반 λ„λ©”μΈμ—μ„œ μ‹€νŒ¨ν•˜λ©°, 단일 UDP νŒ¨ν‚· 손싀이 정상 DCμ—μ„œ λ°œμƒμ‹œν‚€λŠ” `recv` νƒ€μž„μ•„μ›ƒμ΄ ν¬λž˜μ‹œλ‘œ μ˜€μΈλ©λ‹ˆλ‹€. LongLogon은 κ·ΈλŸ¬ν•œ μ΅μŠ€ν”Œλ‘œμž‡ 쀑 ν•˜λ‚˜κ°€ μ•„λ‹™λ‹ˆλ‹€: μ΄λŠ” μˆ˜μ •λ˜κ³  λ°”μ΄λ„ˆλ¦¬λ‘œ κ²€μ¦λœ 뢄석을 λΉ„νŒŒκ΄΄μ  κ²€μ‚¬κΈ°λ‘œ μ œκ³΅ν•˜λ©°, μ˜€λ²„ν”Œλ‘œμš°λ₯Ό μ ˆλŒ€ μ „μ†‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ‹€ν—˜μ‹€μ—μ„œ ν™•μΈλœ ν¬λž˜μ‹œ μž„κ³„κ°’κ³Ό 전체 λ©”μ»€λ‹ˆμ¦˜μ€ μ•„λž˜μ— μžˆμŠ΅λ‹ˆλ‹€.

## CVE-2026-41089λž€ 무엇인가

Netlogon DC-λ‘œμΌ€μ΄ν„° 경둜 `NlGetLocalPingResponse` β†’ `BuildSamLogonResponse` β†’ `NetpLogonPutUnicodeString`μ—μ„œ λ°œμƒν•˜λŠ” μŠ€νƒ 기반 버퍼 μ˜€λ²„ν”Œλ‘œμš°(CWE-121, CVSS 9.8)μž…λ‹ˆλ‹€. CLDAP λ˜λŠ” MAILSLOT 핑에 응닡할 λ•Œ DCλŠ” 자체의 포리슀트, 도메인 및 호슀트 이름과 κ³΅κ²©μžκ°€ μ œμ–΄ν•˜λŠ” μž‘μ€ λ¬Έμžμ—΄μ„ κ³ μ •λœ **528λ°”μ΄νŠΈ μŠ€νƒ 버퍼**(`ushort local_258[264]`)에 μ§λ ¬ν™”ν•˜λ©°, μŠ€νƒ μΏ ν‚€λŠ” 버퍼 λ°”λ‘œ 뒀에 μœ„μΉ˜ν•©λ‹ˆλ‹€. **μ„œλ²„ 자체의 DNS 이름이 μΆ©λΆ„νžˆ κΈ΄ 경우** , λˆ„μ  μ“°κΈ°κ°€ 버퍼 끝에 λ„λ‹¬ν•˜κ³  ν›„ν–‰ `L'\0'` μ’…κ²°μžκ°€ μΏ ν‚€λ₯Ό μ΄ˆκ³Όν•˜μ—¬ `__report_gsfailure`κ°€ λ°œμƒν•˜κ³  `lsass.exe`κ°€ `STATUS_STACK_BUFFER_OVERRUN` (`0xc0000409`)κ³Ό ν•¨κ»˜ μ’…λ£Œλ©λ‹ˆλ‹€. 도메인 μ»¨νŠΈλ‘€λŸ¬κ°€ μž¬λΆ€νŒ…λ©λ‹ˆλ‹€. μΈμ¦λ˜μ§€ μ•Šμ€ 단일 UDP νŒ¨ν‚·μž…λ‹ˆλ‹€.

**Zerologon**(CVE-2020-1472)이 λͺ¨λ‘ **0** 인 μ±Œλ¦°μ§€λ₯Ό μ•…μš©ν•œ 반면, **LongLogon** 은 λ³‘λ¦¬ν•™μ μœΌλ‘œ **κΈ΄** 도메인 이름을 μ•…μš©ν•©λ‹ˆλ‹€.

## 이 도ꡬ가 ν™•μΈν•˜λŠ” 것과 ν™•μΈν•˜μ§€ μ•ŠλŠ” 것

`longlogon.py`λŠ” **λΉ„νŒŒκ΄΄μ ** μž…λ‹ˆλ‹€. μ΅œμ†Œν•œμ˜ `User` ν•„λ“œλ‘œ λ¬΄ν•΄ν•œ CLDAP 핑을 μ „μ†‘ν•˜κ³ , λ ˆκ±°μ‹œ λΉŒλ” 응닡을 μΈ‘μ •ν•˜μ—¬ **μ˜€λ²„ν”Œλ‘œμš° 사전 쑰건** 이 μΆ©μ‘±λ˜λŠ”μ§€, 즉 이 DC의 도메인이 _νŒ¨μΉ˜λ˜μ§€ μ•Šμ€_ DCλ₯Ό ν¬λž˜μ‹œμ‹œν‚¬ 만큼 κΈ΄μ§€ μ—¬λΆ€λ₯Ό λ³΄κ³ ν•©λ‹ˆλ‹€.

λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ§€ **μ•ŠμŠ΅λ‹ˆλ‹€** :

  * μ˜€λ²„ν”Œλ‘œμš°λ₯Ό μ „μ†‘ν•˜κ±°λ‚˜ 아무것도 ν¬λž˜μ‹œμ‹œν‚€μ§€ μ•ŠμŒ
  * **패치 μƒνƒœ** λ₯Ό ν™•μΈν•˜μ§€ μ•ŠμŒ. 패치된 DCλŠ” _λ™μΌν•œ_ μ½”λ“œ 경둜λ₯Ό μ·¨ν•˜κ³  λ„ˆλ¬΄ κΈ΄ μ“°κΈ°λ₯Ό κ±°λΆ€ν•˜λ―€λ‘œ, 일반적인 μ΄λ¦„μ˜ DCμ—μ„œ 패치 μ—¬λΆ€λ₯Ό λ„€νŠΈμ›Œν¬λ₯Ό 톡해 ꡬ뢄할 수 μ—†μŠ΅λ‹ˆλ‹€.



μ‹€μ œλ‘œ 패치된 DCλ₯Ό μ‹λ³„ν•˜λ €λ©΄ 전체 ν”Œλ¦Ώμ— λŒ€ν•œ 자격 증λͺ…(κ΄€λ¦¬μž) 버전 확인이 ν•„μš”ν•©λ‹ˆλ‹€. μ΄λŠ” ADscan이 μ—”κ²Œμ΄μ§€λ¨ΌνŠΈμ—μ„œ μžλ™ν™”ν•˜λŠ” μ’…λ₯˜μ˜ μž‘μ—…μž…λ‹ˆλ‹€(μ•„λž˜ μ°Έμ‘°).

## 거의 λͺ¨λ“  μ‹€μ œ DCκ°€ μ•ˆμ „ν•œ 이유

버퍼에 λ„λ‹¬ν•˜λŠ” μœ μΌν•œ 곡격자 μ œμ–΄ λ°”μ΄νŠΈλŠ” CLDAP `User` ν•„ν„°μ—μ„œ 였며, **130μ™€μ΄λ“œ 문자** 둜 μ œν•œλ˜μ–΄ λ‹¨λ…μœΌλ‘œλŠ” 528λ°”μ΄νŠΈ 버퍼에 훨씬 λͺ» λ―ΈμΉ©λ‹ˆλ‹€. μ»€μ„œλ₯Ό μΏ ν‚€ μœ„λ‘œ μš΄λ°˜ν•˜λŠ” λ°”μ΄νŠΈλŠ” κ³΅κ²©μžκ°€ μ œμ–΄ν•˜μ§€ μ•ŠλŠ” **μ„œλ²„ 자체의 이름** μž…λ‹ˆλ‹€. κΈ°λ³Έ μ΄λ¦„μ˜ DC(`corp.local`)λŠ” ν¬λž˜μ‹œλ  수 μ—†μŠ΅λ‹ˆλ‹€. 이것이 Microsoftκ°€ **"Exploitation Less Likely"** 둜 ν‰κ°€ν•œ μ΄μœ μž…λ‹ˆλ‹€. μ‹€ν—˜μ‹€μ—μ„œ Windows Server 2016(7자 호슀트 이름 κΈ°μ€€)을 ν¬λž˜μ‹œμ‹œν‚€λŠ” μ΅œμ†Œ DNS 도메인 κΈΈμ΄λŠ” **98자** μ˜€μŠ΅λ‹ˆλ‹€.

## μ‚¬μš©λ²•

uvλ₯Ό μ‚¬μš©ν•˜λ©΄ 섀정이 ν•„μš” μ—†μŠ΅λ‹ˆλ‹€. 쒅속성은 인라인(PEP 723)으둜 μ„ μ–Έλ˜λ―€λ‘œ μž„μ‹œ ν™˜κ²½μ— `rich`κ°€ μžλ™μœΌλ‘œ μ„€μΉ˜λ©λ‹ˆλ‹€:

root@kitploit:~
    
    
    uv run longlogon.py <dc-ip> <dc-dns-domain>
    

λ˜λŠ” pip μ‚¬μš©:

root@kitploit:~
    
    
    pip install rich
    python3 longlogon.py <dc-ip> <dc-dns-domain>
    

DNS 도메인은 DCκ°€ μ œκ³΅ν•˜λŠ” 것과 μΌμΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λŠ” 비밀이 μ•„λ‹™λ‹ˆλ‹€: rootDSE, μ—­λ°©ν–₯ DNS, CLDAP 자체 λͺ¨λ‘ 이λ₯Ό λ“œλŸ¬λƒ…λ‹ˆλ‹€. 좜λ ₯은 사전 쑰건 νŒμ •κ³Ό ν•„λ“œλ³„ 버퍼 채움 κ³„μ‚°μž…λ‹ˆλ‹€.

**NtVer λΌμš°νŒ…μ΄ μ€‘μš”ν•©λ‹ˆλ‹€.** μ·¨μ•½ν•œ λ ˆκ±°μ‹œ `BuildSamLogonResponse`λŠ” `(NtVer & 0xc) == 0`이고 `(NtVer & 0x2) != 0`일 λ•Œλ§Œ 도달할 수 μžˆμŠ΅λ‹ˆλ‹€. `NtVer=0x16` λ˜λŠ” `0x06`을 μ „μ†‘ν•˜λŠ” 곡개 μ΅μŠ€ν”Œλ‘œμž‡ μ‹œλ„λŠ” λΉ„νŠΈ 2(`0x4`)λ₯Ό μ„€μ •ν•˜κ³  경계 검사가 적용된 `BuildSamLogonResponseEx`에 λ„λ‹¬ν•˜λ―€λ‘œ 버그λ₯Ό μ ˆλŒ€ νŠΈλ¦¬κ±°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. LongLogon은 `0x02`λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

## 영ν–₯을 λ°›λŠ” λΉŒλ“œ

νŒ¨μΉ˜λ˜μ§€ μ•Šμ€ Windows Server 도메인 컨트둀러, 2012 R2λΆ€ν„° 2025κΉŒμ§€. 졜초 패치 λΉŒλ“œ:

## μ±…μž„ μžˆλŠ” μ‚¬μš©

**승인된** λ³΄μ•ˆ 연ꡬ 및 방어적 검증 μš©λ„λ‘œλ§Œ μ‚¬μš©ν•˜μ‹­μ‹œμ˜€. 이 μ €μž₯μ†ŒλŠ” **λΉ„νŒŒκ΄΄μ μΈ 사전 쑰건 검사기** λ₯Ό μ œκ³΅ν•˜λ©°, λ¬΄κΈ°ν™”λœ ν¬λž˜μ…”κ°€ μ•„λ‹™λ‹ˆλ‹€. μ΄λŠ” ν˜„μž¬ μ•…μš© 쀑인 μ›œ κ°€λŠ₯ CVEμž…λ‹ˆλ‹€. 도메인 컨트둀러λ₯Ό νŒ¨μΉ˜ν•˜μ‹­μ‹œμ˜€.

## 더 μ•Œμ•„λ³΄κΈ°

  * **전체 연ꡬ λ³΄κ³ μ„œ:** 패치 비ꡐλ₯Ό ν†΅ν•œ 버그 μœ„μΉ˜ 확인 방법, μ •ν™•ν•œ 버퍼 λ©”μ»€λ‹ˆμ¦˜, 그리고 곡개 PoCκ°€ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 이유. https://adscanpro.com/blog/patch-diffing-cve-2026-41089-netlogon
  * **ADscan LITE** (무료, μ˜€ν”ˆμ†ŒμŠ€): ν•˜λ‚˜μ˜ ν„°λ―Έλ„μ—μ„œ Active Directory 침투 ν…ŒμŠ€νŠΈ. μ—΄κ±°, BloodHound μˆ˜μ§‘, Kerberoasting, ADCS, 곡격 경둜, 증거. https://github.com/ADScanPro/adscan
  * **ADscan PRO:** νŒ€μ΄ AD μ—”κ²Œμ΄μ§€λ¨ΌνŠΈλ₯Ό μˆ˜ν–‰ν•  λ•Œ λ™μΌν•œ 킬체인 μžλ™ν™”. https://adscanpro.com/pro



* * *

연ꡬ: Yeray MartΓ­n DomΓ­nguez Β· ADscan Β· CVE-2026-41089 Β· Netlogon Β· Active Directory Β· 도메인 컨트둀러 Β· μŠ€νƒ 버퍼 μ˜€λ²„ν”Œλ‘œμš° Β· CLDAP Β· μΈμ¦λ˜μ§€ μ•ŠμŒ Β· 사전 인증 Β· proof of concept