Skip to content

fix(analysis): Refine dMSA post-processing conditions (#3529) - #3583

Draft
adilalperenciftci wants to merge 2 commits into
SpecterOps:mainfrom
adilalperenciftci:fix/dmsa-badsuccessor-hardening
Draft

adilalperenciftci wants to merge 2 commits into
SpecterOps:mainfrom
adilalperenciftci:fix/dmsa-badsuccessor-hardening

Conversation

@adilalperenciftci

Copy link
Copy Markdown

Problem

#3529 derives a domain-level BadSuccessor relationship from CreateDMSA without distinguishing domain controller patch state. That overstates reachability on fully patched domains, where the analysis must also establish write access to both victim attributes. The dMSA relationships are also missing a dedicated edge-filter category, and the schema test uses the internal package despite exercising only exported symbols.

Solution

I retained #3529's dMSA schema and post-processing work and made the derivation patch-aware. The analysis now uses registry-backed domain controller build and revision data, emitting the domain relationship only when a collected Windows Server 2025 controller predates build 26100.4946. Patched or unknown environments use the conservative target-specific model: the same CreateDMSA principal must have GenericAll, GenericWrite, or both attribute-specific write relationships over the victim.

I added ingestion and schema support for the build evidence and the two attribute-specific relationships, grouped the four dMSA relationships under Delegated Managed Service Accounts, and moved exported schema coverage to package ad_test.

Collector companions:

Resolves #2424.

Testing

  • just generate
  • just analyze
  • just show
  • go test -tags integration -v ./packages/go/analysis/ad -run TestDMSA -count=1 -timeout 15m
  • go test ./packages/go/analysis/ad/... ./packages/go/ein -count=1
  • go vet ./packages/go/analysis/ad/...
  • yarn workspace bh-shared-ui test run src/views/Explore/ExploreSearch/EdgeFilter/edgeCategories.test.tsx

4ndr3w6 and others added 2 commits October 25, 2026 04:16
…ssor, OuroborosSelfEnroll, DMSAPrecededBy edges

BloodHound-side modeling for delegated MSA abuse (dMSA Ouroboros / BadSuccessor, CVE-2025-53779): new DMSA node kind, ingest-time CreateDMSA ACL edge, post-processed BadSuccessor (principal -> Domain) and OuroborosSelfEnroll edges, and the structural DMSAPrecededBy edge; PostBadSuccessor/PostOuroborosSelfEnroll wired into Post(). Schema-registration unit test. SharpHound collection + ein ingest + serial_integration behavioral tests follow in a companion PR.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 25, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@adilalperenciftci

Copy link
Copy Markdown
Author

recheck

1 similar comment
@adilalperenciftci

Copy link
Copy Markdown
Author

recheck

@adilalperenciftci

Copy link
Copy Markdown
Author

I have read the CLA Document and I hereby sign the CLA

@adilalperenciftci

Copy link
Copy Markdown
Author

recheck

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature: Full BadSuccessor Detection Support

2 participants