back to writeups

Checkpoint

Hack The Box · app.hackthebox.com/machines/Checkpoint · Season 11
Machine rank #4004 Windows Medium Season 11 Active Directory Supply chain dMSA User Root ● Completed
TL;DR A modern Active Directory box on Windows Server 2025, played as an assumed breach from a single low-privileged credential. Full domain compromise came from chaining five distinct weaknesses: over-broad AD object permissions (Reanimate-Tombstones), a software supply-chain path through an auto-installing VS Code extension share, a patched-but-still-abusable dMSA migration primitive, a VMware memory image sitting on a backup share, and local Administrator password reuse across the estate.
Target
DC01.checkpoint.htb
Host OS
Windows Server 2025 (build 26100) — Domain Controller
Start
Assumed breach — one supplied low-privileged credential
Foothold
Tombstone reanimation → malicious VSIX on the DevDrop share
Privesc
dMSA BadSuccessor variant → Volatility hashdump → Pass-the-Hash
The chain in one line low-priv user with Reanimate-Tombstones → restore a deleted developer account → write access to the DevDrop extension share → malicious VSIX → shell as ryan.brooks → GenericWrite over svc_deploy → dMSA successor-link abuse leaks svc_deploy's key → VMBackups share → .vmem snapshot → Volatility hashdump → local Administrator hash reused by the domain Administrator → Pass-the-Hash → SYSTEM.

01Reanimating a tombstone

The starting account holds Reanimate-Tombstones on the domain, plus writable control over a deleted user object. That combination is the whole foothold: when an AD object is deleted it becomes a tombstone, and a tombstone keeps its old password hash. Restore the deleted developer account and it comes back with credentials that still work — in this case the same password the starting account was given.

Deleted-object recovery is a legitimate administrative capability, which is exactly why it is dangerous when it sits on a standard user: it is an identity-resurrection primitive, not a housekeeping convenience.

02Foothold — a VSIX supply chain

The restored account has read and write access to a share called DevDrop, which the developer workstation profile auto-installs VS Code 1.118.0 extensions from. Write access to a directory that something else automatically executes is a supply-chain path, not a file share.

A VSIX is a zip with a manifest. Setting activationEvents to * makes the extension run as soon as the editor loads it, so the payload does not need any user interaction beyond the auto-install that already happens:

# build a VSIX whose manifest activates on '*' and launches a PowerShell reverse shell
# then drop it where the profile auto-installs from
smbclient //DC01.checkpoint.htb/DevDrop -U 'checkpoint.htb\<restored-user>'
smb: \> put malicious.vsix

The callback lands as the developer, ryan.brooks.

user.txt<redacted>

03dMSA abuse — BadSuccessor on a patched DC

The developer holds GenericWrite over a service account, svc_deploy, and svc_deploy is the sole member of BackupAccess. The intended route is the dMSA migration primitive — the BadSuccessor class of issue (CVE-2025-53779), where a delegated Managed Service Account can be pointed at a "superseded" account and inherit its keys.

The direct version fails here: the DC is patched, so a dMSA aimed straight at Administrator returns KRB_ERR_GENERIC — the fix requires a mutual successor link rather than a one-way claim. The pivot is to satisfy that requirement using the two identities already held:

  1. As the low-privileged user, create a dMSA whose successor link points forward at svc_deploy.
  2. As the developer (who has GenericWrite over svc_deploy), write the reverse msDS-SupersededManagedAccountLink / state attributes back at the dMSA.
  3. With both directions present, the link is "mutual" and the KDC accepts it.
  4. Request a dMSA S4U2self ticket — the KERB-DMSA-KEY-PACKAGE in the response carries svc_deploy's previous key, i.e. its NT hash.

The lesson is a good one: "patched" closed the obvious path, but the primitive was still reachable by composing two permissions that each looked harmless on their own.

04Looting a memory image

As svc_deploy, the BackupAccess membership opens the VMBackups share. Under NightlyBackup/.../memory forensics/ sits a 2 GB VMware .vmem snapshot — a full memory image of a running machine, sitting on a file share.

Volatility 3 does the rest:

vol -f NightlyBackup.vmem windows.hashdump

That returns the local Administrator NT hash.

05Root — password reuse and Pass-the-Hash

The local Administrator hash is reused by the checkpoint.htb domain Administrator. That is the last link: no exploit, just the same password in two places.

nxc smb DC01.checkpoint.htb -u Administrator -H <nt-hash> -x 'whoami'
# or: impacket-psexec -hashes :<nt-hash> checkpoint.htb/Administrator@DC01

root.txt sat under max.palmer's profile rather than Administrator's, so it needed reading in the Administrator execution context (nxc -x or wmiexec) rather than a plain SMB fetch.

root.txt<redacted>

06Operational gotchas

Tooling used throughout: nmap, NetExec (nxc), bloodyAD, ldapsearch with GSSAPI, smbclient, Impacket (getTGT / getST / psexec), Volatility 3, netcat.

07If this were your environment

This is a Tier 0 incident: a single low-privileged credential reached SYSTEM on a Domain Controller. The immediate response is to rotate every credential involved including the built-in Administrator, and to remove the rogue dMSAs and successor links before anything else.

Finding 1 · High

Reanimate-Tombstones and CREATE_CHILD granted to standard users

Deleted-object recovery on a standard account is an identity-resurrection primitive: tombstones retain their password hashes, so restoring one hands back a working identity.

How I would fix it
NIST 800-53 r5: AC-6 least privilege · AC-2 account management · AC-3 access enforcement · AU-6 audit review
DISA STIG: Windows Server 2025 / Active Directory STIG — delegation and object permission requirements
Finding 2 · Critical

Writable auto-installing extension share (VSIX supply chain)

Any account able to write to DevDrop could execute code in every developer's editor session. The share was an unsigned, unreviewed software distribution channel.

How I would fix it
NIST 800-53 r5: SI-7 software & information integrity · CM-5 access restrictions for change · CM-7 least functionality · SR-3 / SR-11 supply chain controls
CIS Controls v8: 2.x software inventory & allow-listing · 16.x application software security
Finding 3 · Critical

Unpatched dMSA successor primitive, and memory images on a file share

The DC was missing the fix that closes the mutual-link variant, and a VMware .vmem snapshot — containing live credential material — was readable by a service account's backup group.

How I would fix it
NIST 800-53 r5: SI-2 flaw remediation · SC-28 protection of information at rest · AC-6 least privilege · MP-4 media storage
DISA STIG: Windows Server 2025 baseline
Finding 4 · Critical

Local Administrator password reused by the domain Administrator

A hash recovered from one host's memory authenticated as the domain Administrator. Every preceding step only mattered because this last one was free.

How I would fix it
NIST 800-53 r5: IA-5 authenticator management · AC-2 account management · AC-6 least privilege

08Detection — the blue-team side

09Takeaways

◆If this were my environment

This path combined identity lifecycle mistakes, extension trust and delegated-account abuse. I would harden the entire administrative supply chain, from package provenance to Tier 0 account creation and monitoring.

Priority controls
  • Remove stale and tombstoned privileged objects, review delegated rights continuously, and alert on dMSA creation or predecessor-link changes.
  • Allow only signed, approved VSIX packages from controlled repositories and block extension installation on privileged workstations.
  • Protect LSASS with Credential Guard and PPL, prevent privileged logons to lower-tier hosts, and use LAPS or gMSAs instead of reusable secrets.
  • Apply certificate, directory and endpoint baselines through versioned policy; validate the resulting effective settings on every role.

Hardening guides and benchmarks

These references offer different implementation paths: consensus benchmarks, prescriptive government checklists, vendor baselines and application-security verification requirements. I would select the profile that matches the system's role, document exceptions, test it in staging and continuously measure drift.

Operational note CIS and DISA profiles can affect compatibility. Apply them through version-controlled policy, start in audit mode where supported, test business workloads and record every exception with an owner and review date.

back to writeups