Like discovering the master key cabinet in your building has no lock — and someone published the floor plan
CVE-2026-47301 is a broken authorization check in Microsoft Configuration Manager's AdminService REST API. The service exposes two endpoints for uploading console extension CAB files — one checks RBAC permissions, the other doesn't. Any authenticated domain user with network reach to the SMS Provider can upload a malicious CAB archive through the unprotected chunked-upload endpoint. That CAB exploits a path-traversal flaw (CabSlip) during extraction to write a DLL-proxying payload into the bin\X64 directory, where the SMS_EXECUTIVE service — running as SYSTEM — loads it approximately every five minutes. The chain also bypasses SCCM's code-signing validation because it accepts any Authenticode signature chaining to a trusted root and doesn't check certificate revocation; a valid code-signing certificate costs about $58. Affected versions include ConfigMgr current branch 2503 (below 5.0.9135.1031), 2509 (below 5.0.9141.1030), and 2603 (below 5.0.9146.1021).
Microsoft rated this Important at CVSS 8.8 with Scope: Unchanged — a significant understatement. The vendor score treats this as a single-host privilege escalation, ignoring that SCCM Primary Site Servers control software deployment, endpoint protection policy, and administrative access across every managed Windows endpoint. Compromising the site server is not a one-box event; it is a fleet-takeover event. The vendor also initially flagged exploit maturity as 'Unproven' (E:U), which has been overtaken by Omri Baso's fully weaponized public PoC with compiled binaries, crafted CAB archives, and a step-by-step Medium writeup. Furthermore, KB38232642 (June 2026) closes only link 1 of the four-link chain — the RBAC bypass. The remaining three weaknesses (CabSlip path traversal, certificate validation bypass, unsigned DLL load) remain unpatched, with fixes expected in ConfigMgr 2609 (October 2026). This means even post-KB environments remain vulnerable to privilege escalation by anyone holding legitimate SCCM Operations Administrator or Full Administrator roles.
5 steps from start to impact.
Enumerate SCCM infrastructure via Active Directory
CN=System Management,CN=System container in Active Directory to identify machine accounts with GenericAll or FullControl permissions — these are SCCM site servers. This is a standard domain reconnaissance technique requiring only a domain user account. Tools like SharpSCCM, SCCMHunter, or raw LDAP queries surface site server hostnames, SMS Provider locations, and management point URLs.- Authenticated domain user account
- Network access to Active Directory (LDAP/S)
- Requires internal network position — external attacker must achieve initial access first
Upload malicious CAB via AdminService chunked endpoint
C1_AFW.exe automates this with a single command. Integrated Windows Authentication (Kerberos/NTLM) provides the credential context automatically.- Network reach to AdminService on SMS Provider (TCP 443)
- Domain user Kerberos/NTLM token
- KB38232642 restores the RBAC check and blocks this step for non-admin users
- AdminService may be firewall-restricted to designated management hosts
- Network segmentation between user VLANs and server VLAN may block access
adminservice.log on SMS Provider for POST requests to ConsoleExtensionMetadata from non-operator accounts. Alert on HTTP 500 responses with differing extraction-folder GUIDs. Splunk has released detection content for this endpoint.CabSlip path traversal writes DLL to bin\X64
..\..\..\..\) in its internal directory structure. When the SMS Provider extracts the CAB, the traversal escapes the intended extraction folder and writes adsource.dll (attacker payload) and adsource_original.dll (proxied original) directly into the Configuration Manager bin\X64 installation directory. The CAB must carry a valid Authenticode signature, but SCCM accepts any certificate chaining to a trusted root and does not check CRL — a code-signing certificate from a commercial CA costs approximately $58.- Step 2 successful
- CAB signed with any trusted Authenticode certificate (~$58)
- No patch available for this link (expected in ConfigMgr 2609, October 2026)
- File integrity monitoring on bin\X64 may detect the write
<InstallDir>\bin\X64\ directory. Alert on creation of adsource_original.dll or any non-Microsoft-signed DLL. Windows Sysmon Event ID 11 (FileCreate) scoped to the path.SMS_EXECUTIVE loads hijacked DLL as SYSTEM
SMS_EXECUTIVE service (smsexec.exe) runs as SYSTEM and periodically loads adsource.dll through adsysdis.dll's import table — approximately every 5 minutes during normal operation. The service does not verify the DLL's signature or integrity before loading. The malicious DLL's DllMain executes the attacker's payload while forwarding legitimate calls to adsource_original.dll to maintain service stability and avoid detection through crashes.- Malicious adsource.dll present in bin\X64
- SMS_EXECUTIVE service running (always-on for site servers)
- ~5 minute delay before first execution — not instantaneous
- No patch for this link until ConfigMgr 2609
Pivot from site server SYSTEM to fleet-wide control
- SYSTEM-level access on Primary Site Server
- None — SCCM's fleet management capabilities are inherent to the site server role
SMS_ConsoleExtensionData.SMS_ConsoleExtensionData. Expand nested AD group memberships. Remove unnecessary assignments. Post-KB38232642, these are the only accounts that can reach link 2 — minimizing them shrinks the privileged attacker pool. Complete within 3 days.<InstallDir>\bin\X64\ directory outside of patch windows. Specifically alert on adsource_original.dll creation and any non-Microsoft-signed adsource.dll. This provides detection-in-depth for the unpatched links 3–4 of the chain. Deploy within 3 days.smsexec.exe loads a DLL not signed by Microsoft. Also baseline and alert on unexpected child processes of smsexec.exe. This detects link 4 exploitation at the moment of payload execution. Deploy within 3 days.- MFA on SCCM console login — the exploit targets the AdminService REST API via Integrated Windows Authentication (Kerberos/NTLM), not the MMC console GUI. MFA policies applied to console launches do not protect the API endpoint.
- EDR deployed to managed endpoints only — the attack targets the SCCM Primary Site Server, not the managed fleet. EDR on managed workstations cannot detect or prevent site server compromise. You need EDR *on the site server itself*.
- Disabling the AdminService entirely — the AdminService is required for CMPivot, the modern SCCM console, community hub, and PowerShell automation cmdlets. Disabling it breaks critical management workflows. Network-level restriction is the correct control.
- SCCM client compliance baselines — these run on managed endpoints and evaluate client-side posture. They have zero visibility into server-side exploitation of the AdminService or DLL hijacking on the site server.
The supporting signals.
| In-the-wild exploitation | No confirmed in-the-wild exploitation as of October 2026. Not listed in CISA KEV. No known ransomware campaigns leveraging this chain — *yet*. The $58 barrier and weaponized PoC make escalation to active exploitation highly probable. |
|---|---|
| Proof-of-concept | Weaponized and public. Omri Baso published SCCM-CVE-2026-47301-Remote-Code-Execution-Exploit on GitHub (108+ stars, Apache 2.0). Includes C# source, compiled release binary (C1_AFW.exe), crafted CAB archives (evil_RID500.cab), and a detailed Medium writeup. Listed on pocindex.io. Also aggregated in asvorg/CVE-2026-PoCs and SecureWithUmer/CVE-2026-PoCs. |
| EPSS | 0.00778 (0.78%) — approximately 85th percentile. Low predicted probability of mass exploitation in the next 30 days, but EPSS historically underweights post-exploitation infrastructure-targeting chains that are not internet-scannable. |
| CISA KEV status | Not listed as of 2026-10-07. No federal agency remediation deadline set. No ransomware-use flag. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (8.8). Network-accessible, low complexity, requires only low-privilege authentication, no user interaction. Microsoft's Scope: Unchanged is misleading — compromising the site server grants administrative control over all managed endpoints, which constitutes a scope change to a different security authority (S:C would yield 9.9). |
| Affected versions | ConfigMgr current branch 2503 (< 5.0.9135.1031), 2509 (< 5.0.9141.1030), 2603 (< 5.0.9146.1021). Older LTSB/LTSC branches not confirmed but may share the AdminService codebase. |
| Fixed versions | KB38232642 (June 2026) fixes link 1 only (RBAC bypass). Links 2–4 (CabSlip path traversal, certificate validation bypass, unsigned DLL load) remain unpatched — full fix expected in ConfigMgr 2609 (October 2026). Post-KB, exploitation requires SCCM Operations Administrator or Full Administrator role holding Create on SMS_ConsoleExtensionData. |
| Exposure / scanning | SCCM AdminService is an internal REST API binding to HTTPS 443 on the SMS Provider; near-zero internet exposure per Shodan/Censys. However, ~9,000 verified enterprise deployments per Landbase means broad internal attack surface. No GreyNoise tags observed for this CVE. |
| Disclosure timeline | Researcher disclosure to Microsoft → KB38232642 released June 2026 → CVE published 2026-07-14 → Full PoC published on GitHub mid-August 2026 → ConfigMgr 2609 (full fix) expected October 2026. |
| Researcher | Omri Baso — independent security researcher. Published detailed technical writeup on Medium and full exploit chain on GitHub. Third-party analysis by Forestall, CybersecurityNews, RankiTeo, and TechTimes. |
Sources.
- Forestall — CVE-2026-47301 SCCM Console Extension Chain Analysis
- Omri Baso — PoC Exploit Repository (GitHub)
- CybersecurityNews — Public Exploit Code Released for Microsoft SCCM RCE
- TechTimes — SCCM Lets Attackers Compromise Enterprise Fleets for $58
- RankiTeo — PoC Exploit Enabling SYSTEM-Level Code Execution
- NVD — CVE-2026-47301
- SentinelOne Vulnerability Database — CVE-2026-47301
- NHS England Digital — Microsoft July 2026 Security Updates
Why this verdict
- Fleet-control-plane compromise: SCCM Primary Site Servers manage software deployment, endpoint protection policy, and administrative access for every Windows endpoint in scope. SYSTEM on the site server = arbitrary code execution on the entire managed fleet. This is not a single-host escalation — it is domain-scale impact that Microsoft's Scope: Unchanged rating fails to capture.
- Weaponized public exploit with trivial prerequisites: Omri Baso's GitHub repository includes compiled binaries, crafted CAB archives, and a step-by-step blog post. The only barrier is a $58 code-signing certificate and a domain user account. Any insider, contractor, or post-phishing attacker clears this bar effortlessly.
- Partial patch leaves 75% of chain exposed: KB38232642 closes only the RBAC bypass (link 1). The CabSlip path traversal, certificate validation bypass, and unsigned DLL load remain unpatched until ConfigMgr 2609 (October 2026). Post-KB, any account with Operations Administrator or Full Administrator role can still execute the full chain — and RBAC over-provisioning is endemic in SCCM deployments.
- Role multiplier: SCCM is *by definition* a high-value-role component — 100% of Primary Site Servers occupy the fleet-management control plane. Blast radius for a successful chain is fleet-scale: push ransomware to all managed endpoints, disable EDR fleet-wide, extract NAA credentials, create persistent admin accounts. This is functionally equivalent to compromising vCenter or a domain controller. The chain succeeds in the canonical deployment role, and the outcome is fleet compromise — verdict floor is CRITICAL.
- Friction — internal network only — does not break the floor: The attack requires internal network access and an authenticated domain user. These are real friction points that prevent mass internet exploitation. However, they describe the *default operating environment* for SCCM — the product is never internet-facing by design. Every domain user in an SCCM-managed enterprise meets the prerequisites. Internal network access is table stakes for any post-phishing, post-VPN, or insider threat scenario and cannot lower the verdict below the deployment-role floor.
Why not higher?
A 9.1 rather than 9.8+ reflects two genuine friction points: the attack is strictly internal-only (near-zero internet exposure per Shodan/Censys), and KB38232642 does exist to close the unauthenticated entry point for organizations that have applied it — reducing the unpatched attacker pool from 'every domain user' to 'SCCM admins only.' No confirmed in-the-wild exploitation and an EPSS of 0.78% argue against the absolute ceiling.
Why not lower?
The deployment-role floor for SCCM — a canonical fleet-management control plane — is CRITICAL when the documented chain ends in fleet compromise. Friction from internal-network-only access does not break the floor because SCCM's entire attack surface IS the internal network by design; this is not an exposure limitation, it is the product's normal operating condition. Downgrading to HIGH would require evidence that fewer than 1% of ConfigMgr deployments serve as production fleet-control infrastructure, which contradicts the product's fundamental purpose.
Crowdsourced verification payload.
Run on each SCCM Primary Site Server as a local administrator. Invoke: powershell -ExecutionPolicy Bypass -File .\Check-CVE-2026-47301.ps1. Exits 0 (PATCHED), 1 (VULNERABLE), or 2 (UNKNOWN). Also performs IOC checks for exploitation artifacts (adsource_original.dll and non-Microsoft-signed adsource.dll).
<# CVE-2026-47301 - Microsoft Configuration Manager RBAC Bypass
noisgate verification script | 2026-10-07
Run on: SCCM Primary Site Server
Requires: Local administrator privileges
Output: VULNERABLE / PATCHED / UNKNOWN
#>
$ErrorActionPreference = 'SilentlyContinue'
# Patched build numbers per current branch (KB38232642)
$PatchedBuilds = @{
'9135' = [version]'5.0.9135.1031' # CB 2503
'9141' = [version]'5.0.9141.1030' # CB 2509
'9146' = [version]'5.0.9146.1021' # CB 2603
}
$setupKey = 'HKLM:\SOFTWARE\Microsoft\SMS\Setup'
if (-not (Test-Path $setupKey)) {
Write-Output 'UNKNOWN - ConfigMgr site server role not detected (registry key absent).'
exit 2
}
$props = Get-ItemProperty $setupKey
$installDir = $props.'Installation Directory'
if (-not $installDir) {
Write-Output 'UNKNOWN - Installation Directory not found in registry.'
exit 2
}
$smsExecPath = Join-Path $installDir 'bin\X64\smsexec.exe'
if (-not (Test-Path $smsExecPath)) {
Write-Output 'UNKNOWN - smsexec.exe not found. Confirm this is a site server.'
exit 2
}
$ver = [version](Get-Item $smsExecPath).VersionInfo.FileVersion
$branch = $ver.Build.ToString()
Write-Output "[*] ConfigMgr build detected: $ver (branch $branch)"
# --- IOC checks ---
$adsOriginal = Join-Path $installDir 'bin\X64\adsource_original.dll'
$adsource = Join-Path $installDir 'bin\X64\adsource.dll'
$iocFound = $false
if (Test-Path $adsOriginal) {
Write-Output "[!] IOC: adsource_original.dll EXISTS at $adsOriginal"
Write-Output ' This file is created by the public exploit and should not exist.'
$iocFound = $true
}
if (Test-Path $adsource) {
$sig = Get-AuthenticodeSignature $adsource -ErrorAction SilentlyContinue
if ($sig -and $sig.SignerCertificate) {
if ($sig.SignerCertificate.Subject -notmatch 'O=Microsoft') {
Write-Output "[!] IOC: adsource.dll signed by '$($sig.SignerCertificate.Subject)' - NOT Microsoft"
$iocFound = $true
}
} elseif ($sig.Status -eq 'NotSigned') {
Write-Output '[!] IOC: adsource.dll is UNSIGNED'
$iocFound = $true
}
}
if ($iocFound) {
Write-Output '[!!] ACTION REQUIRED: Investigate for active compromise BEFORE patching.'
Write-Output ''
}
# --- Version check ---
if ($PatchedBuilds.ContainsKey($branch)) {
$required = $PatchedBuilds[$branch]
if ($ver -ge $required) {
Write-Output "PATCHED - Build $ver >= $required. KB38232642 applied."
Write-Output 'Note: Links 2-4 (CabSlip, cert bypass, DLL hijack) remain open until ConfigMgr 2609.'
exit 0
} else {
Write-Output "VULNERABLE - Build $ver < $required. KB38232642 NOT applied."
Write-Output 'Any domain user with network reach to AdminService can exploit this chain.'
exit 1
}
} elseif ([int]$branch -gt 9146) {
Write-Output "PATCHED - Build $ver is newer than all known-affected branches."
exit 0
} else {
Write-Output "UNKNOWN - Branch $branch not in known-affected list. Verify against MSRC advisory."
exit 2
}