-
Couldn't load subscription status.
- Fork 4
Improve SharpHound permissions documentation structure and cross-referencing #77
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…rencing Restructured the SharpHound data collection permissions documentation to better connect the high-level permissions overview with detailed least-privileged collection configurations. Key changes to permissions.mdx: - Added prominent note linking to least-privileged collection article - Standardized all sections with consistent "Collection Method", "Default Permissions", "Least-Privileged Option", and "Additional Data Source" headings - Enhanced User Rights Assignments section to explain URAs and reference CanRDP edge - Added security warning about Print Operators requiring User Rights Assignments removal - Improved introduction to emphasize importance of collecting all data types - Restructured Deleted Objects Container as "Additional Data Source" with proper cross-references - Standardized registry key formatting with consistent backticks and double backslashes - Improved cross-references throughout to guide users to detailed configuration steps Key changes to least-privileged-collection.mdx: - Added detailed Deleted Objects container information with DN paths (moved from the permissions.mdx) - Added subheadings for better organization (Restricted Read Permissions, Deleted Objects Container) - Added link to CanRDP edge documentation in User Rights Assignments section - Restructured Registry section with configuration methods explained upfront - Added clear subheadings: CA Registry, DC Registry, NTLM Relay Registry Paths Key changes to privileged-collection.mdx: - Added "registry" to list of privileged collection data types - Added cross-references to both permissions.mdx and least-privileged-collection.mdx The documentation now provides a clearer division: - privileged-collection.mdx: Explains why privileged collection matters - permissions.mdx: User-friendly guidance on data types and high-level permission requirements - least-privileged-collection.mdx: Detailed technical configurations for implementing least-privileged collection
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... 📒 Files selected for processing (1)
WalkthroughDocumentation-only updates across many guidance pages: normalized internal links (removed Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
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. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
docs/opengraph/best-practices.mdx (2)
53-53: Typo: “AP key” → “API key”Apply this diff:
- - Requires an [AP key](/integrations/bloodhound-api/working-with-api#authentication) + - Requires an [API key](/integrations/bloodhound-api/working-with-api#authentication)
61-61: Fix broken anchor in docs/opengraph/best-practices.mdx- You can use a [Bearer Token](/integrations/bloodhound-api/working-with-api#use-a-jwt%2Fbearer-token) instead of API key as this script will typically run only once. + You can use a [Bearer Token](/integrations/bloodhound-api/working-with-api#use-a-jwt-bearer-token) instead of API key as this script will typically run only once.docs/collect-data/enterprise-collection/privileged-collection.mdx (1)
16-16: Fix contraction.“lets” → “let’s”.
- Based on this view, the tree of Attack Paths on the left would present the greatest risk to this environment, now lets collect Local Group membership information from the domain: + Based on this view, the tree of Attack Paths on the left would present the greatest risk to this environment; now let's collect Local Group membership information from the domain:
🧹 Nitpick comments (8)
docs/collect-data/enterprise-collection/least-privileged-collection.mdx (2)
26-29: Use “Distinguished Name (DN)” in prose.Improve readability by spacing “DistinguishedName.”
-* Domain NC Deleted Objects DistinguishedName (DN): `CN=Deleted Objects,<Domain DN>` -* Configuration NC Deleted Objects DistinguishedName (DN): `CN=Deleted Objects,CN=Configuration,<Forest root domain DN>` +* Domain NC Deleted Objects Distinguished Name (DN): `CN=Deleted Objects,<Domain DN>` +* Configuration NC Deleted Objects Distinguished Name (DN): `CN=Deleted Objects,CN=Configuration,<forest root domain DN>`
89-94: Call out Remote Registry service requirement.Readers may miss that exceptions only work if the Remote Registry service is running.
By default, only Administrators may read the registry remotely. There are two methods to delegate remote registry access for least-privileged collection: + +<Note>The Remote Registry service must be running on target hosts for either method to work.</Note>docs/collect-data/permissions.mdx (3)
17-25: Add NTLM Relay registry paths for discoverability.Mention NTLM relay registry paths alongside DC/CA registry to align with least‑priv doc.
* [Certificate Services](/collect-data/permissions#certificate-services) * [DC Registry](/collect-data/permissions#dc-registry) * [CA Registry](/collect-data/permissions#ca-registry) +* [NTLM Relay Registry Paths](/collect-data/enterprise-collection/least-privileged-collection#ntlm-relay-registry-paths)
72-72: Tighten wording.“prior to” → “before”.
-... edge, whereas prior to SharpHound Common v3, BloodHound made assumptions ... +... edge, whereas before SharpHound Common v3, BloodHound made assumptions ...
145-145: Minor grammar.Add article for clarity.
-... see [Least-Privileged Collection - CA Registry](/collect-data/enterprise-collection/least-privileged-collection#ca-registry) for explanation of why this is accessible. +... see [Least‑Privileged Collection – CA Registry](/collect-data/enterprise-collection/least-privileged-collection#ca-registry) for an explanation of why this is accessible.docs/resources/edges/execute-dcom.mdx (1)
55-55: MITRE mapping LGTM; consider adding TA0008 for consistency.T1021.003 fits DCOM. Optionally add a tactic link to TA0008 in References to align with other edges.
docs/resources/edges/admin-to.mdx (1)
51-51: Use trailing slash for consistency.Change to https://attack.mitre.org/tactics/TA0008/ to match other MITRE links’ style in the repo.
docs/resources/edges/has-session.mdx (1)
45-50: Standardize MITRE link formatting.Add trailing slash to TA0006 to align with T1134 and other pages: https://attack.mitre.org/tactics/TA0006/
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (15)
docs/collect-data/ce-collection/create-gmsa-community-edition.mdx(1 hunks)docs/collect-data/enterprise-collection/data-retention.mdx(1 hunks)docs/collect-data/enterprise-collection/least-privileged-collection.mdx(3 hunks)docs/collect-data/enterprise-collection/privileged-collection.mdx(2 hunks)docs/collect-data/permissions.mdx(4 hunks)docs/install-data-collector/install-sharphound/create-gmsa.mdx(1 hunks)docs/opengraph/best-practices.mdx(1 hunks)docs/resources/edges/adcs-esc10a.mdx(1 hunks)docs/resources/edges/adcs-esc10b.mdx(1 hunks)docs/resources/edges/adcs-esc9a.mdx(1 hunks)docs/resources/edges/adcs-esc9b.mdx(1 hunks)docs/resources/edges/admin-to.mdx(1 hunks)docs/resources/edges/execute-dcom.mdx(1 hunks)docs/resources/edges/has-session.mdx(1 hunks)docs/resources/edges/has-trust-keys.mdx(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-08T15:57:55.743Z
Learnt from: StephenHinck
PR: SpecterOps/bloodhound-docs#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/collect-data/permissions.mdxdocs/collect-data/enterprise-collection/least-privileged-collection.mdx
🪛 LanguageTool
docs/collect-data/permissions.mdx
[style] ~72-~72: ‘prior to’ might be wordy. Consider a shorter alternative.
Context: .../resources/edges/can-rdp) edge, whereas prior to SharpHound Common v3, BloodHound made a...
(EN_WORDINESS_PREMIUM_PRIOR_TO)
[grammar] ~92-~92: There might be a mistake here.
Context: ...s function. Least-Privileged Options: * On Windows Server operating systems, mem...
(QB_NEW_EN)
[style] ~98-~98: Try moving the adverb to make the sentence clearer.
Context: ...nfiguration instructions, including how to safely configure Print Operators, see [Least-Privileged Collection - Ses...
(SPLIT_INFINITIVE)
[grammar] ~133-~133: There might be a mistake here.
Context: ... restrictions are configured by default. * Security Contains the security des...
(QB_NEW_EN)
[grammar] ~145-~145: There might be a mistake here.
Context: ...east-privileged-collection#ca-registry) for explanation of why this is accessible. ...
(QB_NEW_EN)
docs/collect-data/enterprise-collection/privileged-collection.mdx
[grammar] ~30-~30: There might be a mistake here.
Context: ...ng this data via least-privilege access.
(QB_NEW_EN)
docs/resources/edges/has-session.mdx
[grammar] ~49-~49: There might be a mistake here.
Context: ...xfiltration/Invoke-TokenManipulation.ps1](https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-TokenManipulation.ps1) * [https://attack.mitre.org/techniques/T113...
(QB_NEW_EN)
docs/resources/edges/has-trust-keys.mdx
[grammar] ~68-~68: There might be a mistake here.
Context: ...alculating Kerberos Keys for AD Accounts](https://snovvcra.sh/2021/05/21/calculating-kerberos-keys.html)
- [Rubeus GitHub](https://github.com/GhostP...
(QB_NEW_EN)
docs/collect-data/enterprise-collection/least-privileged-collection.mdx
[grammar] ~26-~26: There might be a mistake here.
Context: ...Deleted Objects container locations are: * Domain NC Deleted Objects DistinguishedN...
(QB_NEW_EN)
[grammar] ~27-~27: There might be a mistake here.
Context: ...Deleted Objects DistinguishedName (DN): CN=Deleted Objects,<Domain DN> * Configuration NC Deleted Objects Disting...
(QB_NEW_EN)
🔇 Additional comments (8)
docs/collect-data/ce-collection/create-gmsa-community-edition.mdx (1)
32-32: Good link update to extensionless path.
Matches routing style; omit trailing slash unless site config requires it to avoid extra redirects.docs/install-data-collector/install-sharphound/create-gmsa.mdx (1)
11-11: Link normalization confirmed: No.mdxlinks remain;/collect-data/ce-collection/create-gmsa-community-editionexists, and with defaulttrailingSlash: false, extensionless URLs resolve correctly without trailing slashes.docs/opengraph/best-practices.mdx (1)
11-11: Approve internal doc link
docs/opengraph/library.mdx exists; omitting.mdxis consistent with existing links.docs/collect-data/enterprise-collection/data-retention.mdx (1)
48-51: Code fence language is correct.PowerShell fences match the commands. LGTM.
Also applies to: 54-58
docs/resources/edges/adcs-esc10a.mdx (1)
196-196: URL normalization LGTM.Trailing slash addition matches the repo’s convention.
docs/resources/edges/adcs-esc10b.mdx (1)
202-202: URL normalization LGTM.Consistent with related edge docs.
docs/resources/edges/adcs-esc9a.mdx (1)
169-169: URL normalization LGTM.Matches the updated convention elsewhere in the PR.
docs/resources/edges/adcs-esc9b.mdx (1)
186-186: URL normalization LGTM.Consistent with related updates.
docs/collect-data/enterprise-collection/privileged-collection.mdx
Outdated
Show resolved
Hide resolved
There was a problem hiding this 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
♻️ Duplicate comments (1)
docs/collect-data/enterprise-collection/privileged-collection.mdx (1)
30-30: Fix the permissions link path (404) and add the missing comma.Everywhere else in the docs (including earlier in this file) the permissions page lives at
/collect-data/permissions. Pointing this sentence at/docs/collect-data/permissionsgenerates a 404 in production. While you’re here, add the comma after the introductory clause for readability.-For details on what data types can be collected see [SharpHound Data Collection and Permissions](/docs/collect-data/permissions) and [Least-Privileged Collection in SharpHound](/collect-data/enterprise-collection/least-privileged-collection) for information on collecting this data via least-privilege access. +For details on what data types can be collected, see [SharpHound Data Collection and Permissions](/collect-data/permissions) and [Least-Privileged Collection in SharpHound](/collect-data/enterprise-collection/least-privileged-collection) for information on collecting this data via least-privilege access.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
docs/collect-data/enterprise-collection/privileged-collection.mdx(2 hunks)docs/collect-data/permissions.mdx(4 hunks)docs/opengraph/best-practices.mdx(2 hunks)docs/resources/edges/has-trust-keys.mdx(2 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-08T15:57:55.743Z
Learnt from: StephenHinck
PR: SpecterOps/bloodhound-docs#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/collect-data/permissions.mdx
🪛 LanguageTool
docs/collect-data/permissions.mdx
[style] ~72-~72: ‘prior to’ might be wordy. Consider a shorter alternative.
Context: .../resources/edges/can-rdp) edge, whereas prior to SharpHound Common v3, BloodHound made a...
(EN_WORDINESS_PREMIUM_PRIOR_TO)
[grammar] ~92-~92: There might be a mistake here.
Context: ...s function. Least-Privileged Options: * On Windows Server operating systems, mem...
(QB_NEW_EN)
[style] ~98-~98: Try moving the adverb to make the sentence clearer.
Context: ...nfiguration instructions, including how to safely configure Print Operators, see [Least-Privileged Collection - Ses...
(SPLIT_INFINITIVE)
[grammar] ~133-~133: There might be a mistake here.
Context: ... restrictions are configured by default. * Security Contains the security des...
(QB_NEW_EN)
docs/resources/edges/has-trust-keys.mdx
[grammar] ~68-~68: There might be a mistake here.
Context: ...alculating Kerberos Keys for AD Accounts](https://snovvcra.sh/2021/05/21/calculating-kerberos-keys.html)
- [Rubeus GitHub](https://github.com/GhostP...
(QB_NEW_EN)
docs/opengraph/best-practices.mdx
[grammar] ~55-~55: There might be a mistake here.
Context: ...ation) 1. Cypher Queries "Starter Pack" - Cypher Queries to help new users explore...
(QB_NEW_EN)
[grammar] ~61-~61: There might be a mistake here.
Context: ...ith-api#use-a-jwt-bearer-token) instead of API key as this script will typically r...
(QB_NEW_EN)
[grammar] ~61-~61: There might be a mistake here.
Context: ...his script will typically run only once. - Do not hardcode credentials; use place h...
(QB_NEW_EN)
docs/collect-data/enterprise-collection/privileged-collection.mdx
[grammar] ~30-~30: There might be a mistake here.
Context: ...ng this data via least-privilege access.
(QB_NEW_EN)
🔇 Additional comments (1)
docs/resources/edges/has-trust-keys.mdx (1)
30-30: Canonical URL aligned.Thanks for updating both references to the snovvcra.sh endpoint—the canonical article is now linked consistently throughout the page.
Also applies to: 68-68
There was a problem hiding this 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: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
docs/opengraph/best-practices.mdx(2 hunks)
🧰 Additional context used
🪛 LanguageTool
docs/opengraph/best-practices.mdx
[grammar] ~55-~55: There might be a mistake here.
Context: ...ation) 1. Cypher Queries "Starter Pack" - Cypher Queries to help new users explore...
(QB_NEW_EN)
[grammar] ~61-~61: There might be a mistake here.
Context: ...ith-api#use-a-jwt-bearer-token) instead of API key as this script will typically r...
(QB_NEW_EN)
[grammar] ~61-~61: There might be a mistake here.
Context: ...his script will typically run only once. - Do not hardcode credentials; use place h...
(QB_NEW_EN)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for the contribution @martinsohn! I did an editorial review and suggested some minor edits.
@StephenHinck, deferring to you on final approval to merge.
docs/collect-data/enterprise-collection/least-privileged-collection.mdx
Outdated
Show resolved
Hide resolved
docs/collect-data/enterprise-collection/least-privileged-collection.mdx
Outdated
Show resolved
Hide resolved
docs/collect-data/enterprise-collection/least-privileged-collection.mdx
Outdated
Show resolved
Hide resolved
| By default, only Administrators may read the registry remotely. There are two methods to delegate remote registry access for least-privileged collection: | ||
|
|
||
| By default, only Administrators may read the registry remotely on domain controllers. A similar exception can be created on DCs by adding the required DC registry paths to `HKLM\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg\AllowedExactPaths` using the GPO setting [Network access: Remotely accessible registry paths](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/network-access-remotely-accessible-registry-paths). This will create an exception to the Remote Registry named pipe on the DC allowing Authenticated Users to read those exact key paths, as long as the user also is granted permissions on the registry key DACL as well. | ||
| 1. **AllowedPaths / AllowedExactPaths exceptions**: Create exceptions using the GPO setting [Network access: Remotely accessible registry paths](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/network-access-remotely-accessible-registry-paths) to allow Authenticated Users to connect to the Remote Registry named pipe at specific registry paths. Effective access is still governed by permissions on individual registry keys. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| 1. **AllowedPaths / AllowedExactPaths exceptions**: Create exceptions using the GPO setting [Network access: Remotely accessible registry paths](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/network-access-remotely-accessible-registry-paths) to allow Authenticated Users to connect to the Remote Registry named pipe at specific registry paths. Effective access is still governed by permissions on individual registry keys. | |
| 1. **AllowedPaths / AllowedExactPaths exceptions**: Create exceptions using the GPO setting [Network access: Remotely accessible registry paths](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/network-access-remotely-accessible-registry-paths) to allow Authenticated Users to connect to the Remote Registry named pipe at specific registry paths. Permissions on individual registry keys still govern effective access. |
| 1. **AllowedPaths / AllowedExactPaths exceptions**: Create exceptions using the GPO setting [Network access: Remotely accessible registry paths](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/network-access-remotely-accessible-registry-paths) to allow Authenticated Users to connect to the Remote Registry named pipe at specific registry paths. Effective access is still governed by permissions on individual registry keys. | ||
|
|
||
| The registry paths for NTLM relay edges are also only accessible remotely by Administrators by default. Group Policy can be utilized to create AllowedExactPaths exceptions for these specific paths as well. This will grant Authenticated Users the ability to connect to the Remote Registry named pipe at those specific registry paths. | ||
| 2. **Modify Remote Registry named pipe security descriptor**: Alternatively, modify the default security descriptor on the Remote Registry named pipe to grant explicit security principals read permissions to the entire registry. Effective access is still governed via permissions configured on individual registry keys. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| 2. **Modify Remote Registry named pipe security descriptor**: Alternatively, modify the default security descriptor on the Remote Registry named pipe to grant explicit security principals read permissions to the entire registry. Effective access is still governed via permissions configured on individual registry keys. | |
| 2. **Modify Remote Registry named pipe security descriptor**: Alternatively, modify the default security descriptor on the Remote Registry named pipe to grant explicit security principals read permissions to the entire registry. Permissions on individual registry keys still govern effective access.``` |
|
|
||
| ### NTLM Relay Registry Paths | ||
|
|
||
| The registry paths for NTLM relay edges are located on all Windows hosts and are only accessible remotely by Administrators by default. Group Policy can be utilized to create AllowedExactPaths exceptions for these specific paths using the same method described above. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| The registry paths for NTLM relay edges are located on all Windows hosts and are only accessible remotely by Administrators by default. Group Policy can be utilized to create AllowedExactPaths exceptions for these specific paths using the same method described above. | |
| Registry paths for NTLM relay edges exist on all Windows hosts. By default, only Administrators can access these paths remotely. To enable least-privileged collection, use Group Policy to add these specific paths to AllowedExactPaths. This grants Authenticated Users remote read access, following the same method described above. |
| </Frame> | ||
|
|
||
| See [Least-Privileged Collection in SharpHound](/collect-data/enterprise-collection/least-privileged-collection) for information on collecting this data via least-privilege access. | ||
| For details on what data types can be collected see [SharpHound Data Collection and Permissions](/docs/collect-data/permissions) and [Least-Privileged Collection in SharpHound](/collect-data/enterprise-collection/least-privileged-collection) for information on collecting this data via least-privilege access. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| For details on what data types can be collected see [SharpHound Data Collection and Permissions](/docs/collect-data/permissions) and [Least-Privileged Collection in SharpHound](/collect-data/enterprise-collection/least-privileged-collection) for information on collecting this data via least-privilege access. | |
| For details on what data types can be collected, see [SharpHound Data Collection and Permissions](/docs/collect-data/permissions) and [Least-Privileged Collection in SharpHound](/collect-data/enterprise-collection/least-privileged-collection) for information on collecting this data via least-privilege access. |
docs/collect-data/permissions.mdx
Outdated
| * [CA Registry](/collect-data/permissions#ca-registry) | ||
|
|
||
| Local Groups and Sessions can only be collected from domain-joined Windows systems, and require privileged collection to be configured, see [Why perform privileged collection in SharpHound](/collect-data/enterprise-collection/privileged-collection). This collection helps understand Attack Paths to individual systems based on non-centralized configurations. | ||
| It is important to have as much visibility as possible, so collecting all data types is recommended. Local Group Memberships and Sessions are especially important as they enable understanding Attack Paths to individual systems based on non-centralized configurations. See [Why perform privileged collection in SharpHound](/collect-data/enterprise-collection/privileged-collection). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| It is important to have as much visibility as possible, so collecting all data types is recommended. Local Group Memberships and Sessions are especially important as they enable understanding Attack Paths to individual systems based on non-centralized configurations. See [Why perform privileged collection in SharpHound](/collect-data/enterprise-collection/privileged-collection). | |
| SpecterOps recommends collecting all data types because it provides maximum visibility into your environment. Local Group Memberships and Sessions are especially important, as they reveal Attack Paths to individual systems based on non-centralized configurations. See [Why perform privileged collection in SharpHound](/collect-data/enterprise-collection/privileged-collection). |
docs/collect-data/permissions.mdx
Outdated
| ## User Rights Assignments | ||
|
|
||
| Prior to SharpHound Common v3, BloodHound made assumptions about group membership and Attack Paths. For example, BloodHound would assume that membership in the Remote Desktop Users group on its own gives users the ability to utilize Remote Desktop to access a system. The reality of necessary permissions is more complex, and understanding that access requires analysis of User Rights Assignments within Windows. | ||
| User Rights Assignments (URAs) in Windows define what privileges and capabilities security principals have on a system, independent of group membership. Collecting User Rights Assignments allows BloodHound to accurately determine the [CanRDP](/resources/edges/can-rdp) edge, whereas prior to SharpHound Common v3, BloodHound made assumptions based solely on group membership—assuming that membership in the Remote Desktop Users group alone gives users the ability to RDP to a system. However, to successfully use Remote Desktop, a user needs **both** membership in the Remote Desktop Users group **and** the User Rights Assignment `SeRemoteInteractiveLogonRight`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| User Rights Assignments (URAs) in Windows define what privileges and capabilities security principals have on a system, independent of group membership. Collecting User Rights Assignments allows BloodHound to accurately determine the [CanRDP](/resources/edges/can-rdp) edge, whereas prior to SharpHound Common v3, BloodHound made assumptions based solely on group membership—assuming that membership in the Remote Desktop Users group alone gives users the ability to RDP to a system. However, to successfully use Remote Desktop, a user needs **both** membership in the Remote Desktop Users group **and** the User Rights Assignment `SeRemoteInteractiveLogonRight`. | |
| User Rights Assignments (URAs) in Windows define what privileges and capabilities security principals have on a system, independent of group membership. Collecting User Rights Assignments allows BloodHound to accurately determine the [CanRDP](/resources/edges/can-rdp) edge. Before SharpHound Common v3, BloodHound made assumptions based solely on group membership—assuming that membership in the Remote Desktop Users group alone gives users the ability to RDP to a system. However, to successfully use Remote Desktop, a user needs **both** membership in the Remote Desktop Users group **and** the User Rights Assignment `SeRemoteInteractiveLogonRight`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I left a few comments on style and a few typos.
| Permissions to read the Deleted Objects container (optional) may be delegated to a group and the SharpHound collector service account made a member of that group. | ||
| ### Deleted Objects Container (Optional) | ||
|
|
||
| SharpHound can read the contents of the Deleted Objects container (also known as the AD Recycle Bin). Collecting deleted objects affects data retention behavior in BloodHound Enterprise—see [Active Directory Recycle Bin](/collect-data/enterprise-collection/data-retention#active-directory-recycle-bin) for details on how this impacts retention periods. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it should read "SharpHound can read the content of"
No s for content
Also, "Enterprise—see" should probably be "Enterprise. See"
| SharpHound collects registry data for both certificate services and NTLM relay edges. The certificate services registry paths are on certificate authorities and domain controllers. NTLM relay paths are located on all Windows hosts. | ||
|
|
||
| When the AD CS role is installed in Windows, the `HKLM\SYSTEM\CurrentControlSet\Services\CertSvc` registry path is added to the `HKLM\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg\AllowedPaths`. This creates a remote registry exception that allows Authenticated Users to query any keys and subkeys in this path, as long as they also are granted rights to read the key. | ||
| By default, only Administrators may read the registry remotely. There are two methods to delegate remote registry access for least-privileged collection: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We might want to change for Administrators to emphasis that it's a group or add "group" specifically.
| By default, only Administrators may read the registry remotely. There are two methods to delegate remote registry access for least-privileged collection: | ||
|
|
||
| By default, only Administrators may read the registry remotely on domain controllers. A similar exception can be created on DCs by adding the required DC registry paths to `HKLM\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg\AllowedExactPaths` using the GPO setting [Network access: Remotely accessible registry paths](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/network-access-remotely-accessible-registry-paths). This will create an exception to the Remote Registry named pipe on the DC allowing Authenticated Users to read those exact key paths, as long as the user also is granted permissions on the registry key DACL as well. | ||
| 1. **AllowedPaths / AllowedExactPaths exceptions**: Create exceptions using the GPO setting [Network access: Remotely accessible registry paths](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/network-access-remotely-accessible-registry-paths) to allow Authenticated Users to connect to the Remote Registry named pipe at specific registry paths. Effective access is still governed by permissions on individual registry keys. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should be "individual registry key" (no s)
| 1. **AllowedPaths / AllowedExactPaths exceptions**: Create exceptions using the GPO setting [Network access: Remotely accessible registry paths](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/network-access-remotely-accessible-registry-paths) to allow Authenticated Users to connect to the Remote Registry named pipe at specific registry paths. Effective access is still governed by permissions on individual registry keys. | ||
|
|
||
| The registry paths for NTLM relay edges are also only accessible remotely by Administrators by default. Group Policy can be utilized to create AllowedExactPaths exceptions for these specific paths as well. This will grant Authenticated Users the ability to connect to the Remote Registry named pipe at those specific registry paths. | ||
| 2. **Modify Remote Registry named pipe security descriptor**: Alternatively, modify the default security descriptor on the Remote Registry named pipe to grant explicit security principals read permissions to the entire registry. Effective access is still governed via permissions configured on individual registry keys. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Change for "registry key"
| Alternatively, if creating exceptions via `AllowedExactPaths` or `AllowedPaths` is not acceptable in your organization, it is also possible to modify the default security descriptor on the Remote Registry named pipe to grant explicit security principals to connect to the named pipe with read permissions to the entire registry collection. Effective access is still governed via permissions configured on individual registry keys. | ||
| ### CA Registry | ||
|
|
||
| When the AD CS role is installed in Windows, the `HKLM\SYSTEM\CurrentControlSet\Services\CertSvc` registry path is automatically added to `HKLM\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg\AllowedPaths`. This creates a remote registry exception that allows Authenticated Users to query any keys and subkeys in this path, as long as they also are granted rights to read the key. Therefore, CA registry data is accessible to Authenticated Users by default when AD CS is installed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would change for Authenticated Users to make it obvious it's a group.
docs/collect-data/permissions.mdx
Outdated
| **Required Permissions:** Only Local Administrators may call the LsaOpenPolicy function. | ||
|
|
||
| Collecting information about User Rights Assignments requires analyzing LSA Policy on each domain-joined system utilizing the LsaOpenPolicy function. Only Local Administrators may call the LsaOpenPolicy function. | ||
| **Least-Privileged Option:** There is no known way to delegate this permission for least-privileged collection. See [Least-Privileged Collection - User Rights Assignments](/collect-data/enterprise-collection/least-privileged-collection#user-rights-assignments) for more details on the implications. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"There is no known way to" this sounds weird.
I think we should rephrase, but I don't have a good suggestion for you.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"There is currently no known method to delegate this permission for least-privileged collection"
docs/collect-data/permissions.mdx
Outdated
| * On Windows Server operating systems, members of the local Print Operators group may also collect session data | ||
| * Windows desktop operating systems do not have a local Print Operators group and require alternate approaches | ||
|
|
||
| <Warning>When using Print Operators for collection, you should remove dangerous default User Rights Assignments (SeInteractiveLogonRight, SeLoadDriverPrivilege, SeShutdownPrivilege) from this group to prevent privilege escalation on DCs.</Warning> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We could consider using backticks for all the rights throughout the PR.
docs/collect-data/permissions.mdx
Outdated
| **Collection Method:** SharpHound collects this information utilizing signed LDAP queries against a domain controller in the domain. | ||
|
|
||
| By default, any Authenticated User can enumerate almost all Certificate Services data utilized by BloodHound Enterprise. | ||
| **Default Permissions:** By default, any Authenticated User can enumerate almost all Certificate Services data utilized by BloodHound Enterprise. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use Authenticated Users
docs/collect-data/permissions.mdx
Outdated
| Collecting these registry key values requires membership of Administrators on the DCs by default. Least-privilege delegation is possible via Group Policy or registry modifications. | ||
| **Collection Method:** SharpHound collects these registry key values via remote registry access. | ||
|
|
||
| **Default Permissions:** Collecting these registry key values requires membership of Administrators on the DCs by default. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
use Adminstrators
docs/opengraph/best-practices.mdx
Outdated
| # Introduction | ||
|
|
||
| This page collects best practices for creating [graph extensions](./library.mdx) and tooling for OpenGraph. | ||
| This page collects best practices for creating [graph extensions](./library) and tooling for OpenGraph. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i think we should capitalize Graph Extensions
…ction.mdx Co-authored-by: Jeff Matthews <[email protected]>
…ction.mdx Co-authored-by: Jeff Matthews <[email protected]>
…ction.mdx Co-authored-by: Jeff Matthews <[email protected]>
There was a problem hiding this 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
♻️ Duplicate comments (3)
docs/opengraph/best-practices.mdx (1)
61-61: Add the missing article before “API key”.The sentence still reads “instead of API key.” Please update it to “instead of an API key” for correct grammar.
- - You can use a [Bearer Token](/integrations/bloodhound-api/working-with-api#use-a-jwt-bearer-token) instead of API key as this script will typically run only once. + - You can use a [Bearer Token](/integrations/bloodhound-api/working-with-api#use-a-jwt-bearer-token) instead of an API key as this script will typically run only once.docs/collect-data/permissions.mdx (1)
26-26: Prefer “visibility” and tighten wording.Minor phrasing improvement for clarity.
-It is important to have as much visibility as possible, so collecting all data types is recommended. Local Group Memberships and Sessions are especially important as they enable understanding Attack Paths to individual systems based on non-centralized configurations, see [Why perform privileged collection in SharpHound](/collect-data/enterprise-collection/privileged-collection). +It is important to have as much visibility as possible, so collecting all data types is recommended. Local Group Memberships and Sessions are especially important as they provide visibility into Attack Paths to individual systems based on non‑centralized configurations. See [Why perform privileged collection in SharpHound](/collect-data/enterprise-collection/privileged-collection).docs/collect-data/enterprise-collection/privileged-collection.mdx (1)
30-30: Absolute link OK; hyphenate “least‑privileged” and add period.Consistency and punctuation.
-For details on what data types can be collected see [SharpHound Data Collection and Permissions](/docs/collect-data/permissions). For information on collecting this data via least-privilege access see [Least-Privileged Collection in SharpHound](/collect-data/enterprise-collection/least-privileged-collection) +For details on what data types can be collected, see [SharpHound Data Collection and Permissions](/docs/collect-data/permissions). For information on collecting this data via least‑privileged access, see [Least‑Privileged Collection in SharpHound](/collect-data/enterprise-collection/least-privileged-collection).
🧹 Nitpick comments (9)
docs/install-data-collector/install-sharphound/tiered-collector-strategy.mdx (1)
30-30: Pluralize “permission” and clarify either/or phrasing.Use plural and make the options explicit.
- * Each service account must have collection permission on all systems in the service account's tier - local `Administrators` group membership or [Least-Privileged Collection](/collect-data/enterprise-collection/least-privileged-collection) permissions. + * Each service account must have collection permissions on all systems in the service account's tier—either local `Administrators` group membership or the permissions described in [Least‑Privileged Collection](/collect-data/enterprise-collection/least-privileged-collection).docs/collect-data/permissions.mdx (3)
29-29: Name the group precisely.Use the proper group name and minor wording tweak.
-<Warning>The SharpHound collection service account does not require `Domain Admin` membership. While adding the account to local `Administrators` groups on domain computers will work, we recommend following the articles [Least-Privileged Collection](/collect-data/enterprise-collection/least-privileged-collection) and [SharpHound Enterprise Service Hardening](/manage-bloodhound/securing-bloodhound-and-collectors/sharphound-hardening).</Warning> +<Warning>The SharpHound collection service account does not require membership in `Domain Admins`. While adding the account to local `Administrators` groups on domain computers will work, we recommend following [Least‑Privileged Collection](/collect-data/enterprise-collection/least-privileged-collection) and [SharpHound Enterprise Service Hardening](/manage-bloodhound/securing-bloodhound-and-collectors/sharphound-hardening).</Warning>
73-73: Split long sentence; add backticks; replace “prior to.”Improves readability and consistency.
-User Rights Assignments (URAs) in Windows define what privileges and capabilities security principals have on a system, independent of group membership. Collecting User Rights Assignments allows BloodHound to accurately determine the [CanRDP](/resources/edges/can-rdp) edge, whereas prior to SharpHound Common v3, BloodHound made assumptions based solely on group membership—assuming that membership in the Remote Desktop Users group alone gives users the ability to RDP to a system. However, to successfully use Remote Desktop, a user needs **both** membership in the Remote Desktop Users group **and** the User Rights Assignment `SeRemoteInteractiveLogonRight`. +User Rights Assignments (URAs) in Windows define what privileges and capabilities security principals have on a system, independent of group membership. Collecting User Rights Assignments allows BloodHound to accurately determine the [CanRDP](/resources/edges/can-rdp) edge. Before SharpHound Common v3, BloodHound assumed that membership in the `Remote Desktop Users` group alone gives users the ability to RDP to a system. In reality, a user needs both membership in `Remote Desktop Users` and the URA `SeRemoteInteractiveLogonRight`.
93-96: Punctuate bullets consistently.End list items with periods for consistency.
-* On Windows Server operating systems, members of the local `Print Operators` group may also collect session data -* Windows desktop operating systems do not have a local `Print Operators` group and require alternate approaches +* On Windows Server operating systems, members of the local `Print Operators` group may also collect session data. +* Windows desktop operating systems do not have a local `Print Operators` group and require alternate approaches.docs/collect-data/enterprise-collection/privileged-collection.mdx (1)
7-7: Tighten list phrasing.Use “such as” to introduce examples and remove awkward comma.
-Privileged collection allows BloodHound to analyze Attack Paths based on non-centralized configurations, the local groups, active sessions, registry, and user rights assignments configured on each domain-joined system in your environment. +Privileged collection allows BloodHound to analyze Attack Paths based on non‑centralized configurations, such as local groups, active sessions, registry data, and user rights assignments configured on each domain‑joined system in your environment.docs/collect-data/enterprise-collection/least-privileged-collection.mdx (4)
8-11: Fix grammar and add comma.Tighten intro and recommendation phrasing.
-Privileged collection allows BloodHound to analyze Attack Paths based on non-centralized configurations using privileged administrative credentials, similar to performing a privileged vulnerability scan. Least-privileged collection accomplishes these goals without using default administrative privileges to perform the collection. With some additional configuration SharpHound can collect the local groups, active sessions, and registry keys without adding any SharpHound collection service accounts to Domain Admins. +Privileged collection allows BloodHound to analyze Attack Paths based on non‑centralized configurations using privileged administrative credentials, similar to a privileged vulnerability scan. Least‑privileged collection accomplishes these goals without using default administrative privileges. With some additional configuration, SharpHound can collect local groups, active sessions, and registry keys without adding any SharpHound collection service accounts to `Domain Admins`. - -<Note>We also recommend to follow the article [SharpHound Enterprise Service Hardening](/manage-bloodhound/securing-bloodhound-and-collectors/sharphound-hardening).</Note> +<Note>We also recommend following [SharpHound Enterprise Service Hardening](/manage-bloodhound/securing-bloodhound-and-collectors/sharphound-hardening).</Note>
37-38: Backtick well-known groups and clarify subject.Use group names and backticks consistently.
-By default, on currently supported Windows operating systems, only `Administrators` on the device(s) being collected have this right on Windows clients and member servers. For compatibility purposes, Everyone is granted this right on domain controllers by default. +By default, on currently supported Windows operating systems, only members of the local `Administrators` group on the device(s) being collected have this right on Windows clients and member servers. For compatibility purposes, `Everyone` is granted this right on domain controllers by default.
89-94: Add article for “individual registry key” and minor clarity.Grammar and consistency.
-1. **AllowedPaths / AllowedExactPaths exceptions**: Create exceptions using the GPO setting [Network access: Remotely accessible registry paths](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/network-access-remotely-accessible-registry-paths) to allow `Authenticated Users` to connect to the Remote Registry named pipe at specific registry paths. Effective access is still governed by permissions on individual registry key. +1. **AllowedPaths / AllowedExactPaths exceptions**: Create exceptions using the GPO setting [Network access: Remotely accessible registry paths](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/network-access-remotely-accessible-registry-paths) to allow `Authenticated Users` to connect to the Remote Registry named pipe at specific registry paths. Effective access is still governed by permissions on the individual registry key. -2. **Modify Remote Registry named pipe security descriptor**: Alternatively, modify the default security descriptor on the Remote Registry named pipe to grant explicit security principals read permissions to the entire registry. Effective access is still governed via permissions configured on individual registry key. +2. **Modify Remote Registry named pipe security descriptor**: Alternatively, modify the default security descriptor on the Remote Registry named pipe to grant explicit security principals read permissions to the entire registry. Effective access is still governed by permissions configured on the individual registry key.
101-106: Tighten “as long as” clauses for DC/CA registry notes.Shorten and clarify permission caveat.
-When the AD CS role is installed in Windows, the `HKLM\SYSTEM\CurrentControlSet\Services\CertSvc` registry path is automatically added to `HKLM\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg\AllowedPaths`. This creates a remote registry exception that allows `Authenticated Users` to query any keys and subkeys in this path, as long as they also are granted rights to read the key. Therefore, CA registry data is accessible to `Authenticated Users` by default when AD CS is installed. +When the AD CS role is installed in Windows, the `HKLM\SYSTEM\CurrentControlSet\Services\CertSvc` registry path is automatically added to `HKLM\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg\AllowedPaths`. This creates a remote registry exception that allows `Authenticated Users` to query keys and subkeys in this path, provided they also have read permission on the registry key DACL. Therefore, CA registry data is accessible to `Authenticated Users` by default when AD CS is installed. @@ -For domain controllers, you can create exceptions by adding the required DC registry paths to `HKLM\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg\AllowedExactPaths` using the GPO setting mentioned above. This will create an exception to the Remote Registry named pipe on the DC allowing `Authenticated Users` to read those exact key paths, as long as they also are granted permissions on the registry key DACL. +For domain controllers, you can create exceptions by adding the required DC registry paths to `HKLM\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg\AllowedExactPaths` using the GPO setting mentioned above. This creates a Remote Registry exception allowing `Authenticated Users` to read those exact key paths, provided they also have read permission on the registry key DACL.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
docs/collect-data/enterprise-collection/least-privileged-collection.mdx(3 hunks)docs/collect-data/enterprise-collection/privileged-collection.mdx(2 hunks)docs/collect-data/permissions.mdx(4 hunks)docs/install-data-collector/install-sharphound/tiered-collector-strategy.mdx(1 hunks)docs/opengraph/best-practices.mdx(2 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-08T15:57:55.743Z
Learnt from: StephenHinck
PR: SpecterOps/bloodhound-docs#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/install-data-collector/install-sharphound/tiered-collector-strategy.mdxdocs/collect-data/enterprise-collection/least-privileged-collection.mdxdocs/collect-data/permissions.mdx
🪛 LanguageTool
docs/install-data-collector/install-sharphound/tiered-collector-strategy.mdx
[grammar] ~30-~30: There might be a mistake here.
Context: ...east-privileged-collection) permissions. * Each service account is recommended to b...
(QB_NEW_EN)
docs/collect-data/enterprise-collection/least-privileged-collection.mdx
[grammar] ~26-~26: There might be a mistake here.
Context: ...Deleted Objects container locations are: * Domain NC Deleted Objects DistinguishedN...
(QB_NEW_EN)
[grammar] ~27-~27: There might be a mistake here.
Context: ...Deleted Objects DistinguishedName (DN): CN=Deleted Objects,<Domain DN> * Configuration NC Deleted Objects Disting...
(QB_NEW_EN)
docs/collect-data/permissions.mdx
[style] ~73-~73: ‘prior to’ might be wordy. Consider a shorter alternative.
Context: .../resources/edges/can-rdp) edge, whereas prior to SharpHound Common v3, BloodHound made a...
(EN_WORDINESS_PREMIUM_PRIOR_TO)
[grammar] ~93-~93: There might be a mistake here.
Context: ...s function. Least-Privileged Options: * On Windows Server operating systems, mem...
(QB_NEW_EN)
[grammar] ~134-~134: There might be a mistake here.
Context: ... restrictions are configured by default. * Security Contains the security des...
(QB_NEW_EN)
docs/opengraph/best-practices.mdx
[grammar] ~55-~55: There might be a mistake here.
Context: ...ation) 1. Cypher Queries "Starter Pack" - Cypher Queries to help new users explore...
(QB_NEW_EN)
[grammar] ~61-~61: There might be a mistake here.
Context: ...ith-api#use-a-jwt-bearer-token) instead of API key as this script will typically r...
(QB_NEW_EN)
[grammar] ~61-~61: There might be a mistake here.
Context: ...his script will typically run only once. - Do not hardcode credentials; use place h...
(QB_NEW_EN)
🔇 Additional comments (6)
docs/collect-data/permissions.mdx (6)
48-52: LGTM: AD Structure Data section.Method, defaults, and optional source are accurate and clearly linked.
65-69: LGTM: Local Group Membership collection details.Accurate method and default permissions; least‑privileged pointer is helpful.
77-81: LGTM: URA collection method and limitations.Accurate API reference and least‑privileged limitation statement.
111-115: LGTM: Certificate Services collection.Clear method/defaults and good cross‑references.
119-127: LGTM: DC Registry description and permissions.Accurate keys and ESC mapping; least‑privileged link provided.
144-146: No issues found — Authenticated Users default access claim is verified accurate.The statement is correct per Microsoft's MS-CSRA specification and AD CS documentation: Authenticated Users have Enroll permissions (including read/list) on Enterprise CA registry keys by default across supported Windows Server versions (2003 and later). The docs are accurate and require no changes.
docs/collect-data/enterprise-collection/least-privileged-collection.mdx
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
docs/collect-data/enterprise-collection/least-privileged-collection.mdx (1)
49-51: Fix API names and remove stray code‑fence (breaks MDX rendering).Use correct Windows API capitalization; drop the trailing ```; normalize “user rights” casing.
-Only `Administrators` can perform the `LSAOpenPolicy` and `LSAEnumerateAccountsWithUserRights` function calls necessary to collect User Rights Assignments directly from a remote host. There is no known way around this limitation. - -Currently, not collecting User Rights Assignments may cause inaccurate CanRDP edges. In the future, SharpHound may collect additional User Rights to identify more attack paths``` +Only `Administrators` can perform the `LsaOpenPolicy` and `LsaEnumerateAccountsWithUserRights` function calls necessary to collect user rights assignments directly from a remote host. There is no known way around this limitation. + +Currently, not collecting user rights assignments may cause inaccurate CanRDP edges. In the future, SharpHound may collect additional user rights to identify more attack paths.
🧹 Nitpick comments (13)
docs/collect-data/enterprise-collection/privileged-collection.mdx (2)
7-7: Tighten list phrasing for clarity.Use a colon and remove the extra article.
-Privileged collection allows BloodHound to analyze Attack Paths based on non-centralized configurations, the local groups, active sessions, registry, and user rights assignments configured on each domain-joined system in your environment. +Privileged collection allows BloodHound to analyze Attack Paths based on non‑centralized configurations: local groups, active sessions, registry, and user rights assignments configured on each domain‑joined system.
30-30: Use “least‑privileged” (adjectival form).Hyphenation consistency across docs.
-... for information on collecting this data via least-privilege access. +... for information on collecting this data via least‑privileged access.docs/collect-data/enterprise-collection/least-privileged-collection.mdx (7)
8-8: Minor grammar polish.-... With some additional configuration SharpHound can collect the local groups, active sessions, and registry keys ... +... With some additional configuration, SharpHound can collect local groups, active sessions, and registry keys ...
10-10: Fix verb form.-<Note>We also recommend to follow the article [SharpHound Enterprise Service Hardening](/manage-bloodhound/securing-bloodhound-and-collectors/sharphound-hardening).</Note> +<Note>We also recommend following the article [SharpHound Enterprise Service Hardening](/manage-bloodhound/securing-bloodhound-and-collectors/sharphound-hardening).</Note>
22-23: Avoid comma splice.Split into two sentences.
-SharpHound can read the content of the Deleted Objects container (also known as the AD Recycle Bin). Collecting deleted objects affects data retention behavior in BloodHound Enterprise, see [Active Directory Recycle Bin](/collect-data/enterprise-collection/data-retention#active-directory-recycle-bin) for details on how this impacts retention periods. +SharpHound can read the content of the Deleted Objects container (also known as the AD Recycle Bin). Collecting deleted objects affects data retention behavior in BloodHound Enterprise. See [Active Directory Recycle Bin](/collect-data/enterprise-collection/data-retention#active-directory-recycle-bin) for details on how this impacts retention periods.
37-38: Consistent code formatting for well‑known groups; tighten wording.-By default, on currently supported Windows operating systems, only `Administrators` on the device(s) being collected have this right on Windows clients and member servers. For compatibility purposes, Everyone is granted this right on domain controllers by default. +By default, on currently supported Windows operating systems, only `Administrators` on the device(s) being collected have this right on Windows clients and member servers. For compatibility purposes, `Everyone` is granted this right on domain controllers.
75-75: Code‑format group name.-... a service account that is a member of Domain Admins is strongly discouraged. +... a service account that is a member of `Domain Admins` is strongly discouraged.
105-105: Clarify DACL phrasing.-... allowing `Authenticated Users` to read those exact key paths, as long as they also are granted permissions on the registry key DACL. +... allowing `Authenticated Users` to read those exact key paths, provided they also have read permission on the key’s DACL.
109-109: Code‑format identifiers and group name.-... add these specific paths to AllowedExactPaths. This grants Authenticated Users remote read access, ... +... add these specific paths to `AllowedExactPaths`. This grants `Authenticated Users` remote read access, ...docs/collect-data/permissions.mdx (4)
52-52: Avoid comma splice.-... Enterprise, see [Active Directory Recycle Bin](/collect-data/enterprise-collection/data-retention#active-directory-recycle-bin) for details. ... +... Enterprise. See [Active Directory Recycle Bin](/collect-data/enterprise-collection/data-retention#active-directory-recycle-bin) for details. ...
67-67: Be precise about required permission.Use the group name and scope instead of “Administrator access.”
-**Default Permissions:** By default, computers beginning with Windows 10 version 1607 and Windows Server 2016 require Administrator access to perform Remote SAM operations. +**Default Permissions:** By default, computers beginning with Windows 10 version 1607 and Windows Server 2016 require membership in the local `Administrators` group to perform Remote SAM operations.
73-73: Code‑format group name; optional readability split.-... assuming that membership in the Remote Desktop Users group alone gives users the ability to RDP to a system. However, to successfully use Remote Desktop, a user needs **both** membership in the Remote Desktop Users group **and** the User Rights Assignment `SeRemoteInteractiveLogonRight`. +... assuming that membership in the `Remote Desktop Users` group alone gives users the ability to RDP to a system. However, to successfully use Remote Desktop, a user needs **both** membership in the `Remote Desktop Users` group **and** the user rights assignment `SeRemoteInteractiveLogonRight`.
138-139: Small grammar tweak.- SharpHound checks if the `EDITF_ATTRIBUTESUBJECTALTNAME2` flag is present, required to calculate ADCS ESC6 edges. + SharpHound checks if the `EDITF_ATTRIBUTESUBJECTALTNAME2` flag is present, which is required to calculate ADCS ESC6 edges.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
docs/collect-data/enterprise-collection/least-privileged-collection.mdx(3 hunks)docs/collect-data/enterprise-collection/privileged-collection.mdx(2 hunks)docs/collect-data/permissions.mdx(4 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-08T15:57:55.743Z
Learnt from: StephenHinck
PR: SpecterOps/bloodhound-docs#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/collect-data/enterprise-collection/least-privileged-collection.mdxdocs/collect-data/permissions.mdx
🪛 LanguageTool
docs/collect-data/enterprise-collection/least-privileged-collection.mdx
[grammar] ~26-~26: There might be a mistake here.
Context: ...Deleted Objects container locations are: * Domain NC Deleted Objects DistinguishedN...
(QB_NEW_EN)
[grammar] ~27-~27: There might be a mistake here.
Context: ...Deleted Objects DistinguishedName (DN): CN=Deleted Objects,<Domain DN> * Configuration NC Deleted Objects Disting...
(QB_NEW_EN)
[grammar] ~109-~109: There might be a mistake here.
Context: ...llowing the same method described above.
(QB_NEW_EN)
docs/collect-data/permissions.mdx
[grammar] ~93-~93: There might be a mistake here.
Context: ...s function. Least-Privileged Options: * On Windows Server operating systems, mem...
(QB_NEW_EN)
[grammar] ~134-~134: There might be a mistake here.
Context: ... restrictions are configured by default. * Security Contains the security des...
(QB_NEW_EN)
🔇 Additional comments (1)
docs/collect-data/permissions.mdx (1)
26-30: LGTM on scope and guidance.Clear rationale and correct cross‑references; the warning block reads well.
|
@jeff-matthews and @Scoubi I mashed your two recommendations together. I also added texts to nudge the user: 560a79d |
There was a problem hiding this 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
🧹 Nitpick comments (1)
docs/collect-data/enterprise-collection/least-privileged-collection.mdx (1)
109-109: Add backticks around the security principal.Elsewhere in the doc we format group names like
Authenticated Users; please do the same here for consistency.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
docs/collect-data/enterprise-collection/least-privileged-collection.mdx(3 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-08T15:57:55.743Z
Learnt from: StephenHinck
PR: SpecterOps/bloodhound-docs#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/collect-data/enterprise-collection/least-privileged-collection.mdx
🪛 LanguageTool
docs/collect-data/enterprise-collection/least-privileged-collection.mdx
[grammar] ~26-~26: There might be a mistake here.
Context: ...Deleted Objects container locations are: * Domain NC Deleted Objects DistinguishedN...
(QB_NEW_EN)
[grammar] ~27-~27: There might be a mistake here.
Context: ...Deleted Objects DistinguishedName (DN): CN=Deleted Objects,<Domain DN> * Configuration NC Deleted Objects Disting...
(QB_NEW_EN)
[grammar] ~109-~109: There might be a mistake here.
Context: ...llowing the same method described above.
(QB_NEW_EN)
docs/collect-data/enterprise-collection/least-privileged-collection.mdx
Outdated
Show resolved
Hide resolved
There was a problem hiding this 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
🧹 Nitpick comments (12)
docs/collect-data/enterprise-collection/privileged-collection.mdx (2)
7-7: Tighten list phrasing and punctuation.Use an em dash and remove the article before “local groups” for flow.
-Privileged collection allows BloodHound to analyze Attack Paths based on non-centralized configurations, the local groups, active sessions, registry, and user rights assignments configured on each domain-joined system in your environment. +Privileged collection allows BloodHound to analyze Attack Paths based on non‑centralized configurations—the local groups, active sessions, registry, and user rights assignments configured on each domain‑joined system in your environment.
22-22: Fix subject/grammar and group name (“Administrators”).Clarify the sentence and use the correct local group name.
-BloodHound Enterprise has identified that a computer at the bottom of the right Attack Path tree has `Authenticated Users` (all users and computers contained within the current domains, and all domains trusted by the current domain) added as a local `Administrator` to a system at the beginning of one Attack Path. +BloodHound Enterprise has identified that a system at the beginning of the right‑hand Attack Path has `Authenticated Users` (all users and computers in the current domain and any trusted domains) added to the local `Administrators` group.docs/collect-data/permissions.mdx (4)
26-27: Split the sentence; avoid comma splice.Minor readability tweak.
-SpecterOps recommends collecting all data types because it provides maximum visibility into your environment. Local Group Memberships and Sessions are especially important, as they reveal Attack Paths to individual systems based on non-centralized configurations, see [Why perform privileged collection in SharpHound](/collect-data/enterprise-collection/privileged-collection). +SpecterOps recommends collecting all data types because it provides maximum visibility into your environment. Local Group Memberships and Sessions are especially important, as they reveal Attack Paths to individual systems based on non‑centralized configurations. See [Why perform privileged collection in SharpHound](/collect-data/enterprise-collection/privileged-collection).
73-73: Consider splitting the long sentence.Improve readability by breaking after the first em dash.
-User Rights Assignments (URAs) in Windows define what privileges and capabilities security principals have on a system, independent of group membership. Collecting User Rights Assignments allows BloodHound to accurately determine the [CanRDP](/resources/edges/can-rdp) edge. Before SharpHound Common v3, BloodHound made assumptions based solely on group membership—assuming that membership in the `Remote Desktop Users` group alone gives users the ability to RDP to a system. However, to successfully use Remote Desktop, a user needs **both** membership in the `Remote Desktop Users` group **and** the User Rights Assignment `SeRemoteInteractiveLogonRight`. +User Rights Assignments (URAs) in Windows define what privileges and capabilities security principals have on a system, independent of group membership. Collecting URAs allows BloodHound to accurately determine the [CanRDP](/resources/edges/can-rdp) edge. Before SharpHound Common v3, BloodHound assumed that membership in the `Remote Desktop Users` group alone grants RDP access. However, to use Remote Desktop, a user needs **both** membership in `Remote Desktop Users` **and** the `SeRemoteInteractiveLogonRight` URA.
93-96: Punctuate list items for consistency.End bullets with periods.
-* On Windows Server operating systems, members of the local `Print Operators` group may also collect session data -* Windows desktop operating systems do not have a local `Print Operators` group and require alternate approaches +* On Windows Server operating systems, members of the local `Print Operators` group may also collect session data. +* Windows desktop operating systems do not have a local `Print Operators` group and require alternate approaches.
131-139: Minor clarity and style improvements.Split long sentences and use “vice versa” for precision.
-* **Security** - Contains the security descriptor for the enterprise CA i.e. the permissions for Enroll, ManageCA, and ManageCertificates edges against the enterprise CA. This security descriptor is also stored in the AD object of the enterprise CA. SharpHound collects both. The CA registry security descriptor holds the effective permissions. Changes in the CA registry security descriptor are replicated to the AD copy, however, not the other way. Therefore, collecting the CA registry security descriptor may reveal permissions of the enterprise CA that are not present if only collecting the AD object. +* **Security** + Contains the security descriptor for the enterprise CA—i.e., the permissions for Enroll, ManageCA, and ManageCertificates edges against the enterprise CA. This security descriptor is also stored in the AD object of the enterprise CA. SharpHound collects both. The CA registry security descriptor holds the effective permissions. Changes in the CA registry security descriptor are replicated to the AD copy; the reverse is not true. Therefore, collecting the CA registry security descriptor may reveal permissions that are not visible when only collecting the AD object.docs/collect-data/enterprise-collection/least-privileged-collection.mdx (6)
22-30: Minor punctuation/style.Use a semicolon before the reference for smoother flow.
-SharpHound can read the content of the Deleted Objects container (also known as the AD Recycle Bin). Collecting deleted objects affects data retention behavior in BloodHound Enterprise, see [Active Directory Recycle Bin](/collect-data/enterprise-collection/data-retention#active-directory-recycle-bin) for details on how this impacts retention periods. +SharpHound can read the content of the Deleted Objects container (also known as the AD Recycle Bin). Collecting deleted objects affects data retention behavior in BloodHound Enterprise; see [Active Directory Recycle Bin](/collect-data/enterprise-collection/data-retention#active-directory-recycle-bin) for details on how this impacts retention periods.
55-58: Tighten OS terminology.Prefer “Windows client operating systems” to “Windows desktop operating systems.”
-Unfortunately, this option does not exist on Windows desktop operating systems. +Unfortunately, this option does not exist on Windows client operating systems.
59-59: Fix “builtin” spelling.Use “built‑in”.
-...the local builtin [Print Operators]... +...the local built‑in [Print Operators]...
89-94: Good structure; small wording tweak.Make sentence parallel and modernize phrasing.
-By default, only `Administrators` may read the registry remotely. There are two methods to delegate remote registry access for least-privileged collection: +By default, only `Administrators` may read the registry remotely. There are two ways to delegate remote registry access for least‑privileged collection:
101-101: Smooth phrasing.Tighten clause.
-...as long as they also are granted rights to read the key. +...as long as they also have read permission on the key.
105-106: Clarify DACL phrasing.Simplify the trailing clause.
-...allowing `Authenticated Users` to read those exact key paths, as long as they also are granted permissions on the registry key DACL. +...allowing `Authenticated Users` to read those exact key paths, provided the registry key’s DACL grants read permission.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
docs/collect-data/enterprise-collection/least-privileged-collection.mdx(2 hunks)docs/collect-data/enterprise-collection/privileged-collection.mdx(2 hunks)docs/collect-data/permissions.mdx(4 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-08T15:57:55.743Z
Learnt from: StephenHinck
PR: SpecterOps/bloodhound-docs#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/collect-data/enterprise-collection/least-privileged-collection.mdxdocs/collect-data/permissions.mdx
🪛 LanguageTool
docs/collect-data/enterprise-collection/least-privileged-collection.mdx
[grammar] ~26-~26: There might be a mistake here.
Context: ...Deleted Objects container locations are: * Domain NC Deleted Objects DistinguishedN...
(QB_NEW_EN)
[grammar] ~27-~27: There might be a mistake here.
Context: ...Deleted Objects DistinguishedName (DN): CN=Deleted Objects,<Domain DN> * Configuration NC Deleted Objects Disting...
(QB_NEW_EN)
[grammar] ~59-~59: Ensure spelling is correct
Context: ...rvice account can be added to the local builtin [Print Operators](https://learn.microso...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
[grammar] ~59-~59: Ensure spelling is correct
Context: ...ld not be used as print servers and the builtin Print Operators group for the domain sh...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
docs/collect-data/permissions.mdx
[grammar] ~93-~93: There might be a mistake here.
Context: ...s function. Least-Privileged Options: * On Windows Server operating systems, mem...
(QB_NEW_EN)
[grammar] ~134-~134: There might be a mistake here.
Context: ... restrictions are configured by default. * Security Contains the security des...
(QB_NEW_EN)
🔇 Additional comments (10)
docs/collect-data/enterprise-collection/privileged-collection.mdx (1)
30-30: Links and terminology look good.Absolute paths and “Least‑Privileged” hyphenation are consistent.
docs/collect-data/permissions.mdx (5)
29-29: Good addition.The hardening link and clarification about not requiring Domain Admin are helpful.
48-53: LGTM.Accurate method, defaults, and Deleted Objects container guidance with cross‑refs.
65-69: LGTM.Remote SAM method/defaults and least‑privileged GPO reference are correct.
119-127: LGTM.DC registry paths and permissions look accurate; least‑privileged cross‑ref is clear.
146-146: LGTM.Default access note and cross‑reference align with the least‑privileged explanation.
docs/collect-data/enterprise-collection/least-privileged-collection.mdx (4)
8-11: Clear intro and hardening note.Good framing and link to hardening guidance.
73-73: LGTM.Good guidance on Restricted Groups vs GPP.
75-76: LGTM.Clear recommendation against using Domain Admins.
109-109: LGTM.Clear guidance on enabling least‑privileged NTLM relay registry collection.
| SharpHound collects local group membership via [Remote SAM Enumeration](https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-access-restrict-clients-allowed-to-make-remote-sam-calls). | ||
|
|
||
| By default, on currently supported Windows operating systems, only Administrators on the device(s) being collected have this right on Windows clients and member servers. For compatibility purposes, Everyone is granted this right on domain controllers by default. | ||
| By default, on currently supported Windows operating systems, only `Administrators` on the device(s) being collected have this right on Windows clients and member servers. For compatibility purposes, `Everyone` is granted this right on domain controllers by default. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
Verify SAMR default on domain controllers (“Everyone” vs “Authenticated Users”).
Claiming Everyone has this right on DCs may overstate access. Many sources indicate DCs allow Authenticated Users by default for SAMR, not Everyone.
🌐 Web query:
What is the default value/behavior of “Network access: Restrict clients allowed to make remote calls to SAM” on Windows domain controllers? Specifically, are “Everyone” or “Authenticated Users” allowed by default to perform remote SAMR enumeration on DCs?
💡 Result:
Short answer: That security option (Network access: Restrict clients allowed to make remote calls to SAM) does not apply to Domain Controllers by default. Domain controllers use the built‑in SAM/LSA ACLs and other DC‑specific groups (e.g. Pre‑Windows‑2000 Compatible Access) for SAMR access, so the Group Policy setting is effectively ignored on DCs. In practice anonymous/Everyone access is blocked by the anonymous‑enumeration restrictions and SAM access is limited to authenticated principals (not Everyone) unless an admin has explicitly weakened DC ACLs. (learn.microsoft.com)
Citations:
Correct DC SAMR access description (“Everyone” → authenticated principals)
docs/collect-data/enterprise-collection/least-privileged-collection.mdx:37
Replace “For compatibility purposes, Everyone is granted this right on domain controllers by default.” with a note that DCs ignore the GPO setting and enforce SAMR via built-in SAM/LSA ACLs, limiting access to authenticated principals (e.g. Authenticated Users, Pre-Windows-2000 Compatible Access).
🤖 Prompt for AI Agents
In docs/collect-data/enterprise-collection/least-privileged-collection.mdx
around line 37, replace the incorrect sentence that says "For compatibility
purposes, `Everyone` is granted this right on domain controllers by default."
with a brief note stating that domain controllers ignore the GPO setting and
instead enforce SAMR access via built-in SAM/LSA ACLs that limit access to
authenticated principals (for example "Authenticated Users" and
"Pre-Windows-2000 Compatible Access"); ensure the wording is concise and factual
and mention that DCs use these built-in ACLs rather than granting access to
Everyone.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@JimSycurity is this coderabbit being wrong on your research?
There was a problem hiding this comment.
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!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure there's anything wrong with what its saying. It's a nitpick comment being nitpicky. In trying to keep things brief I am referenced the Everyone special identity group, which includes Authenticated Users and Guests in current OSes. Not the collective "Everyone" as in "Anyone". Everyone only included Anonymous access in Server 2000.
DCs do ignore the GPO setting as it states. It's wording the same thing differently and with more words.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks great - fixed a small CR nit for grammar and merging!
Improve SharpHound permissions documentation structure and cross-referencing
Restructured the SharpHound data collection permissions documentation to better connect the high-level permissions overview with detailed least-privileged collection configurations.
Key changes to permissions.mdx:
Key changes to least-privileged-collection.mdx:
Key changes to privileged-collection.mdx:
The documentation now provides a clearer division:
Fixed some 404 links that I found across the docs.
This touches the same file (permissions.mdx) as #58 by @JonasBK which is in draft, so it will end up conflicting. I suggest merging this PR first, as it's a much larger change to the docs, once then handling the small conflict once the other PR is ready to be merged.
Summary by CodeRabbit