AD-ACC-009: Readable password attributes¶
high Accounts MITRE ATT&CK T1552 Reads: LDAP
Password attributes (userPassword, unixUserPassword, msSFU30Password, orclCommonAttribute) are set on accounts and readable by an ordinary user.
Why it matters¶
Active Directory keeps real password hashes in attributes no one can read over LDAP. The attributes this check looks at are different: they are ordinary directory attributes that other software writes to.
unixUserPasswordandmsSFU30Passwordwere used by Services for UNIX and Identity Management for UNIX to serve NIS clients, often with a crypt(3) hash or clear text.userPasswordis, in AD DS, a plain attribute unless thefUserPwdSupportflag ofdSHeuristicsis set; scripts and LDAP tools from other directories write passwords into it.orclCommonAttributeis written by some Oracle directory integrations and can hold password material.
When any of them is readable, every domain user can collect the values and log on with them or crack them offline.
How ad-doctor detects it¶
From the LDAP snapshot: every account (users and computers, enabled or not) for which
the scanning user's search returned a value in userPassword, unixUserPassword,
msSFU30Password or orclCommonAttribute. ad-doctor records which attributes were
present, never their values.
Because the check depends on what the scanning account can read, it only shows values
readable by that account. On Windows Server 2025 unixUserPassword is a confidential
attribute, so an ordinary user does not see it there.
Each object names the account and the attributes, for example
svc_nfs (unixUserPassword, userPassword).
Attributes and probes read
userPasswordunixUserPasswordmsSFU30PasswordorclCommonAttribute
Severity¶
Always high: the value came back to the low-privileged scanning account, and these attributes usually hold a clear-text, encoded or weakly hashed password.
Fix¶
-
See who has the attributes (run as an admin; read-only):
-
Change the password of every reported account: assume the values have been read.
-
Clear the attributes.
ad-doctor fixgenerates the first three; addorclCommonAttributewhen it is reported. -
Stop the writer: retire the NIS or Oracle integration, or the script that sets
userPassword, so the values do not come back.
Verify¶
To accept the risk instead, add an entry to the file passed with --accept (see accepted risks):
[[accept]]
check = "AD-ACC-009"
objects = ["..."] # optional; without it the whole check is accepted
reason = "..."
expires = 2027-03-31
Related checks¶
References¶
Specifications
MITRE ATT&CK
Available since 0.1.0.