AD Fine-Grained Password Policy Ignored When Applied to a Group
Overview
A PSO linked to the wrong group type is stored but never applied. Check resultant policy per user and precedence before changing anything.
At a glance
- Symptom
- A Password Settings Object (PSO) exists and appears to be applied, yet users still receive the Default Domain Policy password rules.Typical observations: a user…
- Likely cause
- Fine-grained password policies apply to users and to global security groups, not to other group scopes or types.
- Impact
- Privileged or service-adjacent accounts silently remain on weaker domain-wide settings, so the intended length, history or lockout controls are not enforced.
- Verification signal
- Success is Get-ADUserResultantPasswordPolicy returning the intended PSO name and values for a sample of users, including one with multiple matching PSOs.Then attempt a password change in the test…
- Safe correction
- Link the PSO to a global security group that contains the intended users, either by creating a new group or by nesting the existing members into it.
- Rollback or recovery
- To undo, remove the new link from the PSO (or restore the previous AppliesTo value you recorded) and remove any group membership you added.
Symptom
A Password Settings Object (PSO) exists and appears to be applied, yet users still receive the Default Domain Policy password rules.
Typical observations: a user in the targeted group can set a password that the PSO should reject, or the PSO’s lockout and length values do not match what the user experiences.
False Assumption
The common assumption is that applying a PSO to any group, including a convenient distribution or domain local group, makes every member subject to it. The PSO tool accepting the entry is not proof that the policy is in force.
A second assumption is that the most restrictive PSO wins. Selection is by precedence, not strictness.
Root Cause
Fine-grained password policies apply to users and to global security groups, not to other group scopes or types. A PSO linked to a group of the wrong scope or type is stored but never resolved for its members.
When several PSOs apply, the one with the lowest precedence value wins. A PSO linked directly to a user generally takes priority over one linked through group membership. Confirm exact resolution rules in the Active Directory documentation for your Windows Server version.
Impact
Privileged or service-adjacent accounts silently remain on weaker domain-wide settings, so the intended length, history or lockout controls are not enforced. This is a medium-severity gap because it is invisible until audited, and it creates a false sense of compliance.
Diagnosis
Start read-only. Ask Active Directory what policy it resolves for a specific user rather than inspecting the PSO alone.
- Run Get-ADUserResultantPasswordPolicy for an affected user. An empty result means no PSO applies, so the Default Domain Policy is in force.
- List PSOs with Get-ADFineGrainedPolicy and note each Precedence and AppliesTo value.
- Check the target group’s GroupScope and GroupCategory. Anything other than Global and Security explains the failure.
- Check the user’s direct PSO links and membership in other targeted groups for a lower precedence value.
Related reading: LDAP signing not required on domain controllers covers another case where a setting looks applied but is not enforced, and No LAPS and shared local admin hashes covers the related credential exposure.
Correction
Link the PSO to a global security group that contains the intended users, either by creating a new group or by nesting the existing members into it. Nesting behaviour should be confirmed in the vendor documentation for your version, so link users directly if in doubt. Give each PSO a unique, deliberate precedence value.
Changes should be made in a non-production domain first, with a permissioned account, and recorded before and after. Stop if the resultant policy for a test user is not the one you expected.
Validation
Success is Get-ADUserResultantPasswordPolicy returning the intended PSO name and values for a sample of users, including one with multiple matching PSOs.
Then attempt a password change in the test environment with a value that violates the PSO and confirm it is rejected.
Rollback
To undo, remove the new link from the PSO (or restore the previous AppliesTo value you recorded) and remove any group membership you added. Re-run the resultant policy check to confirm users return to their earlier policy.
Do not delete the PSO during rollback unless a human reviewer approves, because it may be needed for other targets.
Prevention
- Create PSOs against global security groups only, by standard.
- Keep a precedence register so no two PSOs share a value.
- Add a recurring check that runs the resultant policy query for representative privileged accounts.
- Review PSO changes alongside domain controller replication health, since stale replication can also delay policy changes.
Next Safe Decision
If every sampled user resolves to the intended PSO, close the change. If any returns empty, fix group scope before adjusting policy values. Confirm version-specific behaviour in the Active Directory documentation listed in the sources.
Apply the safer control
Before you change production
Confirm the affected scope, export the current configuration, and test the replacement control in a non-production environment first.
Link the PSO to a global security group that contains the intended users, either by creating a new group or by nesting the existing members into it.
Validate the vendor-specific syntax in official documentation before applying it.
Verify, roll back or escalate
Verify
Success is Get-ADUserResultantPasswordPolicy returning the intended PSO name and values for a sample of users, including one with multiple matching PSOs.Then attempt a password change in the test environment with a value that violates the PSO and confirm it is…
Rollback
To undo, remove the new link from the PSO (or restore the previous AppliesTo value you recorded) and remove any group membership you added.
Escalate
Escalate when the blast radius is uncertain, the control cannot be tested safely, or remediation requires an outage or security exception.
Fixed? Get the next one before it hits you: The KBY Brief
Practical fixes for the systems you run, by email about twice a week. Unsubscribe at any time.
About this page
Dates
Published
Corrections
No corrections are listed for this page. Some review sweeps corrected pages without naming each one; those are in the corrections log.
Was this useful?
Reports go to the site owner and are used to correct pages. Corrections are listed at /corrections.