What Is Group Policy Preferences?
Group Policy Preferences (GPP) is a feature in Windows Active Directory that allows domain administrators to configure settings on domain-joined computers via Group Policy — including mapping drives, configuring scheduled tasks, and managing local user accounts and their passwords. GPP configuration files are stored as XML in the SYSVOL share on domain controllers, which is readable by all domain-authenticated users by design (SYSVOL distributes policy to all domain members).
This is precisely the source of the vulnerability: SYSVOL is world-readable, and GPP stored passwords with encryption — but used a fixed AES-256 key that Microsoft published in its own documentation.
Overview
CVE-2014-1812 describes a fundamental design flaw in Windows Active Directory's Group Policy Preferences: when administrators deployed local account passwords via GPP, those passwords were AES-256 encrypted and stored in XML files in SYSVOL. However, Microsoft published the encryption key in its own MSDN documentation (to allow application compatibility). Because all authenticated domain users can read SYSVOL, any domain user can read the GPP XML files and use the published key to decrypt administrator passwords. This is not a software bug in the traditional sense — it is a security architecture failure: encryption with a publicly documented key provides no confidentiality.
This was one of the most exploited techniques in penetration testing from 2012 through the mid-2020s, standardized in tools like PowerSploit and Metasploit.
Affected Versions
| System | Status |
|---|---|
| Windows Vista / Server 2008 and later (GPP-enabled) | Vulnerable if GPP passwords are configured |
| Windows Server 2003 | Not affected (GPP introduced in Server 2008) |
The vulnerability exists anywhere GPP passwords were configured before or after MS14-025. The patch removes the ability to set new GPP passwords but does not remove existing ones from SYSVOL — existing cpassword entries must be found and deleted manually.
Technical Details
The Published AES Key
Microsoft's MSDN documentation for the Group Policy Preferences SDK published the AES-256 key used to encrypt the cpassword attribute:
4e 99 06 e8 fc b6 6c c9 fa f4 93 10 62 0f fe e8
f4 96 e8 06 cc 05 79 90 20 9b 09 a4 33 b4 54 54
This key is the same across all Windows deployments worldwide. Publishing a symmetric encryption key in documentation eliminates any security benefit the encryption provides.
Where the Credentials Are Stored
GPP passwords appear in XML files within SYSVOL:
- Local Users and Groups:
\\<domain>\SYSVOL\<domain>\Policies\{GUID}\Machine\Preferences\Groups\Groups.xml - Scheduled Tasks:
...\ScheduledTasks\ScheduledTasks.xml - Services:
...\Services\Services.xml - Data Sources:
...\DataSources\DataSources.xml - Drives:
...\Drives\Drives.xml
The cpassword attribute in these files contains the AES-encrypted password. Any authenticated domain user can read these files and any user with the published key can decrypt them.
Attack Steps
- Authenticate to the domain as any low-privileged domain user
- Search SYSVOL for
cpasswordentries:findstr /S /I cpassword \\<domain>\sysvol\<domain>\policies\*.xml - Decrypt the value using the published AES key (automated by tools)
- Use the recovered credentials (typically local administrator passwords) for lateral movement across all machines where that GPP password was deployed
Impact Scale
A single GPP password policy applied to 1,000 workstations means all 1,000 workstations share the same local administrator password — and that password is readable by all ~10,000 domain users. One low-privileged account → domain-wide lateral movement.
Tool Automation
| Tool | Command |
|---|---|
| PowerSploit | Get-GPPPassword |
| Metasploit | post/windows/gather/credentials/gpp |
| CrackMapExec | --gpp-passwords |
| Impacket | Various SYSVOL enumeration tools |
Discovery
The vulnerability class was documented by security researcher Chris Campbell in 2012 and quickly became a standard penetration testing technique. The pentesting community had been using this technique for years before Microsoft formally addressed it with MS14-025 in May 2014. The Get-GPPPassword PowerShell function (part of PowerSploit) became a standard post-compromise enumeration tool.
Exploitation Context
- Massively used in penetration testing: From 2012 onward, GPP password hunting was a standard step in any Active Directory penetration test; automated tools made it a one-command operation
- Ransomware operators: Ransomware groups use GPP password extraction as part of their Active Directory reconnaissance and lateral movement playbooks — confirmed use by multiple ransomware families (
ransomwareUse: true) - APT campaigns: Nation-state actors conducting long-term intrusions routinely harvest GPP credentials as part of domain enumeration
- Long exploitation window: Microsoft was aware of the issue for years before patching, citing it as "by design"; external pressure (including security community publication) ultimately drove MS14-025
- CISA KEV: Added November 2021, confirming active exploitation continues — many organizations still have un-deleted
cpasswordentries in SYSVOL even after patching
Remediation
-
Apply MS14-025 — removes the ability to set new passwords via GPP. This prevents the problem from recurring but does not remove existing cpassword entries.
-
Audit and remove existing cpassword entries from SYSVOL:
# Find all GPP files with cpassword in SYSVOL findstr /S /I /M "cpassword" "\\<domain>\SYSVOL\<domain>\Policies\*.xml"Delete the
cpasswordattribute from all identified files. The GPP objects themselves can remain (with the password field empty). -
Rotate all passwords that were deployed via GPP. These passwords must be treated as permanently compromised — assume any attacker with domain user access has already retrieved them.
-
Deploy Microsoft LAPS (Local Administrator Password Solution) as the replacement for managing local administrator passwords. LAPS stores unique per-computer passwords in Active Directory (encrypted, with access controls) rather than in SYSVOL.
-
Verify with a post-remediation scan: Use
Get-GPPPassword(PowerSploit) or equivalent tooling after cleanup to confirm nocpasswordentries remain. -
Monitor for SYSVOL access patterns that suggest enumeration: bulk reads of policy XML files from non-administrative endpoints.
Key Details
| Property | Value |
|---|---|
| CVE ID | CVE-2014-1812 |
| Vendor / Product | Microsoft — Windows |
| NVD Published | 2014-05-14 |
| NVD Last Modified | 2025-10-22 |
| CVSS 3.1 Score | 8.8 |
| CVSS 3.1 Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Severity | HIGH |
| CWE | CWE-255 — Credentials Management Errors find similar ↗ |
| CISA KEV Added | 2021-11-03 |
| CISA KEV Deadline | 2022-05-03 |
| Known Ransomware Use | ⚠️ Yes |
CVSS 3.1 Breakdown
Required Action
Timeline
| Date | Event |
|---|---|
| 2006-2009 | Group Policy Preferences feature introduced in Windows Server 2008, allowing local account password deployment via GPP; AES-256 key published in MSDN documentation |
| 2012-05-23 | MS14-025 vulnerability class publicly documented by security researcher Chris Campbell; widely known in pentesting community before CVE assignment |
| 2014-05-13 | Microsoft Security Bulletin MS14-025 released; patch removes ability to set passwords via GPP |
| 2014-05-14 | CVE-2014-1812 published by NVD |
| 2021-11-03 | Added to CISA Known Exploited Vulnerabilities catalog |
| 2022-05-03 | CISA BOD 22-01 remediation deadline |
References
| Resource | Type |
|---|---|
| NVD — CVE-2014-1812 | Vulnerability Database |
| CISA KEV Catalog Entry | US Government |
| Microsoft Security Bulletin MS14-025 — Vulnerability in Group Policy Preferences Could Allow Elevation of Privilege | Vendor Advisory |
| Microsoft: Group Policy Preferences Overview | Vendor Advisory |
| PowerSploit: Get-GPPPassword — PowerShell script to retrieve GPP passwords | Security Research |