LAPS
MS-MCS-ADMPWD
EVENT 4662
PASSWORD READ
DetectionBlue TeamSOCOctober 12, 2026•9 min read

Detecting LAPS Password Abuse: Reads of Managed Admin Passwords

LAPS makes every local admin password unique, then stores it in an attribute that anyone with the right ACL can read. The reader is the attack surface.

Scroll

LAPS removes shared local administrator passwords, but it moves the secret into Active Directory. Whoever holds read rights on the attribute can fetch the local admin password for every host in scope, which is exactly what attackers do after they compromise a helpdesk or delegated account. Auditing reads, and auditing who can read, covers both the attack and its precondition.

Signals at a Glance

SignalWhereATT&CK
4662 property read of ms-Mcs-AdmPwd by an unexpected accountDC Security 4662T1552
One account reading the attribute on many computer objectsDC Security 4662T1552
LDAP query requesting ms-Mcs-AdmPwd or msLAPS-PasswordDC 1644, MDIT1087.002
Groups or users with All Extended Rights on an OUACL auditT1222
Local admin logon shortly after a password readHost 4624 type 3 or 10T1078.003

Auditing the Read

Directory-service access auditing records property reads only if the computer objects carry a SACL for them. Once it is on, Event ID 4662 shows the read, but the Properties field holds the schema GUID of the attribute, and that GUID is specific to your forest because the LAPS attribute is a schema extension. Look it up once and put it in the rule:

# Run once per forest and keep the value in your detection config
# (tune/validate). Legacy LAPS attribute:
$schema = (Get-ADRootDSE).schemaNamingContext
$o = Get-ADObject -SearchBase $schema -Filter { name -eq 'ms-Mcs-AdmPwd' } `
     -Properties schemaIDGUID
[guid]$o.schemaIDGUID
# Windows LAPS attributes use the same lookup for msLAPS-Password and
# msLAPS-EncryptedPassword.
let lapsGuid = "00000000-0000-0000-0000-000000000000";   // tune/validate: your schema GUID
let lapsReaders = dynamic(["svc-laps-reader","helpdesk-t2"]);   // documented readers
SecurityEvent
| where EventID == 4662
| where Properties has lapsGuid
| where SubjectUserName !in (lapsReaders) and SubjectUserName !endswith "$"
| summarize hosts = dcount(ObjectName), first = min(TimeGenerated), last = max(TimeGenerated)
          by SubjectUserName, SubjectLogonId, bin(TimeGenerated, 15m)
| order by hosts desc

Who Can Read, and What Happens Next

A read by an authorised helpdesk user is normal. A read by an account that has never done it, or a read of hundreds of objects in minutes, is not. Review the preconditions on a schedule, and correlate the read with the local logon that follows:

Vetted sources

Use the SigmaHQ and Elastic LAPS rules, Microsoft’s Windows LAPS documentation for the attribute names and audit options, Trimarc and SpecterOps AD hardening guidance, and the LAPS PowerShell modules for rights review. Baseline your own environment — helpdesk tooling and PAM vaults read this attribute continuously and belong in the reader list.

Build Detections That Fire

Mjolnir Security helps blue teams turn threat intelligence into high-fidelity detections across endpoint, network, identity and cloud telemetry.

Detection EngineeringManaged Detection & ResponseThreat HuntingIncident ResponsePurple Teaming
  • Detection Engineering We build and tune detections mapped to ATT&CK from your own telemetry.
  • Threat Hunting as a Service Hypothesis-driven hunts for the behaviours on this page.
  • 24/7 Incident Response Containment when a detection fires. Call +1 833 403 5875.
Written by: Mjolnir Threat Research (MTAC)  |  Published: October 12, 2026  |  Last reviewed: October 12, 2026