Skip to content

Commit 67b92fc

Browse files
Maffoochclaude
andcommitted
docs(dedup): document instance-wide mutual-candidate + config-persistence behavior
Two behaviors surfaced in review of the Pro dedup work: - Two different tools set to the same instance-wide algorithm (Global Component or Global Vulnerability ID) share a constant grouping hash and become mutual deduplication candidates (F23) — document as intended cross-tool behavior, and add the missing Global Vulnerability ID algorithm entry. - A tool's saved Deduplication Settings stay in effect regardless of feature-flag state; disabling a flag does not retroactively revert dedup (F20). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent d75300d commit 67b92fc

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

docs/content/triage_findings/finding_deduplication/PRO__deduplication_tuning.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,36 @@ Attempts to use the tool's unique ID first, then falls back to the hash code if
5050
#### Global Component
5151
Matches findings by component name and version across **all Products** in the instance, rather than within a single Product or Engagement. Intended for SCA tools where the same vulnerable dependency appears in many Products. This algorithm is off by default and must be enabled by DefectDojo Support. See [Global Component Deduplication](/triage_findings/finding_deduplication/pro__global_component_deduplication/) for details.
5252

53+
#### Global Vulnerability ID
54+
Matches findings by their **vulnerability IDs** (CVE, GHSA, …) across **all Products** in the instance, rather than within a single Product or Engagement. Intended for tools that report the same CVE across many Products. Off by default and enabled by DefectDojo Support.
55+
56+
> **Two tools on the same instance-wide algorithm become mutual deduplication candidates.** When two *different* tools are both configured with an instance-wide algorithm (Global Component, or Global Vulnerability ID), their findings share a constant grouping hash, so a finding from either tool is considered for deduplication against the other on that shared dimension (component, or vulnerability ID). This is the intended cross-tool behavior — enable it only when you want those tools to dedupe together.
57+
58+
### Set-based Hash Code Fields (Vulnerability IDs and CWEs)
59+
60+
Two finding attributes hold a *set* of values rather than a single value: vulnerability IDs (CVE, GHSA, …) and CWEs. When using the **Hash Code** algorithm (Same Tool or Cross Tool), you can add the following fields to **Hash Code Fields** to control how those sets are compared:
61+
62+
| Field | Findings are duplicates when… |
63+
|-------|-------------------------------|
64+
| `vulnerability_ids` | they have the **exact same set** of vulnerability IDs |
65+
| `vulnerability_ids_partial` | they share **at least one** vulnerability ID |
66+
| `vulnerability_ids_subset` | one finding's vulnerability IDs are a **subset** of the other's |
67+
| `cwes` | they have the **exact same set** of CWEs |
68+
| `cwes_partial` | they share **at least one** CWE |
69+
| `cwes_subset` | one finding's CWEs are a **subset** of the other's |
70+
71+
The `_partial` and `_subset` fields are compared per finding pair rather than folded into the hash: the remaining Hash Code Fields group the candidate findings, and the set comparison then narrows that group. (Exact matching — `vulnerability_ids` and `cwes` — is folded into the hash directly.)
72+
73+
**Empty values.** If a finding has no vulnerability IDs (or no CWEs) for the configured matcher:
74+
75+
- If Hash Code Fields also include an ordinary field (for example `title`), that field carries the identity — the set matcher is skipped for the pair and the findings can still match on the rest of the hash.
76+
- If a set matcher is the **only** field, a finding with no values does not match anything: with nothing else to identify it, an empty set is not treated as matching every other finding.
77+
78+
**Configuration rules** (enforced when you save settings):
79+
80+
- A vulnerability IDs field (`vulnerability_ids`, `vulnerability_ids_partial`, or `vulnerability_ids_subset`) may be used on its own — a CVE or GHSA identifies a specific vulnerability instance.
81+
- CWE fields (`cwes`, `cwes_partial`, `cwes_subset`) may **not** be the only criteria. A CWE is a weakness *class*, not a specific instance, so matching on CWE alone would merge unrelated findings. Pair a CWE matcher with an identifying field such as `title` or `file_path`.
82+
5383
## Cross Tool Deduplication
5484

5585
Cross Tool Deduplication is disabled by default, as deduplication between different security tools requires careful configuration due to variations in how tools report the same vulnerabilities.
@@ -102,6 +132,8 @@ If you make several configuration changes in quick succession, each one queues i
102132

103133
> **Note for self-hosted Pro:** The background job runs in the Celery worker pool. If you have starved or backlogged workers, the re-hash can take longer than expected — check worker health if results don't appear within the timeframe you would expect for your instance size.
104134
135+
> **Feature flags do not gate an existing configuration.** A tool's saved Deduplication Settings stay in effect for as long as they are configured; turning off a related feature flag does **not** retroactively revert that tool to default deduplication. To change or stop a tool's deduplication behavior, update its Deduplication Settings directly (which also queues the background re-hash described above).
136+
105137
## Deduplication Best Practices
106138

107139
For optimal results with Deduplication Tuning:

0 commit comments

Comments
 (0)