Skip to content

Conversation

@jeff-matthews
Copy link
Contributor

@jeff-matthews jeff-matthews commented Dec 30, 2025

Purpose

This pull request (PR):

  • Brings the traversable vs non-traversable edges page up to date
  • Adds cross references to relevant SpecterOps blog posts in the edge and node reference pages as requested in BP-2264
  • Replaces redirected blog post links with the correct link (housekeeping)

I couldn't find blog posts for all edges and nodes, but I included all that I could find.

TODOs

  • I found 32 "old" blog links (https://posts.specterops.io/) that do not redirect to an actual post and instead link to the blog home page. I'm assuming that's related to the recent blog migration. I'm going to try cleaning that up before merging this PR.

Future considerations

  • Normalize link formatting in References sections. We have mixed use of publication title or URL as link text. I prefer title. For this PR, I followed the pre-existing pattern on the page to limit scope.
  • Visual element (badge?) on each edge page to indicate whether an edge is traversable as requested in BP-2264. I think we should do this in a separate PR because it requires a team discussion about the recently introduced Schema section.

Summary by CodeRabbit

  • Documentation
    • Updated many edge and node docs to use current SpecterOps/BloodHound blog URLs and added new external references.
    • Expanded ADCS-related references across numerous pages.
    • Reformatted and enriched References lists (converted plain links to bulleted entries and added items).
    • Reordered and clarified traversable/non-traversable edge tables for AD mappings.

✏️ Tip: You can customize this high-level summary in your review settings.

@jeff-matthews jeff-matthews self-assigned this Dec 30, 2025
@jeff-matthews jeff-matthews added the documentation Improvements or additions to documentation label Dec 30, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 30, 2025

Walkthrough

This PR updates ~120+ MDX documentation files: adds/replaces external reference URLs (mostly moving SpecterOps posts to specterops.io blog URLs), reformats some References lists, and reorders entries in the traversable/non-traversable edge type tables in docs/resources/edges/traversable-edges.mdx.

Changes

Cohort / File(s) Summary
ADCS edge & node docs
docs/resources/edges/adcs-esc{1,3,4,6a,6b,9a,9b,10a,10b,13}.mdx, docs/resources/nodes/{cert-template,issuance-policy,root-ca,nt-auth-store,aiaca}.mdx
Replaced older SpecterOps post URLs with specterops.io blog links; added ADCS-focused references (ADCS Attack Paths series, Certified Pre‑Owned); minor whitespace cleanups.
Traversable / non-traversable edges table
docs/resources/edges/traversable-edges.mdx
Substantially reordered and substituted rows across traversable and non-traversable AD edge tables (row/column swaps and new entries); edits confined to table content.
General edge references & formatting
docs/resources/edges/{add-allowed-to-act,add-key-credential-link,add-member,add-self,all-extended-rights,allowed-to-act,allowed-to-delegate,can-rdp,dc-sync,dump-smsa-password,enroll-on-behalf-of,force-change-password,generic-all,generic-write,read-laps-password,spoof-sid-history,sync-laps-password,write-account-restrictions,write-dacl,write-owner,write-spn}.mdx
Added or replaced SpecterOps/BloodHound references; converted some inline links to bulleted Reference lists; minor URL updates.
Azure edge docs
docs/resources/edges/az-*.mdx (e.g., az-{add-owner,aks-contributor,automation-contributor,execute-command,get-certificates,get-keys,get-secrets,key-vault-contributor,logic-app-contributor,managed-identity,mg-*,node-resource-group,vm-admin-login,website-contributor,az-role-approver,az-role-eligible,az-node-resource-group}).
Added/updated Azure-related SpecterOps BloodHound 4.2/4.3 reference links; minor reference list edits.
Trust & delegation edges
docs/resources/edges/{abuse-tgt-delegation,claim-special-identity,cross-forest-trust,same-forest-trust}.mdx
Replaced old posts.specterops.io links with specterops.io blog URLs and added new trust article references (e.g., "Good Fences Make Good Neighbors").
Synced / synced-to docs
docs/resources/edges/{synced-to-ad-user,synced-to-entra-user}.mdx
Reformatted References from inline hyperlinks to bulleted lists and appended SpecterOps blog entries.
Azure node docs
docs/resources/nodes/az-{automation-account,container-registry,function-app,logic-app,managed-cluster,vm-scale-set,web-app}.mdx
Appended new "References" subsections linking to SpecterOps BloodHound 4.3 posts.
Release notes & get-started / training
docs/resources/release-notes/*.mdx, docs/get-started/security-boundaries/tier-zero-members.mdx, docs/resources/community-support/training-resources.mdx
Updated multiple blog/post URLs to specterops.io blog paths; aligned ADCS and tier-zero reference targets.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • StephenHinck

Poem

🐰
I hopped through docs in tidy bounds,
swapped links and nudged a few new rounds,
ADCS trails and Azure cheer,
tables moved and refs appear—
a rabbit’s hop, docs bright and sound!

Pre-merge checks

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title directly and specifically describes the main change: updating edge reference pages to cross-reference blog posts, which aligns with the extensive documentation updates across 70+ files for adding SpecterOps blog post references.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

📜 Recent review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6f49f2e and f8891cf.

📒 Files selected for processing (1)
  • docs/resources/release-notes/v7-6-0.mdx
🔇 Additional comments (1)
docs/resources/release-notes/v7-6-0.mdx (1)

60-62: Helpful historical context for readers.

The Note block appropriately warns readers that these edge upgrades were reverted in a later version. The placement after the ContainsIdentity bullet is correct. The linked release notes file exists and the internal link is valid.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/resources/edges/az-get-secrets.mdx (1)

18-18: Fix typo in section header.

The section header has a typo: "psec" should be "Opsec".

🔎 Proposed fix
-## psec Considerations
+## Opsec Considerations
🧹 Nitpick comments (3)
docs/resources/nodes/az-container-registry.mdx (1)

25-27: Consider using bullet list format for consistency.

The References section uses a plain markdown link, while most other reference sections in this codebase use bullet list format. Consider reformatting for consistency with other documentation files.

🔎 Suggested formatting
 ## References
 
-[Introducing BloodHound 4.3: Get Global Admin More Often](https://specterops.io/blog/2023/04/18/introducing-bloodhound-4-3-get-global-admin-more-often/)
+* [Introducing BloodHound 4.3: Get Global Admin More Often](https://specterops.io/blog/2023/04/18/introducing-bloodhound-4-3-get-global-admin-more-often/)
docs/resources/nodes/az-managed-cluster.mdx (1)

25-27: Consider using bullet list format for consistency.

The References section uses a plain markdown link instead of the bullet list format commonly used in other reference sections. Consider reformatting for consistency.

🔎 Suggested formatting
 ## References
 
-[Introducing BloodHound 4.3: Get Global Admin More Often](https://specterops.io/blog/2023/04/18/introducing-bloodhound-4-3-get-global-admin-more-often/)
+* [Introducing BloodHound 4.3: Get Global Admin More Often](https://specterops.io/blog/2023/04/18/introducing-bloodhound-4-3-get-global-admin-more-often/)
docs/resources/nodes/aiaca.mdx (1)

62-62: Good addition; consider normalizing link format across docs.

The ADCS reference is relevant and appropriate. The link format (bare URL) is consistent with this file's existing references, though other files in this PR use descriptive text format like [Title](url).

As noted in the PR objectives, normalizing link text formatting across all reference sections could be a future improvement.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3dce7e4 and 2dd39f5.

📒 Files selected for processing (76)
  • docs/resources/edges/abuse-tgt-delegation.mdx
  • docs/resources/edges/adcs-esc1.mdx
  • docs/resources/edges/adcs-esc10a.mdx
  • docs/resources/edges/adcs-esc10b.mdx
  • docs/resources/edges/adcs-esc13.mdx
  • docs/resources/edges/adcs-esc3.mdx
  • docs/resources/edges/adcs-esc4.mdx
  • docs/resources/edges/adcs-esc6a.mdx
  • docs/resources/edges/adcs-esc6b.mdx
  • docs/resources/edges/adcs-esc9a.mdx
  • docs/resources/edges/adcs-esc9b.mdx
  • docs/resources/edges/add-allowed-to-act.mdx
  • docs/resources/edges/add-key-credential-link.mdx
  • docs/resources/edges/add-member.mdx
  • docs/resources/edges/add-self.mdx
  • docs/resources/edges/all-extended-rights.mdx
  • docs/resources/edges/allowed-to-act.mdx
  • docs/resources/edges/allowed-to-delegate.mdx
  • docs/resources/edges/az-add-owner.mdx
  • docs/resources/edges/az-aks-contributor.mdx
  • docs/resources/edges/az-automation-contributor.mdx
  • docs/resources/edges/az-execute-command.mdx
  • docs/resources/edges/az-get-certificates.mdx
  • docs/resources/edges/az-get-keys.mdx
  • docs/resources/edges/az-get-secrets.mdx
  • docs/resources/edges/az-key-vault-contributor.mdx
  • docs/resources/edges/az-logic-app-contributor.mdx
  • docs/resources/edges/az-managed-identity.mdx
  • docs/resources/edges/az-mg-add-member.mdx
  • docs/resources/edges/az-mg-add-owner.mdx
  • docs/resources/edges/az-mg-add-secret.mdx
  • docs/resources/edges/az-mg-app-role-assignment-readwrite-all.mdx
  • docs/resources/edges/az-mg-application-readwrite-all.mdx
  • docs/resources/edges/az-mg-directory-readwrite-all.mdx
  • docs/resources/edges/az-mg-grant-app-roles.mdx
  • docs/resources/edges/az-mg-grant-role.mdx
  • docs/resources/edges/az-mg-group-member-readwrite-all.mdx
  • docs/resources/edges/az-mg-group-readwrite-all.mdx
  • docs/resources/edges/az-mg-role-management-readwrite-directory.mdx
  • docs/resources/edges/az-mg-service-principal-endpoint-readwrite-all.mdx
  • docs/resources/edges/az-node-resource-group.mdx
  • docs/resources/edges/az-owns.mdx
  • docs/resources/edges/az-role-approver.mdx
  • docs/resources/edges/az-role-eligible.mdx
  • docs/resources/edges/az-vm-admin-login.mdx
  • docs/resources/edges/az-website-contributor.mdx
  • docs/resources/edges/can-rdp.mdx
  • docs/resources/edges/claim-special-identity.mdx
  • docs/resources/edges/cross-forest-trust.mdx
  • docs/resources/edges/dc-sync.mdx
  • docs/resources/edges/dump-smsa-password.mdx
  • docs/resources/edges/enroll-on-behalf-of.mdx
  • docs/resources/edges/force-change-password.mdx
  • docs/resources/edges/generic-all.mdx
  • docs/resources/edges/generic-write.mdx
  • docs/resources/edges/read-laps-password.mdx
  • docs/resources/edges/same-forest-trust.mdx
  • docs/resources/edges/spoof-sid-history.mdx
  • docs/resources/edges/sync-laps-password.mdx
  • docs/resources/edges/synced-to-ad-user.mdx
  • docs/resources/edges/synced-to-entra-user.mdx
  • docs/resources/edges/traversable-edges.mdx
  • docs/resources/edges/write-account-restrictions.mdx
  • docs/resources/edges/write-dacl.mdx
  • docs/resources/edges/write-owner.mdx
  • docs/resources/edges/write-spn.mdx
  • docs/resources/nodes/aiaca.mdx
  • docs/resources/nodes/az-automation-account.mdx
  • docs/resources/nodes/az-container-registry.mdx
  • docs/resources/nodes/az-function-app.mdx
  • docs/resources/nodes/az-logic-app.mdx
  • docs/resources/nodes/az-managed-cluster.mdx
  • docs/resources/nodes/az-vm-scale-set.mdx
  • docs/resources/nodes/az-web-app.mdx
  • docs/resources/nodes/nt-auth-store.mdx
  • docs/resources/nodes/root-ca.mdx
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: jeff-matthews
Repo: SpecterOps/bloodhound-docs PR: 89
File: docs/resources/edges/az-role-approver.mdx:14-14
Timestamp: 2025-10-27T15:00:33.251Z
Learning: In the bloodhound-docs repository, documentation content derived from HelpTexts in the code should not be editorially changed unless there's an egregious error. Minor stylistic improvements should be submitted as PRs to the source code instead of being made directly in the documentation.
Learnt from: StephenHinck
Repo: SpecterOps/bloodhound-docs PR: 67
File: docs/collect-data/enterprise-collection/privileged-collection.mdx:7-7
Timestamp: 2025-10-02T18:01:39.059Z
Learning: In the BloodHound documentation repository, "BloodHound" as a standalone name refers to the entire product family and is appropriate to use when content applies to all products in the family (Enterprise and Community Edition). "BloodHound Enterprise" should be used only when referring specifically to Enterprise-only features or capabilities.
📚 Learning: 2025-09-09T08:34:05.904Z
Learnt from: JonasBK
Repo: SpecterOps/bloodhound-docs PR: 58
File: docs/collect-data/permissions.mdx:0-0
Timestamp: 2025-09-09T08:34:05.904Z
Learning: In the SpecterOps BloodHound documentation system (MDX), double backslashes (\\) in registry paths are required as they render as single backslashes (\) in the final output. Do not suggest removing double backslashes from registry path formatting.

Applied to files:

  • docs/resources/edges/can-rdp.mdx
  • docs/resources/edges/all-extended-rights.mdx
  • docs/resources/edges/adcs-esc6a.mdx
  • docs/resources/edges/az-node-resource-group.mdx
  • docs/resources/edges/dc-sync.mdx
  • docs/resources/edges/adcs-esc6b.mdx
  • docs/resources/edges/az-aks-contributor.mdx
  • docs/resources/edges/force-change-password.mdx
  • docs/resources/edges/az-execute-command.mdx
  • docs/resources/edges/az-vm-admin-login.mdx
  • docs/resources/edges/enroll-on-behalf-of.mdx
  • docs/resources/edges/write-account-restrictions.mdx
  • docs/resources/edges/adcs-esc1.mdx
  • docs/resources/edges/write-owner.mdx
📚 Learning: 2025-10-02T18:01:39.059Z
Learnt from: StephenHinck
Repo: SpecterOps/bloodhound-docs PR: 67
File: docs/collect-data/enterprise-collection/privileged-collection.mdx:7-7
Timestamp: 2025-10-02T18:01:39.059Z
Learning: In the BloodHound documentation repository, "BloodHound" as a standalone name refers to the entire product family and is appropriate to use when content applies to all products in the family (Enterprise and Community Edition). "BloodHound Enterprise" should be used only when referring specifically to Enterprise-only features or capabilities.

Applied to files:

  • docs/resources/edges/write-spn.mdx
  • docs/resources/edges/az-execute-command.mdx
  • docs/resources/edges/az-logic-app-contributor.mdx
📚 Learning: 2025-08-08T15:57:55.743Z
Learnt from: StephenHinck
Repo: SpecterOps/bloodhound-docs PR: 42
File: docs/install-data-collector/install-azurehound/system-requirements.mdx:70-73
Timestamp: 2025-08-08T15:57:55.743Z
Learning: For AzureHound docs (docs/install-data-collector/install-azurehound/system-requirements.mdx), prefer explicitly stating:
- Directory Reader must be permanently active (not PIM-eligible only).
- Microsoft Graph application permissions (Directory.Read.All, RoleManagement.Read.All) require admin consent.
- Azure Reader role phrasing: “on all Azure subscriptions, ideally assigned at the tenant root group (root management group) scope.”

Applied to files:

  • docs/resources/nodes/az-logic-app.mdx
  • docs/resources/edges/az-mg-app-role-assignment-readwrite-all.mdx
  • docs/resources/edges/az-mg-service-principal-endpoint-readwrite-all.mdx
  • docs/resources/edges/az-mg-application-readwrite-all.mdx
  • docs/resources/edges/az-mg-role-management-readwrite-directory.mdx
  • docs/resources/edges/az-role-eligible.mdx
  • docs/resources/edges/write-account-restrictions.mdx
  • docs/resources/edges/az-role-approver.mdx
🔇 Additional comments (73)
docs/resources/edges/az-aks-contributor.mdx (1)

49-49: Verify the blog post link is relevant to AZAKSContributor.

The new reference is correctly formatted, but the blog post title ("introducing-bloodhound-4-3-get-global-admin-more-often") focuses on Global Admin rather than AKS Contributor role specifics. Please confirm this blog post covers AKS Contributor abuse or attack paths, or if a different SpecterOps post would be more directly relevant.

Per the PR notes, legacy blog links redirecting to the home page will be cleaned before merge—verify this link resolves correctly.

docs/resources/edges/allowed-to-delegate.mdx (1)

41-41: LGTM!

The reference addition is consistent with the existing format and appropriately documents the BloodHound 2.0 blog post as a relevant resource for this edge type.

docs/resources/edges/can-rdp.mdx (1)

74-74: Reference addition is correct and properly formatted.

The new BloodHound 2.0 blog reference follows the consistent markdown link format of existing references and resolves successfully without redirects.

docs/resources/edges/generic-write.mdx (1)

75-78: Links are valid; formatting properly structured.

The References section correctly uses a bulleted list format. Both the YouTube link and the 2017 blog post are accessible and functional, with no redirect issues. The suggestion to improve link text with descriptive titles (instead of raw URLs) is noted as future work in the PR objectives and can be addressed then.

docs/resources/edges/claim-special-identity.mdx (1)

61-61: Blog post URL is valid and accessible.

The SpecterOps blog post URL at line 61 resolves correctly (HTTP 200) with no redirects to the blog home page. No changes needed.

docs/resources/edges/synced-to-entra-user.mdx (1)

26-29: The changes look good.

All references are properly formatted and the SpecterOps blog post URL is accessible and functional. No issues found.

docs/resources/edges/az-role-eligible.mdx (1)

18-18: Link is valid; consider specificity of reference.

The blog post exists and mentions PIM roles support in BloodHound v8, but it's a general product announcement rather than documentation specific to the AZRoleEligible edge. Given the PR objectives note that "some edges/nodes had no matching posts," this is acceptable as a broader contextual reference.

Minor observation: The new reference uses markdown link format [title](url) while existing references (lines 19-24) use plain URLs. The PR objectives acknowledge this as a future consideration for normalization across the References sections.

docs/resources/edges/same-forest-trust.mdx (1)

135-135: Reference addition looks good.

The same blog post reference is appropriately added here, maintaining consistency with the cross-forest-trust.mdx file. The URL verification requested in the cross-forest-trust.mdx review applies to this reference as well.

docs/resources/edges/cross-forest-trust.mdx (1)

29-29: The blog post URL is valid and accessible with no redirects.

docs/resources/edges/dump-smsa-password.mdx (1)

74-74: The SpecterOps blog post at this URL is valid and directly relevant—it announces and discusses the DumpSMSAPassword edge as a new feature in BloodHound 4.3.1. No concerns with this reference.

docs/resources/edges/traversable-edges.mdx (1)

87-95: Non-traversable AD edge restructuring is complete and correctly documented.

All new edge types listed in the table have been added to BloodHound and are correctly classified as non-traversable:

  • ADCS edges: DelegatedEnrollmentAgent, Enroll, EnrollOnBehalfOf, EnterpriseCAFor, ExtendedByPolicy, NTAuthStoreFor, TrustedForNTAuth
  • PKI certificate-related: WritePKIEnrollmentFlag, WritePKINameFlag
  • "Raw" suffix edges: OwnsRaw, WriteOwnerRaw
  • Infrastructure edges: LocalToComputer, HostsCAService, IssuedSignedBy
  • AdminSDHolder protection: ProtectAdminGroups

Each edge has corresponding documentation and is properly listed in the non-traversable edges table. This restructuring includes features from BloodHound v8.3.0 and later releases.

docs/resources/edges/spoof-sid-history.mdx (1)

89-89: LGTM - Relevant cross-reference for AD trusts content.

The blog post about AD trusts attack paths is directly relevant to this SpoofSIDHistory edge. Note that this reference uses the blog post title as link text, whereas other files in this PR use the URL as link text (e.g., [https://specterops.io/...](https://specterops.io/...)). The PR objectives mention normalizing link text as future work, so this is fine for now.

docs/resources/edges/az-get-certificates.mdx (1)

26-26: LGTM!

The BloodHound 4.2 Azure refactor reference is relevant for this Azure Key Vault edge.

docs/resources/edges/az-automation-contributor.mdx (1)

53-53: LGTM!

The BloodHound 4.3 reference complements the existing automation accounts reference and provides additional context for this Azure edge.

docs/resources/edges/az-logic-app-contributor.mdx (1)

21-21: LGTM!

The BloodHound 4.3 reference is appropriate for this Azure Logic App edge.

docs/resources/edges/az-website-contributor.mdx (1)

58-58: LGTM!

The BloodHound 4.3 reference is relevant for this Azure Web/Function App edge.

docs/resources/edges/force-change-password.mdx (1)

57-57: LGTM!

The BloodHound 1.3 ACL Attack Path Update reference is directly relevant to this ACL-based ForceChangePassword edge.

docs/resources/edges/dc-sync.mdx (1)

31-31: Verify relevance of Azure refactor reference for DCSync edge.

DCSync is an on-premises Active Directory attack technique (replicating domain objects via GetChanges/GetChangesAll). The BloodHound 4.2 Azure refactor blog post may not be the most relevant reference here unless it specifically covers DCSync in a hybrid context. Please verify this blog post discusses DCSync or consider a more targeted reference.

docs/resources/edges/all-extended-rights.mdx (1)

59-59: LGTM!

The BloodHound 1.3 ACL Attack Path Update reference is appropriate for this AllExtendedRights edge, which covers ACL-based attack capabilities.

docs/resources/edges/az-key-vault-contributor.mdx (1)

27-27: LGTM!

The reference link addition is properly formatted and consistent with the existing references.

docs/resources/edges/az-get-secrets.mdx (1)

26-26: LGTM!

The reference link addition is properly formatted and consistent with the existing references.

docs/resources/edges/az-managed-identity.mdx (1)

35-35: LGTM!

The reference link addition is properly formatted and consistent with the existing references.

docs/resources/edges/add-self.mdx (1)

59-59: LGTM!

The reference link addition is properly formatted and consistent with the existing references.

docs/resources/edges/az-execute-command.mdx (1)

44-44: LGTM!

The reference link addition is properly formatted and consistent with the existing references.

docs/resources/nodes/az-automation-account.mdx (1)

26-28: LGTM!

The References section addition is properly formatted. Note that this uses inline link format with descriptive text rather than the markdown list format used in edge documentation files, which may be the intended style for node documentation.

docs/resources/edges/write-owner.mdx (1)

48-48: The 2017 blog post URL is valid and accessible.

The reference link is confirmed to be working correctly without redirecting to the blog home.

docs/resources/edges/read-laps-password.mdx (1)

56-56: Link is valid and accessible. The 2018 blog post URL resolves correctly without redirecting to the blog home.

docs/resources/edges/write-spn.mdx (1)

47-47: LGTM! Good addition of relevant reference.

The BloodHound 4.1 reference enhances the documentation context appropriately.

docs/resources/edges/az-get-keys.mdx (1)

26-26: LGTM! Relevant Azure reference added.

The BloodHound 4.2 Azure refactor reference is particularly appropriate for this Azure-related edge.

docs/resources/edges/az-mg-service-principal-endpoint-readwrite-all.mdx (1)

19-19: LGTM! Appropriate reference addition.

The BloodHound 4.3 reference provides useful context for this edge.

docs/resources/edges/add-allowed-to-act.mdx (1)

32-32: LGTM! Good historical reference.

The BloodHound 2.1 reference appropriately documents the feature history.

docs/resources/edges/generic-all.mdx (1)

148-148: LGTM! Highly relevant ACL reference.

The BloodHound 1.3 ACL attack path reference is particularly relevant for this GenericAll edge documentation.

docs/resources/edges/allowed-to-act.mdx (1)

68-68: LGTM! Consistent reference addition.

The BloodHound 2.1 reference is appropriately added, consistent with related edge documentation.

docs/resources/edges/az-mg-application-readwrite-all.mdx (1)

21-21: LGTM! Appropriate Azure reference.

The BloodHound 4.3 reference provides useful context for this Microsoft Graph permission edge.

docs/resources/edges/az-mg-add-secret.mdx (1)

68-68: LGTM! Well-chosen reference for Azure privilege escalation.

The BloodHound 4.3 reference is particularly relevant for this Azure privilege escalation edge. The PR objectives note that legacy blog links will be cleaned up before merging, which is good practice.

docs/resources/nodes/nt-auth-store.mdx (1)

61-61: LGTM!

The reference addition is topically appropriate for NTAuthStore (ADCS-related) and follows the existing bullet list format consistently.

docs/resources/edges/sync-laps-password.mdx (1)

32-32: LGTM!

The reference addition follows the existing bullet list format and is topically relevant to the sync functionality.

docs/resources/edges/synced-to-ad-user.mdx (1)

27-28: LGTM!

The update converts the existing reference to bullet list format and adds a relevant reference about hybrid attack paths. This improves consistency with other documentation files.

docs/resources/edges/az-add-owner.mdx (1)

53-53: LGTM!

The reference addition follows the existing bullet list format and is relevant to the Azure functionality described in this edge documentation.

docs/resources/edges/adcs-esc3.mdx (1)

89-91: LGTM!

The reference updates are appropriate for ADCS ESC3 content and maintain consistent bullet list formatting. The additions provide relevant technical resources for this attack path.

docs/resources/edges/abuse-tgt-delegation.mdx (1)

134-134: URL is valid and working correctly.

The link at line 134 resolves without redirects (HTTP 200). No action needed.

docs/resources/edges/az-role-approver.mdx (1)

17-18: LGTM!

The BloodHound v8 reference is a valuable addition for users working with PIM role approvers. The most recent blog post is unlikely to have migration issues.

docs/resources/edges/az-owns.mdx (1)

18-22: LGTM!

The Azure refactor reference is highly relevant for the AZOwns edge documentation and provides valuable context.

docs/resources/edges/add-member.mdx (1)

57-57: Verify this legacy blog link.

Same 2017 blog post URL as in write-dacl.mdx. Ensure this URL is accessible and not affected by blog migration issues before merging.

docs/resources/edges/az-mg-group-readwrite-all.mdx (1)

21-21: LGTM!

The BloodHound 4.3 reference appropriately supplements the Microsoft Graph permissions documentation.

docs/resources/edges/az-mg-grant-role.mdx (1)

44-44: LGTM!

The reference enhances the documentation for privilege escalation via service principal role grants.

docs/resources/edges/az-vm-admin-login.mdx (1)

26-26: LGTM!

The Azure refactor reference provides useful context for the VM admin login edge.

docs/resources/edges/write-dacl.mdx (1)

85-85: The 2017 SpectreOps blog link is working correctly and resolves without redirecting to the blog home. No action needed.

docs/resources/nodes/az-function-app.mdx (1)

24-26: Good addition of cross-reference.

The References section is part of a systematic effort to add blog post cross-references to node documentation. The URL is accessible (HTTP 200) and the same reference is consistently applied across related Azure node documentation files (az-automation-account.mdx, az-container-registry.mdx, and others).

docs/resources/edges/adcs-esc4.mdx (1)

649-649: LGTM! Relevant cross-reference added.

The BloodHound ADCS Integration reference is a valuable addition to this edge's documentation. The descriptive link format enhances readability.

docs/resources/nodes/root-ca.mdx (1)

65-65: LGTM! Relevant ADCS reference added.

The ADCS Attack Paths blog post reference is appropriate for this RootCA node documentation.

docs/resources/edges/az-mg-group-member-readwrite-all.mdx (1)

20-20: LGTM! Relevant BloodHound 4.3 reference added.

The cross-reference to the BloodHound 4.3 blog post is appropriate for this Azure edge documentation.

docs/resources/edges/write-account-restrictions.mdx (1)

34-34: LGTM! Relevant BloodHound 4.2 reference added.

The cross-reference to the BloodHound 4.2 blog post appropriately enhances this edge's documentation.

docs/resources/edges/az-mg-app-role-assignment-readwrite-all.mdx (1)

21-21: LGTM! Relevant BloodHound 4.3 reference added.

The cross-reference is appropriate for this Azure edge documentation.

docs/resources/edges/az-mg-add-member.mdx (1)

49-49: LGTM! Relevant BloodHound 4.3 reference added.

The cross-reference appropriately enhances this Azure edge documentation.

docs/resources/edges/adcs-esc6b.mdx (1)

79-79: LGTM! Relevant ADCS Part 3 reference added.

The ADCS Attack Paths Part 3 reference is valuable for this edge's documentation. The descriptive link format enhances readability.

docs/resources/edges/az-mg-role-management-readwrite-directory.mdx (1)

23-23: LGTM! Relevant BloodHound 4.3 reference added.

The cross-reference appropriately enhances this Azure edge documentation.

docs/resources/nodes/az-vm-scale-set.mdx (1)

24-26: LGTM! Valuable reference addition.

The References section appropriately links to relevant SpecterOps blog content that provides additional context for the AZVMScaleSet node type. The formatting and structure are consistent with the documentation standards.

docs/resources/edges/adcs-esc10b.mdx (1)

205-205: LGTM! Relevant ADCS reference.

The Part 3 ADCS Attack Paths reference is highly relevant for the ESC10b edge documentation and is appropriately placed in the Abuse and Opsec references section.

docs/resources/edges/adcs-esc10a.mdx (1)

199-199: LGTM! Consistent ADCS documentation enhancement.

The Part 3 reference appropriately complements the ESC10a edge documentation, maintaining consistency with related ADCS edge documentation updates in this PR.

docs/resources/edges/az-mg-directory-readwrite-all.mdx (1)

21-21: LGTM! Appropriate Azure reference.

The BloodHound 4.3 blog reference enhances the documentation for this Azure Microsoft Graph permission edge, consistent with the broader PR goal of adding relevant cross-references.

docs/resources/edges/az-mg-grant-app-roles.mdx (1)

65-65: LGTM! Valuable Azure documentation reference.

The addition appropriately enhances the AZMGGrantAppRoles edge documentation with relevant context about Azure privilege escalation patterns covered in BloodHound 4.3.

docs/resources/edges/enroll-on-behalf-of.mdx (1)

32-32: LGTM! Contextually appropriate ADCS reference.

The Part 2 ADCS Attack Paths reference is appropriately chosen for the EnrollOnBehalfOf edge, as this relationship is specifically covered in that blog post series installment.

docs/resources/edges/adcs-esc6a.mdx (1)

89-89: LGTM! Relevant ADCS documentation enhancement.

The Part 3 reference appropriately augments the ESC6a edge documentation, maintaining consistency with the broader ADCS documentation improvements in this PR.

docs/resources/nodes/az-web-app.mdx (1)

24-26: LGTM! Consistent Azure node documentation enhancement.

The References section addition appropriately provides relevant context for the AZWebApp node type. Per the PR objectives, ensure the URL is verified as non-redirecting before merge (author has already noted this cleanup task).

docs/resources/nodes/az-logic-app.mdx (1)

24-26: LGTM! Valuable reference addition.

The References section appropriately adds context about the AZLogicApp node with a relevant SpecterOps blog post. The link formatting with descriptive text is clear and user-friendly.

docs/resources/edges/az-node-resource-group.mdx (1)

22-22: LGTM!

The reference addition is relevant for understanding Azure Kubernetes Service managed cluster relationships. The link format is consistent with the existing references in this file.

docs/resources/edges/adcs-esc13.mdx (1)

66-70: LGTM! Appropriate reference updates.

The URL migration from the old posts.specterops.io domain to specterops.io/blog and the addition of the BloodHound ADCS Integration reference are both appropriate for this edge. The descriptive link text format is clear and user-friendly.

docs/resources/edges/az-mg-add-owner.mdx (1)

73-73: LGTM!

The BloodHound 4.3 reference is relevant for understanding Azure privilege escalation via owner addition. The formatting is consistent with existing references in this file.

docs/resources/edges/adcs-esc1.mdx (1)

71-72: LGTM! Excellent reference additions.

Both references are highly relevant to the ADCS ESC1 attack path and provide valuable context for practitioners. The descriptive link text format makes the references easy to understand at a glance.

docs/resources/edges/adcs-esc9b.mdx (1)

189-190: LGTM! Well-chosen references.

The two references provide comprehensive coverage: the foundational "Certified Pre-Owned" paper and the specific "Part 3" BloodHound implementation details. The descriptive link text format is clear and helpful.

docs/resources/edges/adcs-esc9a.mdx (1)

172-173: LGTM! Consistent and appropriate references.

The reference additions mirror the ESC9b edge appropriately, providing both foundational and specific implementation guidance. The descriptive link format is clear and user-friendly.

docs/resources/edges/add-key-credential-link.mdx (1)

33-35: Both URLs are valid and properly relevant. The Shadow Credentials blog post (line 33) returns a 200 status code and provides direct technical context for the edge. The BloodHound 4.1 release post (line 35) is similarly accessible and directly relevant—it is the official announcement that introduced the AddKeyCredentialLink edge to BloodHound. No legacy blog link redirects or relevance issues detected.

Comment on lines +35 to +47
| ClaimSpecialIdentity | CoerceAndRelayNTLMToADCS | CoerceAndRelayNTLMToLDAP |
| CoerceAndRelayNTLMToLDAPS| CoerceAndRelayNTLMToSMB | CoerceToTGT |
| Contains | CrossForestTrust | DCFor |
| DCSync | DumpSMSAPassword | ExecuteDCOM |
| ForceChangePassword | GenericAll | GenericWrite |
| GoldenCert | HasSIDHistory | HasSession |
| HasTrustKeys | MemberOf | Owns |
| GoldenCert | GPLink | HasSIDHistory |
| HasSession | HasTrustKeys | ManageCA |
| ManageCertificates | MemberOf | Owns |
| OwnsLimitedRights | ReadGMSAPassword | ReadLAPSPassword |
| SameForestTrust | SpoofSIDHistory | SQLAdmin |
| SyncedToEntraUser | SyncLAPSPassword | WriteAccountRestrictions |
| WriteDacl | WriteGPLink | WriteOwner |
| WriteOwnerLimitedRights | WriteSPN | |
| SyncedToADUser | SyncedToEntraUser | SyncLAPSPassword |
| WriteAccountRestrictions| WriteDacl | WriteGPLink |
| WriteOwner | WriteOwnerLimitedRights | WriteSPN |
Copy link
Contributor

@coderabbitai coderabbitai bot Dec 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

# First, let's explore the repo structure to understand what we're working with
git ls-files | grep -E "(edge|schema|enum)" | head -20

Repository: SpecterOps/bloodhound-docs

Length of output: 839


🏁 Script executed:

# Search for edge type definitions and traversability
rg -n "Contains|CrossForestTrust|ClaimSpecialIdentity" --type=go --type=ts --type=rs -C 2 | head -100

Repository: SpecterOps/bloodhound-docs

Length of output: 96


🏁 Script executed:

# Look for schema or enum files that define edges
fd -e "go" -e "ts" -e "rs" | xargs grep -l "EdgeKind\|EdgeType" | head -10

Repository: SpecterOps/bloodhound-docs

Length of output: 52


🏁 Script executed:

# Search for traversable edge definitions
rg -n "traversable.*Contains|Contains.*traversable" -i | head -20

Repository: SpecterOps/bloodhound-docs

Length of output: 649


🏁 Script executed:

# Read the traversable-edges.mdx file to see current state
cat -n docs/resources/edges/traversable-edges.mdx | head -100

Repository: SpecterOps/bloodhound-docs

Length of output: 7207


🏁 Script executed:

# Also check the exact lines in question (35-47)
sed -n '35,47p' docs/resources/edges/traversable-edges.mdx

Repository: SpecterOps/bloodhound-docs

Length of output: 1186


🏁 Script executed:

# Check the release notes context for more details
sed -n '50,70p' docs/resources/release-notes/v7-6-0.mdx

Repository: SpecterOps/bloodhound-docs

Length of output: 4288


Remove Contains from the traversable edges list and add the replacement edges.

Per the v7.6.0 release notes, Contains is no longer traversable and has been replaced by PropagatesACEsTo, GPOAppliesTo, CanApplyGPO, and ContainsIdentity. The current documentation lists Contains as traversable (line 37) and omits all four replacement edges, contradicting the official release notes and creating inaccurate documentation for BloodHound's pathfinding behavior.

🤖 Prompt for AI Agents
In docs/resources/edges/traversable-edges.mdx around lines 35 to 47, remove the
"Contains" entry from the traversable edges table and add the four replacement
edges introduced in v7.6.0: PropagatesACEsTo, GPOAppliesTo, CanApplyGPO, and
ContainsIdentity; update the table rows/columns so the new entries appear in the
same alphabetized/traversable list format (keeping three columns per row) and
ensure no duplicate or leftover "Contains" entry remains.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We must've changed this behavior after v7.6.0 because I don't see the replacement edges in the code.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for the replacement edge types mentioned in v7.6.0
echo "=== Searching for replacement edge types ==="
rg -n "PropagatesACEsTo|GPOAppliesTo|CanApplyGPO|ContainsIdentity" -i

echo -e "\n=== Searching for Contains edge references ==="
rg -n "Contains" --type=mdx -g "docs/resources/edges/*" | head -30

echo -e "\n=== Check v7.6.0 release notes ==="
if [ -f "docs/resources/release-notes/v7-6-0.mdx" ]; then
  cat docs/resources/release-notes/v7-6-0.mdx
else
  echo "v7.6.0 release notes file not found"
  fd -e mdx "release" docs/
fi

Length of output: 11046


@jeff-matthews, thank you for the clarification! The search results confirm your observation:

The four replacement edges (PropagatesACEsTo, GPOAppliesTo, CanApplyGPO, ContainsIdentity) appear only in the v7.6.0 release notes and nowhere else in the documentation or codebase. This means the v7.6.0 change that made Contains non-traversable was indeed reverted in a subsequent release.

Your PR correctly reflects the current behavior by including Contains in the traversable edges list. CodeRabbit's suggestion was based on the v7.6.0 release notes, which no longer reflect the actual behavior of BloodHound.

Should the v7.6.0 release notes be updated to include a note that this change was reverted in a later version? This would help prevent future confusion about the historical state of the Contains edge.


🧠 Learnings used
Learnt from: JonasBK
Repo: SpecterOps/bloodhound-docs PR: 58
File: docs/collect-data/permissions.mdx:0-0
Timestamp: 2025-09-09T08:34:05.904Z
Learning: In the SpecterOps BloodHound documentation system (MDX), double backslashes (\\) in registry paths are required as they render as single backslashes (\) in the final output. Do not suggest removing double backslashes from registry path formatting.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, my preferred approach is to first ensure that the change was documented in the release that it was introduced. Adding a cross reference to the release notes describing that change from the v7.6.0 release notes is a nice-to-have.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Find all release note files and sort them
echo "=== All release notes files (sorted) ==="
fd -e mdx "v.*\.mdx" docs/resources/release-notes/ | sort -V

echo -e "\n=== Searching for Contains edge mentions in release notes after v7.6.0 ==="
# List release notes that might be after v7.6.0
for file in $(fd -e mdx "v-[7-9]-" docs/resources/release-notes/ | sort -V); do
  if grep -q "Contains" "$file" 2>/dev/null; then
    echo "Found in: $file"
    echo "---"
    grep -n -C 3 "Contains" "$file"
    echo "==="
  fi
done

echo -e "\n=== Check if there are any v7.7+ or v8+ release notes ==="
fd -e mdx . docs/resources/release-notes/ | grep -E "v-[7-9]-[7-9]|v-[8-9]-"

Length of output: 2048


🏁 Script executed:

#!/bin/bash
# Check v8.x releases for any edge-related changes or Contains mentions
echo "=== Checking v8.0.0 release notes ==="
if [ -f "docs/resources/release-notes/v8-0-0.mdx" ]; then
  cat docs/resources/release-notes/v8-0-0.mdx
fi

echo -e "\n\n=== Checking v8.1.0 for edge mentions ==="
if [ -f "docs/resources/release-notes/v8-1-0.mdx" ]; then
  grep -i "edge\|contains\|propagates\|gpo" docs/resources/release-notes/v8-1-0.mdx || echo "No relevant mentions found"
fi

echo -e "\n=== Checking v8.2.0 for edge mentions ==="
if [ -f "docs/resources/release-notes/v8-2-0.mdx" ]; then
  grep -i "edge\|contains\|propagates\|gpo" docs/resources/release-notes/v8-2-0.mdx || echo "No relevant mentions found"
fi

echo -e "\n=== Searching all v8.x releases for the replacement edge names ==="
rg -n "PropagatesACEsTo|GPOAppliesTo|CanApplyGPO|ContainsIdentity" docs/resources/release-notes/v8-*.mdx || echo "Not found in v8.x releases"

echo -e "\n=== Check if Contains is mentioned in any v7.7+ or v8+ releases ==="
rg -n -i "contains.*edge|edge.*contains" docs/resources/release-notes/v7-[7-9]*.mdx docs/resources/release-notes/v8-*.mdx || echo "No Contains edge mentions found"

Length of output: 15631


@jeff-matthews, excellent news! The reversion is properly documented in the v8.0.0 release notes:

v8.0.0 Bug Fixes section:

"Reverted the changes to Contains edges from v7.6.0 due to performance issues."

This statement appears in both the summary and detailed bug fixes sections of the v8.0.0 release notes, clearly documenting when and why the change was reverted.

Would you like to proceed with the nice-to-have step? I can help add a cross-reference note to the v7.6.0 release notes pointing readers to v8.0.0, which would help anyone reviewing the historical release notes understand that the Contains edge changes described in v7.6.0 were later reverted. This would look something like:

Note: The changes to Contains edges described in this release were reverted in v8.0.0 due to performance issues.

Let me know if you'd like me to help with that addition!


🧠 Learnings used
Learnt from: JonasBK
Repo: SpecterOps/bloodhound-docs PR: 58
File: docs/collect-data/permissions.mdx:0-0
Timestamp: 2025-09-09T08:34:05.904Z
Learning: In the SpecterOps BloodHound documentation system (MDX), double backslashes (\\) in registry paths are required as they render as single backslashes (\) in the final output. Do not suggest removing double backslashes from registry path formatting.

Copy link
Contributor Author

@jeff-matthews jeff-matthews Dec 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that would be really helpful!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Fetch the v7.6.0 release notes to find where to add the cross-reference note
echo "=== Reading v7.6.0 release notes ==="
cat docs/resources/release-notes/v7-6-0.mdx

echo -e "\n\n=== Finding the Contains edge mention with line numbers ==="
grep -n "Contains" docs/resources/release-notes/v7-6-0.mdx

Length of output: 9439


@jeff-matthews, great! Here's where to add the cross-reference note in the v7.6.0 release notes:

Location: In docs/resources/release-notes/v7-6-0.mdx, add the note immediately after line 59 (after the ContainsIdentity bullet point).

Suggested addition:

- **Upgrades for the Contains edge** - The `Contains` edge has had a challenging past. It provides necessary structural information for the structure of the AD graph, however it has always left the critical, "can I exploit this path" unanswered explicitly. With this release, `Contains` is no longer a traversable edge, and it will no longer appear in pathfinding. In its place, we're introducing several edges to answer that question and to replace the previous logic utilized within Privilege Zone Management for tagging OUs and GPOs:
  - `PropagatesACEsTo`: From parent object to direct child if child inherits ACEs from parent
  - `GPOAppliesTo`: From GPO to the users/computers it applies to
  - `CanApplyGPO`: From principals to target users/computers where the principals can link GPOs such that the GPOs apply on the targets
  - `ContainsIdentity`: From Domain to all users and computers

  > **Note:** The changes to `Contains` edges described above were reverted in [v8.0.0](/resources/release-notes/v8-0-0) due to performance issues. The `Contains` edge is once again traversable in v8.0.0 and later versions.

This adds a clearly visible blockquote note that:

  • Informs readers the changes were reverted
  • Links directly to the v8.0.0 release notes for more context
  • Explains the reason (performance issues)
  • Clarifies the current state (Contains is traversable again in v8.0.0+)

This should help prevent confusion for anyone reading through the historical release notes! 🎯

🐰

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't like the coderabbit addition - first it states

With this release, Contains is no longer a traversable edge

and then

changes to Contains edges described above were reverted

The article is not a release history - it should document the current behaviour.

I also recommend making all edges in the traversable and non-traversable tables links to the individual edge articles.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2dd39f5 and 6f49f2e.

📒 Files selected for processing (22)
  • docs/get-started/security-boundaries/tier-zero-members.mdx
  • docs/resources/community-support/training-resources.mdx
  • docs/resources/edges/az-automation-contributor.mdx
  • docs/resources/edges/az-managed-identity.mdx
  • docs/resources/edges/az-website-contributor.mdx
  • docs/resources/edges/coerce-and-relay-ntlm-to-adcs.mdx
  • docs/resources/edges/coerce-and-relay-ntlm-to-ldap.mdx
  • docs/resources/edges/coerce-and-relay-ntlm-to-ldaps.mdx
  • docs/resources/edges/coerce-and-relay-ntlm-to-smb.mdx
  • docs/resources/edges/coerce-to-tgt.mdx
  • docs/resources/edges/extended-by-policy.mdx
  • docs/resources/edges/generic-all.mdx
  • docs/resources/edges/oid-group-link.mdx
  • docs/resources/edges/same-forest-trust.mdx
  • docs/resources/nodes/cert-template.mdx
  • docs/resources/nodes/issuance-policy.mdx
  • docs/resources/release-notes/2022-10-11.mdx
  • docs/resources/release-notes/2022-10-24.mdx
  • docs/resources/release-notes/2023-08-08.mdx
  • docs/resources/release-notes/2024-03-27-v5-8-0.mdx
  • docs/resources/release-notes/2024-05-09-v5-9-0.mdx
  • docs/resources/release-notes/v8-3-0.mdx
✅ Files skipped from review due to trivial changes (5)
  • docs/resources/edges/az-automation-contributor.mdx
  • docs/resources/release-notes/v8-3-0.mdx
  • docs/resources/release-notes/2023-08-08.mdx
  • docs/resources/edges/generic-all.mdx
  • docs/resources/edges/coerce-and-relay-ntlm-to-smb.mdx
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-08-22T22:40:24.105Z
Learnt from: StephenHinck
Repo: SpecterOps/bloodhound-docs PR: 53
File: docs/analyze-data/posture-page.mdx:33-41
Timestamp: 2025-08-22T22:40:24.105Z
Learning: BloodHound Enterprise has exactly four severity levels for attack paths: CRITICAL (95%–100%), HIGH (80%–94%), MODERATE (40%–79%), and LOW (0%–39%). There is no "NONE" or similar severity level for 0% exposure.

Applied to files:

  • docs/get-started/security-boundaries/tier-zero-members.mdx
  • docs/resources/release-notes/2024-05-09-v5-9-0.mdx
📚 Learning: 2025-10-02T18:01:39.059Z
Learnt from: StephenHinck
Repo: SpecterOps/bloodhound-docs PR: 67
File: docs/collect-data/enterprise-collection/privileged-collection.mdx:7-7
Timestamp: 2025-10-02T18:01:39.059Z
Learning: In the BloodHound documentation repository, "BloodHound" as a standalone name refers to the entire product family and is appropriate to use when content applies to all products in the family (Enterprise and Community Edition). "BloodHound Enterprise" should be used only when referring specifically to Enterprise-only features or capabilities.

Applied to files:

  • docs/get-started/security-boundaries/tier-zero-members.mdx
  • docs/resources/release-notes/2024-05-09-v5-9-0.mdx
🪛 LanguageTool
docs/resources/edges/same-forest-trust.mdx

[grammar] ~132-~132: Use a hyphen to join words.
Context: ... in 5 minutes by abusing AD CS, a follow up](https://www.pkisolutions.com/escalat...

(QB_NEW_EN_HYPHEN)

🔇 Additional comments (19)
docs/get-started/security-boundaries/tier-zero-members.mdx (2)

11-11: The blog post URL is accessible and points to valid content (HTTP 200 response, no redirects).


84-84: The blog post URL is accessible and correctly addresses RODC computer objects as Tier Zero assets and their proper configuration. No issues found.

docs/resources/release-notes/2022-10-24.mdx (1)

15-15: LGTM! URL update is correct.

The URL migration from the legacy posts.specterops.io domain to specterops.io/blog correctly addresses the PR objective to replace redirected blog links. The new URL points to the "Certified Pre‑Owned: Abusing Active Directory Certificate Services" research by Will Schroeder and Lee Christensen, matching the link text exactly.

docs/resources/edges/same-forest-trust.mdx (2)

135-135: The new reference to the SpecterOps blog post is valid and accessible. The June 25, 2025 post "Good Fences Make Good Neighbors" directly covers BloodHound's trust edge modeling, including the SameForestTrust edge, making it an appropriate and relevant addition to the documentation.


44-44: The updated blog post URLs are valid and accessible. Both the ESC5 blog post link (https://specterops.io/blog/2023/05/16/from-da-to-ea-with-esc5/) at lines 44 and 131 and the new reference link at line 135 return HTTP 200 and do not redirect to the home page. The URL updates from posts.specterops.io to specterops.io/blog/... are correct and the changes can be approved.

docs/resources/edges/az-website-contributor.mdx (1)

57-58: Blog URLs verified as accessible and relevant.

Both SpecterOps blog posts are accessible and directly support the AZWebsiteContributor documentation:

  • The Feb 15, 2023 article (Andy Robbins) covers managed-identity JWT extraction and privilege escalation on Azure App Service
  • The Apr 18, 2023 article documents BloodHound 4.3's Web Apps support and managed-identity attack paths

No broken links, redirects, or accessibility issues detected.

docs/resources/edges/az-managed-identity.mdx (1)

32-35: All referenced URLs are accessible and point to correct content.

The SpecterOps blog posts, M365 Internals article, and GitHub BARK repository are all live and contain accurate technical information relevant to Azure managed identity documentation. No redirects or broken links detected.

docs/resources/nodes/cert-template.mdx (1)

27-27: LGTM! URL standardization looks good.

The URL has been correctly updated to the canonical SpecterOps blog format.

docs/resources/edges/extended-by-policy.mdx (1)

25-25: LGTM! URL migration looks correct.

The ADCS ESC13 reference has been correctly updated to the canonical blog URL.

docs/resources/nodes/issuance-policy.mdx (1)

59-59: LGTM! URL updated correctly.

The reference URL has been correctly migrated to the canonical SpecterOps blog format.

docs/resources/edges/coerce-and-relay-ntlm-to-ldaps.mdx (1)

74-74: LGTM! Reference URL updated correctly.

The "Relay Your Heart Away" reference has been correctly updated to the canonical blog URL.

docs/resources/release-notes/2024-05-09-v5-9-0.mdx (1)

45-45: LGTM! Release notes reference updated correctly.

The ADCS ESC13 blog reference has been correctly updated to the canonical URL format.

docs/resources/edges/oid-group-link.mdx (1)

25-25: LGTM! Reference URL migrated correctly.

The ADCS ESC13 reference has been correctly updated to the canonical blog URL.

docs/resources/community-support/training-resources.mdx (1)

37-39: LGTM! Training resource URLs updated correctly.

The ADCS Attack Paths Part 1 and Part 3 blog URLs have been correctly migrated to the canonical SpecterOps blog format. Part 2 was already using the correct format.

docs/resources/edges/coerce-and-relay-ntlm-to-ldap.mdx (1)

74-74: LGTM! Reference URL is correct and accessible.

The "Relay Your Heart Away" reference at line 74 has been correctly updated and returns HTTP 200. The verification script provided references additional ADCS URLs that appear in other files in the repository, but only this one URL is present in the file being reviewed.

docs/resources/release-notes/2024-03-27-v5-8-0.mdx (2)

17-17: The blog URL is valid and accessible (returns HTTP 200).


20-20: Blog URLs are valid and accessible.

Both Part One and Part Two blog URLs return HTTP 200 and are working correctly.

docs/resources/edges/coerce-and-relay-ntlm-to-adcs.mdx (1)

76-76: The blog URL for "Relay Your Heart Away: An OPSEC-Conscious Approach to 445 Takeover" is valid and accessible (HTTP 200).

docs/resources/release-notes/2022-10-11.mdx (1)

28-28: The updated blog URL is accessible and correct.

The change from the legacy posts.specterops.io domain to https://specterops.io/blog/2021/06/17/certified-pre-owned/ successfully points to the correct blog post by Will Schroeder and Lee Christensen on AD Certificate Services abuses. The link is live and returns HTTP 200, confirming the URL migration is valid.


[Not A Security Boundary: Breaking Forest Trusts](https://posts.specterops.io/not-a-security-boundary-breaking-forest-trusts-cd125829518d)
[Not A Security Boundary: Breaking Forest Trusts](https://specterops.io/blog/2018/11/28/not-a-security-boundary-breaking-forest-trusts/)
[Hunting in Active Directory: Unconstrained Delegation & Forests Trusts](https://posts.specterops.io/hunting-in-active-directory-unconstrained-delegation-forests-trusts-71f2b33688e1)
Copy link
Contributor

@coderabbitai coderabbitai bot Dec 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Legacy blog URL should be updated for consistency.

Line 122 still references the old posts.specterops.io domain. While the PR objectives mention that legacy blog links will be cleaned before merging, ensure this reference is included in that cleanup for consistency with the updated URL on Line 121.

🤖 Prompt for AI Agents
In docs/resources/edges/coerce-to-tgt.mdx around line 122, update the legacy
blog URL that points to posts.specterops.io to match the updated domain used on
line 121 (replace the domain portion so the link becomes
https://specterops.io/hunting-in-active-directory-unconstrained-delegation-forests-trusts-71f2b33688e1),
ensuring the path remains identical and the link formatting is unchanged.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I need help tracking down the replacement URL for the remaining legacy blog links because they do not redirect to the expected pages. I need to contact the marketing team.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

🌐 Web query:

SpecterOps "Hunting in Active Directory: Unconstrained Delegation & Forests Trusts"

💡 Result:

Here are the SpecterOps resources and a short summary.

Key SpecterOps resources

  • Hunting in Active Directory: Unconstrained Delegation & Forests Trusts — SpecterOps post (original team post by Roberto Rodriguez summarizing detection guidance from the DerbyCon talk). [1]
  • Not A Security Boundary: Breaking Forest Trusts — SpecterOps research explaining the cross‑forest attack using unconstrained delegation and mitigation guidance. [2]
  • SpecterOps blog posts on AD trust attack paths and BloodHound updates that model these abuses (Good Fences Make Good Neighbors; BloodHound trust edges). [3][4]

Short summary (what the content covers)

  • Attack: An attacker who controls a machine/service configured for unconstrained Kerberos delegation can coerce domain controllers (or other privileged accounts) from the same or a trusted forest to authenticate to it, capture forwarded TGTs, and then use those TGTs to impersonate DCs or perform DCSync and other high‑impact actions across domain/forest boundaries. [2][1]
  • Detection guidance: log sources and indicators to monitor (Kerberos ticket forwarding/requests, unusual Rubeus activity, suspicious service account delegation settings, anomalous DC authentications to non‑DC hosts). The Hunting post lists event IDs and behavior patterns to build detections. [1]
  • Mitigation: remove/unset unconstrained delegation where not needed; apply “Account is sensitive and cannot be delegated” and Protected Users/Do not allow delegation protections to privileged accounts; harden SID filtering and trust configuration between forests; network segmentation and least‑privileged delegation usage (constrained/resource‑based delegation). Full mitigations and configuration checks are in the SpecterOps research. [2][1]

Sources
[1] Roberto Rodriguez — “Hunting in Active Directory: Unconstrained Delegation & Forests Trusts” (SpecterOps team post).
[2] SpecterOps — “Not A Security Boundary: Breaking Forest Trusts.”
[3] SpecterOps — “Good Fences Make Good Neighbors: New AD Trusts Attack Paths in BloodHound.”
[4] SpecterOps — “BloodHound v8: Usability, Extensibility, and OpenGraph.”

Would you like direct links to any of these pages, a copy/paste of the recommended detection rules and event IDs, or a short playbook for hunting this specific technique?


🌐 Web query:

site:specterops.io Roberto Rodriguez "Hunting in Active Directory: Unconstrained Delegation"

💡 Result:

I found the SpecterOps post "Hunting in Active Directory: Unconstrained Delegation & Forests Trusts" by Roberto Rodriguez (published Nov 29, 2018). It provides detection/hunting guidance for the unconstrained-delegation + printer-bug forest-trust attack; see the SpecterOps article. [1][2]

Would you like a short summary of the hunting indicators and detections from that post?


🌐 Web query:

specterops.io/blog/2018/11/29 hunting active directory unconstrained delegation

💡 Result:

I found SpecterOps coverage of this topic and related posts:

  • SpecterOps — "Not A Security Boundary: Breaking Forest Trusts" (explains the printer-bug / unconstrained-delegation attack across forest trusts, how attackers can coerce DCs to forward TGTs and then use those TGTs to escalate (DCSync, etc.), plus mitigation suggestions such as disabling Kerberos full delegation across trusts and protecting sensitive machine accounts). [1]

  • SpecterOps / Posts — "Hunting in Active Directory: Unconstrained Delegation & Forests Trusts" (detective guidance for the attack: what Kerberos events/tickets to look for, monitoring for forwarded TGTs (4624/logon monitoring), use of Rubeus to extract TGTs, and recommended detections/mitigations). [2]

Sources:
[1] SpecterOps — Not A Security Boundary: Breaking Forest Trusts (Nov 2018). (specterops.io)
[2] SpecterOps — Hunting in Active Directory: Unconstrained Delegation & Forests Trusts (Nov 29, 2018). (scribd.com)

Would you like a short actionable detection checklist (event IDs, queries, Rubeus signs, Sigma rules) extracted from those posts?

Citations:


🌐 Web query:

"specterops.io/blog/2018/11/29/hunting-in-active-directory-unconstrained-delegation-forests-trusts"

💡 Result:

I found SpecterOps coverage of this topic. Key points:

  • The SpecterOps post explains an attack that abuses unconstrained Kerberos delegation plus the “printer bug” (MS-RPRN) and default trust behavior to steal TGTs across forest trusts, allowing compromise of foreign forest domain controllers and DCSYNC/GOLDEN-TICKET style escalation. [1]
  • The authors note Microsoft treated this as a v.Next (hardening) change rather than an immediate patch; recommended mitigations include disabling Kerberos full delegation across trusts, adding sensitive machine accounts to Protected Users or marking them “sensitive and cannot be delegated,” disabling Spooler on DCs, and applying detection guidance. [2]
  • Related follow-up work (BloodHound updates) models this attack as an AbuseTGTDelegation path and documents detection/graphing improvements. [3]

Sources:
[1] SpecterOps — "Hunting in Active Directory: Unconstrained Delegation, Forests & Trusts" / related SpecterOps blog post.
[2] SpecterOps — "Not A Security Boundary: Breaking Forest Trusts" (disclosure timeline and mitigations).
[3] SpecterOps / BloodHound — "New AD Trusts Attack Paths in BloodHound" (edge: AbuseTGTDelegation).


🌐 Web query:

site:specterops.io/blog/2018/11/29/hunting-in-active-directory

💡 Result:

I attempted to open that exact URL; it returns a 404 (page not found). ()

Related SpecterOps Active Directory hunting posts you may find useful:

  • "Hunting With Active Directory Replication Metadata" (2017). (specterops.io)
  • SpecterOps open-source tools / SCCMHunter (documentation). (specterops.io)

Would you like me to search the site for other AD-hunting posts or find an archived copy of the 2018/11/29 page?

Citations:


@jeff-matthews, I've confirmed the issue you're describing. I searched for the legacy blog post "Hunting in Active Directory: Unconstrained Delegation & Forests Trusts" (Line 122) and found that:

  • The article was published by Roberto Rodriguez around November 29, 2018
  • The expected replacement URL pattern would be something like https://specterops.io/blog/2018/11/29/hunting-in-active-directory-unconstrained-delegation-forests-trusts/
  • However, that URL returns a 404 error

This confirms that some legacy blog posts may not have been migrated to the current blog structure or may be located at different paths than expected.

Contacting your marketing team is definitely the right approach - they would have the internal migration mapping or know if certain posts were archived, merged, or relocated to different URLs.

If you'd like, I can help you search for the replacement URLs of any other legacy links you need to track down. Just provide me with the article titles or legacy URLs, and I can verify whether they're accessible on the current blog structure. This might help you compile a complete list for your marketing team.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

@jeff-matthews, I've searched for the replacement URL and found the same issue as the previous article:

Article details:

Finding:
The article is still accessible on the old posts.specterops.io domain, but I could not locate a migrated version on the new specterops.io/blog/ structure. The expected pattern would be something like:

https://specterops.io/blog/2021/10/26/azure-privilege-escalation-via-service-principal-abuse/

However, this URL pattern does not exist (or the article may be at a different path).

This is another legacy link that needs to be added to your list for the marketing team. They'll need to provide the correct replacement URL or confirm whether this article was migrated, merged with another post, or archived.

If you have other legacy URLs you'd like me to check, feel free to share them and I can help you compile a comprehensive list for your marketing team.


🌐 Web query:

SpecterOps "Azure Privilege Escalation via Service Principal Abuse"

💡 Result:

SpecterOps published research and guidance showing how Azure service principal (app) permissions can be abused to escalate to high‑privilege roles. Key points:

  • Attack primitives include creating/adding credentials to apps, assigning app roles or MS Graph app permissions (e.g., Application.ReadWrite.All, RoleManagement.ReadWrite.Directory, ServicePrincipalEndpoint.ReadWrite.All, Organization.ReadWrite.All, Policy.ReadWrite.AuthenticationMethod) and using those to add owners, create credentials, change authentication policies (e.g., enable CBA), or grant admin roles. Abuse of these permissions can let an attacker impersonate service principals, add themselves to privileged groups, or promote principals to Global Administrator. [1][2][3]

  • SpecterOps demonstrated specific chains (and “compound” attack paths) and published tooling/examples (e.g., BloodHound edge mappings and BARK/PowerShell functions) to both exploit and detect these paths. They stress auditing/least‑privilege for app roles, monitoring credential creation, and restricting high‑risk MS Graph app roles. [1][2][3]

If you want, I can:

  • fetch and extract the SpecterOps blog post(s) and the exact MS Graph app roles and API endpoints they call; or
  • produce a concise checklist to detect/mitigate these abuse paths in your tenant. Which would you prefer?

🌐 Web query:

site:specterops.io/blog "Azure Privilege Escalation via Service Principal Abuse"

💡 Result:

I found the SpecterOps blog post "Azure Privilege Escalation via Service Principal Abuse" on the SpecterOps blog. See SpecterOps blog post [1] and the BloodHound resources that reference it [2].

Sources:
[1] SpecterOps — Azure Privilege Escalation via Service Principal Abuse. (posts.specterops.io)
[2] SpecterOps / BloodHound resources referencing the post. (bloodhound.specterops.io)

Citations:


🌐 Web query:

site:specterops.io/blog Azure service principal Andy Robbins 2021

💡 Result:

I searched SpecterOps for Andy Robbins + Azure/service principal content. Relevant posts I found:

  • "The Attack Path Management Manifesto" — Andy Robbins, May 25, 2021. [1]
  • "Automating Azure Abuse Research — Part 1" — Andy Robbins, May 25, 2022 (Azure-managed-identity/Service Principal research). [2]
  • "Managed Identity Attack Paths" series (Logic Apps / Function Apps) — Andy Robbins, June 2022. [3]

Sources:
[1] SpecterOps — The Attack Path Management Manifesto (May 25, 2021).
[2] SpecterOps — Automating Azure Abuse Research — Part 1 (May 25, 2022).
[3] SpecterOps — Managed Identity Attack Paths (June 2022).


@jeff-matthews, I've searched extensively for the replacement URL and confirmed this is another legacy article that hasn't been migrated (or is at a different path than expected):

Article details:

Findings:

  • The article is still accessible only on the old posts.specterops.io domain
  • I could not locate a migrated version on the new specterops.io/blog/ structure
  • The article is still referenced in the BloodHound documentation using the legacy URL

This is another legacy link that needs marketing team assistance. The expected pattern would be:

https://specterops.io/blog/2021/10/26/azure-privilege-escalation-via-service-principal-abuse/

However, this URL doesn't exist. Your marketing team will need to provide the correct replacement URL or confirm whether this article was migrated, merged, archived, or relocated to a different path.

Would you like me to check any other legacy URLs to help you build a comprehensive list for your marketing team?

Copy link
Contributor

@martinsohn martinsohn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work @jeff-matthews ! I left some comments. Two general points:

  • We should consider standardizing link text to either be the resource title (e.g. blog title), or the raw URL. We currently use both.
  • Edge documentation in docs is one part, the changes should also be reflected in the BloodHound code base i.e. packages/javascript/bh-shared-ui/src/components/HelpTexts/...

### Abuse and Opsec references

* [ADCS Attack Paths in BloodHound—Part 1](https://specterops.io/blog/2024/01/24/adcs-attack-paths-in-bloodhound-part-1/)
* [BloodHound ADCS Integration](https://specterops.io/blog/2024/10/30/bofhound-ad-cs-integration/)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • I am unsure if referencing BOFHound is necessary, as it's simply a collector that also supports ADCS collection. If deciding to keep it in the doc, then the link text should be changed from "BloodHound ADCS Integration" to "BOFHound: AD CS Integration"

* [Authentication Mechanism Assurance for AD DS in Windows Server 2008 R2 Step-by-Step Guide](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd378897(v=ws.10)?redirectedfrom=MSDN)
* [Use Authentication Mechanism Assurance (AMA) to secure administrative account logins](https://www.gradenegger.eu/en/using-authentication-mechanism-assurance-ama-to-secure-the-login-of-administrative-accounts/)
* [Certified Pre-Owned - Abusing Active Directory Certificate Services](https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf)
* [BloodHound ADCS Integration](https://specterops.io/blog/2024/10/30/bofhound-ad-cs-integration/)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am unsure if referencing BOFHound is necessary, as it's simply a collector that also supports ADCS collection. If deciding to keep it in the doc, then the link text should be changed from "BloodHound ADCS Integration" to "BOFHound: AD CS Integration"

* [https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf](https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf)
* [ADCS Attack Paths in BloodHound—Part 2](https://specterops.io/blog/2024/05/01/adcs-attack-paths-in-bloodhound-part-2/)
* [Certified Pre-Owned - Abusing Active Directory Certificate Services](https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf)
* [BloodHound ADCS Integration](https://specterops.io/blog/2024/10/30/bofhound-ad-cs-integration/)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am unsure if referencing BOFHound is necessary, as it's simply a collector that also supports ADCS collection. If deciding to keep it in the doc, then the link text should be changed from "BloodHound ADCS Integration" to "BOFHound: AD CS Integration"

* [Vulnerable Certificate Template Access Control - ESC4](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation#vulnerable-certificate-template-access-control-esc4)
* [Certified Pre-Owned - Abusing Active Directory Certificate Services](https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf)
* [BloodHound ADCS Integration](https://specterops.io/blog/2024/10/30/bofhound-ad-cs-integration/)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am unsure if referencing BOFHound is necessary, as it's simply a collector that also supports ADCS collection. If deciding to keep it in the doc, then the link text should be changed from "BloodHound ADCS Integration" to "BOFHound: AD CS Integration"


* Certipy 4.0
* [https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf](https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf)
* Domain Escalation Edit Attributes
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think "Domain Escalation Edit Attributes" refers to the title in the Certified_Pre-Owned.pdf - “Domain Escalation” section, "EDITF_ATTRIBUTESUBJECTALTNAME2 - ESC6" heading. We should probably remove this point and only link to the PDF as we already also do.


* Certipy 4.0
* [https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf](https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf)
* Domain Escalation Edit Attributes
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think "Domain Escalation Edit Attributes" refers to the title in the Certified_Pre-Owned.pdf - “Domain Escalation” section, "EDITF_ATTRIBUTESUBJECTALTNAME2 - ESC6" heading. We should probably remove this point and only link to the PDF as we already also do.

Comment on lines +35 to +47
| ClaimSpecialIdentity | CoerceAndRelayNTLMToADCS | CoerceAndRelayNTLMToLDAP |
| CoerceAndRelayNTLMToLDAPS| CoerceAndRelayNTLMToSMB | CoerceToTGT |
| Contains | CrossForestTrust | DCFor |
| DCSync | DumpSMSAPassword | ExecuteDCOM |
| ForceChangePassword | GenericAll | GenericWrite |
| GoldenCert | HasSIDHistory | HasSession |
| HasTrustKeys | MemberOf | Owns |
| GoldenCert | GPLink | HasSIDHistory |
| HasSession | HasTrustKeys | ManageCA |
| ManageCertificates | MemberOf | Owns |
| OwnsLimitedRights | ReadGMSAPassword | ReadLAPSPassword |
| SameForestTrust | SpoofSIDHistory | SQLAdmin |
| SyncedToEntraUser | SyncLAPSPassword | WriteAccountRestrictions |
| WriteDacl | WriteGPLink | WriteOwner |
| WriteOwnerLimitedRights | WriteSPN | |
| SyncedToADUser | SyncedToEntraUser | SyncLAPSPassword |
| WriteAccountRestrictions| WriteDacl | WriteGPLink |
| WriteOwner | WriteOwnerLimitedRights | WriteSPN |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't like the coderabbit addition - first it states

With this release, Contains is no longer a traversable edge

and then

changes to Contains edges described above were reverted

The article is not a release history - it should document the current behaviour.

I also recommend making all edges in the traversable and non-traversable tables links to the individual edge articles.

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

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants