Skip to content

feat: add ntlm hash support for laps extraction and gmsa exploit detection#277

Merged
l50 merged 10 commits into
feat/more-attack-covfrom
feat/dreadgoad-tier1-fixes
May 12, 2026
Merged

feat: add ntlm hash support for laps extraction and gmsa exploit detection#277
l50 merged 10 commits into
feat/more-attack-covfrom
feat/dreadgoad-tier1-fixes

Conversation

@l50
Copy link
Copy Markdown
Contributor

@l50 l50 commented May 12, 2026

Key Changes:

  • Enabled LAPS extraction via NTLM hash (pass-the-hash) when plaintext credentials are unavailable
  • Improved gMSA (Group Managed Service Account) detection and automatic exploit marking from secretsdump results
  • Refined trust escalation logic to distinguish and track intra-forest and inter-forest paths
  • Added logic to avoid futile unconstrained delegation attempts when the host is the domain controller

Added:

  • LAPS extraction via NTLM hash - LAPS automation now generates work items for principals where only an NTLM hash is available, supporting pass-the-hash sweeps
  • nt_hash field to LapsWork struct and downstream dispatch logic, enabling netexec to use -H for hash-based authentication
  • Heuristic function (is_gmsa_principal) to identify gMSA accounts by SAM name and trailing $
  • Automated gMSA exploit token emission when gMSA hashes are captured incidentally via secretsdump, even without explicit enumeration
  • Unit tests for gMSA principal detection covering various edge cases

Changed:

  • Trust escalation processing now distinguishes between intra-forest (child-to-parent) and inter-forest escalations, using different vulnerability IDs and types to improve scoreboard tracking and MITRE mapping
  • Unconstrained delegation exploitation logic now skips attempts where the target host is the same as the domain controller, preventing known-failure scenarios and redundant work

Removed:

  • Restriction on ACL discovery for dominated domains, allowing read-only enumeration to surface additional primitives even after domain takeover

l50 added 5 commits May 12, 2026 14:10
**Changed:**

- Allow ACL discovery to run on dominated domains by removing the early continue condition, enabling enumeration of writeable ACEs for exploitation chains such as acl_abuse, rbcd, shadow_credentials, and gpo_abuse
- Updated comments to clarify that ACL discovery is safe and required on dominated domains, while destructive actions remain gated separately
**Added:**

- Support for domain-wide LAPS sweep using NTLM hashes when plaintext passwords are unavailable, enabling pass-the-hash extraction in `auto_laps_extraction`
- `nt_hash` field to the LapsWork struct to track hash material for use in LAPS extraction
- Passing `nt_hash` in the dispatch payload for LAPS extraction, enabling downstream use in `laps_dump`
- Validation in `laps_dump` to require either a password or an NTLM hash as credential input

**Changed:**

- Updated LAPS extraction workflow to handle both plaintext passwords and NTLM hashes, ensuring deduplication across credential types
- Modified credential argument construction in `laps_dump` to support NTLM hash authentication, passing through the hash when present
…ndling

**Changed:**

- Implemented separate handling for intra-forest (child-to-parent) and inter-forest trust escalations in trust automation logic, including distinct vuln_id, vuln_type, and note descriptions
- Updated vulnerability reporting to reflect new escalation distinctions and improve MITRE primitive mapping
…retsdump hashes

**Added:**

- Introduced `is_gmsa_principal` function to identify Group Managed Service Account principals based on naming heuristics
- Emitted `gmsa_*` exploit tokens when secretsdump returns gMSA hashes, ensuring incidental gMSA hash captures are credited
- Added unit tests for `is_gmsa_principal` covering matching, rejection of non-gMSA machine accounts, and rejection of regular users

**Changed:**

- Updated hash discovery logic to use `is_gmsa_principal` for marking gMSA hashes as exploited, improving detection and tracking of exploited gMSA accounts
…omain controller

**Added:**

- Added logic to detect and skip attempts to coerce authentication from a DC to itself during unconstrained delegation exploitation, preventing failed exploitation attempts and unnecessary throttling
- Added debug logging to indicate when the scenario is subsumed by dc_secretsdump or deferred due to lack of a viable self-coerce path
@l50 l50 changed the base branch from main to feat/more-attack-cov May 12, 2026 20:26
@dreadnode-renovate-bot dreadnode-renovate-bot Bot added area/docs Changes made to project documentation area/templates Changes made to warpgate template configurations labels May 12, 2026
@l50 l50 changed the title feat: orchestrate and validate end-to-end red-team automation, state hygiene, and reporting feat: add ntlm hash support for laps extraction and gmsa exploit detection May 12, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented May 12, 2026

Codecov Report

❌ Patch coverage is 96.67063% with 28 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (feat/more-attack-cov@0dd50c4). Learn more about missing BASE report.

Files with missing lines Patch % Lines
...s-cli/src/orchestrator/automation/unconstrained.rs 90.62% 9 Missing ⚠️
ares-cli/src/orchestrator/result_processing/mod.rs 43.75% 9 Missing ⚠️
ares-cli/src/orchestrator/automation/trust.rs 95.31% 6 Missing ⚠️
ares-cli/src/orchestrator/automation/laps.rs 99.28% 4 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@                   Coverage Diff                   @@
##             feat/more-attack-cov     #277   +/-   ##
=======================================================
  Coverage                        ?   76.31%           
=======================================================
  Files                           ?      432           
  Lines                           ?   112928           
  Branches                        ?        0           
=======================================================
  Hits                            ?    86177           
  Misses                          ?    26751           
  Partials                        ?        0           
Files with missing lines Coverage Δ
...s-cli/src/orchestrator/automation/acl_discovery.rs 81.94% <ø> (ø)
...es-cli/src/orchestrator/result_processing/tests.rs 100.00% <100.00%> (ø)
ares-tools/src/credential_access/misc.rs 91.30% <100.00%> (ø)
ares-cli/src/orchestrator/automation/laps.rs 92.79% <99.28%> (ø)
ares-cli/src/orchestrator/automation/trust.rs 26.31% <95.31%> (ø)
...s-cli/src/orchestrator/automation/unconstrained.rs 64.68% <90.62%> (ø)
ares-cli/src/orchestrator/result_processing/mod.rs 14.92% <43.75%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

l50 added 5 commits May 12, 2026 15:02
**Changed:**

- Refactored chaining of vectors in domain validation to remove redundant into_iter calls, improving code clarity and consistency in tool_dispatcher/domain_validator.rs
**Added:**

- Added `collect_laps_hash_sweep_work` helper to encapsulate LAPS hash sweep filtering and work item construction, with full coverage unit tests - `laps.rs`
- Added `build_laps_payload` helper to build the LAPS dispatch payload, with unit tests for optional field handling - `laps.rs`
- Added `classify_trust_escalation` helper for mapping trust escalation types to tokens and details, with thorough unit tests - `trust.rs`
- Added `skip_self_coerce_loop` helper to encapsulate self-coerce skip logic for unconstrained delegation, with detailed unit tests - `unconstrained.rs`
- Added `gmsa_exploit_token` helper to unify gMSA scoreboard token construction, with tests to ensure convergence across discovery paths - `result_processing/mod.rs`
- Added test to validate `laps_dump` requires either password or nt_hash for authentication - `ares-tools/src/credential_access/misc.rs`

**Changed:**

- Refactored LAPS NTLM hash sweep logic in `auto_laps_extraction` to use new `collect_laps_hash_sweep_work` helper for deduplication and testability - `laps.rs`
- Refactored LAPS payload construction to use `build_laps_payload` for consistency and test coverage - `laps.rs`
- Updated trust follow automation to use `classify_trust_escalation`, unifying scoreboard tokenization and note logic - `trust.rs`
- Replaced inline self-coerce skip logic with `skip_self_coerce_loop` for improved clarity and testability - `unconstrained.rs`
- Replaced inline gMSA exploit token construction with the new `gmsa_exploit_token` helper to ensure deduplication - `result_processing/mod.rs`
**Added:**

- Introduced `collect_laps_vuln_work` and `collect_laps_sweep_work` functions to encapsulate LAPS work item logic, enabling independent unit testing of LAPS extraction paths
- Added comprehensive unit tests for `collect_laps_vuln_work` and `collect_laps_sweep_work`, covering credential filtering, deduplication, and field extraction
- Introduced `build_trust_escalation_vuln` function for constructing trust escalation vulnerabilities, with associated unit tests verifying all details fields and escalation scenarios

**Changed:**

- Refactored `auto_laps_extraction` to use the new `collect_laps_vuln_work` and `collect_laps_sweep_work` helpers, reducing inline logic duplication and clarifying extraction paths
- Refactored `auto_trust_follow` to use the new `build_trust_escalation_vuln` for vulnerability construction, eliminating repeated details assembly and improving testability

**Removed:**

- Removed inlined LAPS and trust escalation work item construction code from main automation loops, delegating logic to testable helper functions
**Changed:**

- Enable GitHub Actions workflows to trigger on pull requests to feat/more-attack-cov branch across all workflow YAML files for improved CI coverage during feature development
…dreadgoad-tier1-fixes

# Conflicts:
#	ares-cli/src/orchestrator/result_processing/tests.rs
@l50 l50 merged commit 374fcaa into feat/more-attack-cov May 12, 2026
11 checks passed
@l50 l50 deleted the feat/dreadgoad-tier1-fixes branch May 12, 2026 22:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/docs Changes made to project documentation area/templates Changes made to warpgate template configurations

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant