Skip to content

Commit e28f39e

Browse files
authored
Merge pull request #13040 from DefectDojo/release/2.49.3
Release: Merge release into master from: release/2.49.3
2 parents baf1165 + a3ec959 commit e28f39e

File tree

17 files changed

+219
-167
lines changed

17 files changed

+219
-167
lines changed

components/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "defectdojo",
3-
"version": "2.49.2",
3+
"version": "2.49.3",
44
"license" : "BSD-3-Clause",
55
"private": true,
66
"dependencies": {
84.5 KB
Loading
467 KB
Loading
114 KB
Loading
-45.3 KB
Loading

docs/content/en/working_with_findings/finding_priority.md

Lines changed: 96 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,70 +4,92 @@ description: "How DefectDojo ranks your Findings"
44
weight: 1
55
---
66

7-
Additional Finding filters are available in DefectDojo Pro to more easily triage, filter and prioritize Findings.
7+
![image](images/pro_finding_priority.png)
88

9-
![image](images/pro_risk_example.png)
9+
Effective risk-based vulnerability management requires an approach that considers
10+
both business context and technical exploitability. Using DefectDojo Pro’s Priority and Risk feature, users can automatically sort Findings into a meaningful context, ensuring
11+
high-impact vulnerabilities can be addressed first.
1012

11-
* **Priority** sorts Findings based on the context and importance of the Product they are stored in.
12-
* **Risk** considers the Product's context, with a greater emphasis on the exploitability of a Finding.
13+
**Priority** is a calculated numerical rank applied to all Findings in your DefectDojo
14+
instance. It allows you to quickly understand vulnerabilities in context, especially within
15+
large organizations that are overseeing security needs for many Findings and/or
16+
Products.
1317

14-
Learn more about Priority and Risk with DefectDojo Inc's May 2025 Office Hours:
15-
<iframe width="560" height="315" src="https://www.youtube.com/embed/4SN0BWWsVm4?si=VYUzEGNeijjhoD22" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
18+
**Risk** is a 4-level ranking system which factors in a Finding’s exploitability to a greater
19+
degree. This is meant as a less granular, more ’executive-level’ version of Priority.
1620

17-
## Finding Priority
21+
![image](images/pro_risk_example.png)
22+
23+
Priority and Risk values can be used with other filters to compare Findings in any context, such as:
1824

19-
In DefectDojo Pro, Priority is a calculated field on Findings that can be used to sort or filter Findings according to Product-level metadata:
25+
* within a single Product, Engagement or Test
26+
* globally in all DefectDojo Products
27+
* between a few specific Products
2028

21-
- Product's Business Criticality
22-
- Whether the Product has an External Audience
23-
- Whether the Product is Internet Accessible
24-
- The Product's estimated revenue or user records count
29+
Applying Finding Priority and Risk helps your team respond to the most relevant
30+
vulnerabilities in your organization, and also provides a framework to assist in
31+
compliance with regulatory standards.
2532

26-
DefectDojo Pro's Finding Priority assigns a numerical rank to each Finding according to this metadata, to provide users with a stronger context on triage and remediation.
2733

28-
![image](images/pro_finding_priority.png)
34+
Learn more about Priority and Risk with DefectDojo Inc's May 2025 Office Hours:
35+
<iframe width="560" height="315" src="https://www.youtube.com/embed/4SN0BWWsVm4?si=VYUzEGNeijjhoD22" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
2936

30-
The range of Priority values is from 0 to 1150. The higher the number, the more urgency the Finding is to triage or remediate.
3137

32-
Priority numbers can be used with other filters to compare Findings in any context, such as:
38+
## How Priority & Risk are calculated
39+
The range of Priority values is from 0 to 1150. The higher the number, the more urgency
40+
the Finding is to triage or remediate.
3341

34-
* within a single Product, Engagement or Test
35-
* globally in all DefectDojo Products
36-
* between a few specific Products
42+
Similar to Severity, Risk is scored from Low -> Medium -> Needs Action -> Urgent. **Risk** considers Priority fields and may be different from a tool's reported Severity as a result.
3743

38-
## How Priority is calculated
44+
![image](images/priority-overview.png)
3945

40-
Every Active finding will have a Priority calculated. Inactive or Duplicate Findings will not.
46+
## Priority Fields: Product-Level
4147

42-
Priority is set based on the following factors:
48+
Each Product in DefectDojo has metadata that tracks business criticality and risk
49+
factors. This metadata is used to help calculate Priority and Risk for any associated
50+
Findings.
4351

44-
#### Product-Level
52+
All of these metadata fields can be set on the **Edit Product** form for a given Product.
4553

46-
- The assigned Criticality for the Product (if defined)
47-
- The estimated User Records for the Product (if defined)
48-
- The estimated Revenue for the Product (if defined)
49-
- If the Product has External Audience defined
50-
- If the Product has Internet Accessible defined.
54+
![image](images/priority_edit_product.png)
5155

52-
All of these metadata fields can be set on the Edit Product form for a given Product.
56+
* **Criticality** can be set to any value of None, Very Low, Low, Medium, High, or Very
57+
High. Criticality is a subjective field, so when assigning this field, consider how the
58+
Product compares to other Products in your organization.
59+
* **User Records** is a numerical estimation of user records in a database (or a system
60+
that can access that database).
61+
* **Revenue** is a numerical estimation of annual revenue for the Product. It is not
62+
possible to set a currency type in DefectDojo, so make sure that all of your Revenue
63+
estimations have the same currency denomination. (“50000” could mean $50,000
64+
US Dollars or ¥50,000 Japanese Yen - the denomination does not matter as long as
65+
all of your Products have revenue calculated in the same currency).
66+
* **External Audience** is a true/false value - set this to True if this Product can be
67+
accessed by an external audience. For example, customers, users, or anyone
68+
outside of your organization.
69+
* **Internet Accessible** is a true/false value. If this Product can connect to the open
70+
internet, you should set this value to True.
5371

54-
#### Finding-Level
72+
Priority is a ‘relative’ calculation, which is meant to compare different Products within
73+
your DefectDojo instance. It is ultimately up to your organization to decide how these
74+
filters are set. These values should be as accurate as possible, but the primary goal is
75+
to highlight your key Products so that you can prioritize vulnerabilities according to your
76+
organization’s policies, so these fields do not necessarily need to be set perfectly.
5577

56-
- Whether or not the Finding has an [EPSS score](/en/working_with_findings/intro_to_findings/#monitor-current-vulnerabilities-using-cves-and-epss-scores-pro-feature), this is automatically kept up to date for Pro customers
57-
- How many Endpoints in the Product are affected by this Finding
58-
- Whether or not a Finding is Under Review
78+
## Priority Fields: Finding-Level
5979

60-
If no relevant metadata at the Finding or Product level is set, the Priority level will follow the Severity for a given Finding.
80+
Findings within a Product can have additional metadata which can further adjust the Finding’s Priority and Risk level:
6181

62-
- Critical = 90
63-
- High = 70
64-
- Medium = 50
65-
- Low = 30
66-
- Info = 10
82+
* Whether or not the Finding has an EPSS score, this is automatically added to Findings and kept up to date for Pro users
83+
* How many Endpoints in the Product are affected by this Finding
84+
* Whether or not a Finding is Under Review
85+
* Whether the Finding is in the KEV (Known Exploited Vulnerabilities) database, which is checked by DefectDojo on a regular basis
86+
* The tool-reported Severity of a Finding (Info, Low, Medium, High, Critical)
6787

68-
Currently, Priority calculation and the underlying formula cannot be adjusted. These numbers are meant as a reference only - your team's actual priority for remediation may vary from the DefectDojo calculation.
88+
Currently, Priority calculation and the underlying formula cannot be adjusted. These
89+
numbers are meant as a reference only - your team’s actual priority for remediation
90+
may vary from the DefectDojo calculation.
6991

70-
## Finding Risk
92+
## Finding Risk Calculation
7193

7294
![image](images/risk_table.png)
7395

@@ -80,3 +102,36 @@ The four assignable Risk levels are:
80102
A Finding's EPSS / exploitability is much more emphasized in the Risk calculation. As a result, a Finding can have both a high priority and a low risk value.
81103

82104
As with Finding Priority, the Risk calculation cannot currently be adjusted.
105+
106+
## Priority Insights Dashboard
107+
108+
Users can take an executive-level view of Priority and Risk in their environment using
109+
the Priority Insights Dashboard (Metrics > Priority Insights in the sidebar)
110+
111+
![image](images/priority_dashboard.png)
112+
113+
This dashboard can be filtered to include specific Products or date ranges. As with
114+
other Pro dashboards, this dashboard can be exported from DefectDojo as a PDF to
115+
quickly produce a report.
116+
117+
## Setting Priority & Risk for Regulatory Compliance
118+
119+
This is a non-exhaustive list of regulatory standards that specifically require
120+
vulnerability prioritization methods:
121+
122+
* [SOX (Sarbanes-Oxley Act](https://www.sarbanes-oxley-act.com/)) compliance requires revenue-based prioritization for
123+
systems impacting financial data. In DefectDojo, a system’s revenue can be entered
124+
at the Product level.
125+
* [PCI DSS](https://www.pcisecuritystandards.org/standards/pci-dss/) compliance requires prioritization based on risk ratings and criticality to
126+
cardholder data environments. Business Criticality and External Audience can be
127+
set at the Product level, while DefectDojo’s Finding-level EPSS sync supports PCI’s
128+
risk-based approach.
129+
* [NIST SP 800-40](https://csrc.nist.gov/pubs/sp/800/40/r4/final) is a preventative maintenance guide which specifically calls for
130+
vulnerability prioritization based on business impact, product criticality and
131+
internet accessibility factors. All of these can be set at DefectDojo’s Product level.
132+
* [ISO 27001/27002](https://www.iso.org/standard/27001) Control A.12.6.1 compliance requires management of technical
133+
vulnerabilities with Priority based on risk assessment.
134+
* [GDPR Article 32](https://gdpr-info.eu/art-32-gdpr/) requires risk-based security measures - user records and external
135+
audience flags at the Product level can help prioritize systems in your organization
136+
that process personal data.
137+
* [FISMA/FedRAMP](https://help.fedramp.gov/hc/en-us) compliance require continuous monitoring and risk-based vulnerability remediation.

docs/package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dojo/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
# Django starts so that shared_task will use this app.
55
from .celery import app as celery_app # noqa: F401
66

7-
__version__ = "2.49.2"
7+
__version__ = "2.49.3"
88
__url__ = "https://github.com/DefectDojo/django-DefectDojo"
99
__docs__ = "https://documentation.defectdojo.com"

dojo/settings/settings.dist.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -815,8 +815,8 @@ def generate_url(scheme, double_slashes, user, password, host, port, path, param
815815
REST_FRAMEWORK["DEFAULT_AUTHENTICATION_CLASSES"] += ("rest_framework.authentication.TokenAuthentication",)
816816

817817
SPECTACULAR_SETTINGS = {
818-
"TITLE": "Defect Dojo API v2",
819-
"DESCRIPTION": "Defect Dojo - Open Source vulnerability Management made easy. Prefetch related parameters/responses not yet in the schema.",
818+
"TITLE": "DefectDojo API v2",
819+
"DESCRIPTION": "DefectDojo - Open Source vulnerability Management made easy. Prefetch related parameters/responses not yet in the schema.",
820820
"VERSION": __version__,
821821
"SCHEMA_PATH_PREFIX": "/api/v2",
822822
# OTHER SETTINGS

dojo/tools/blackduck/importer.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,22 @@ def parse_findings(self, report: Path) -> Iterable[BlackduckFinding]:
1919

2020
class BlackduckImporter(Importer):
2121
def parse_findings(self, report: Path) -> Iterable[BlackduckFinding]:
22-
if not issubclass(type(report), Path):
23-
report = Path(report.temporary_file_path())
24-
25-
if zipfile.is_zipfile(str(report)):
22+
if zipfile.is_zipfile(report):
23+
report.seek(0) # rewind after the check
2624
return self._process_zipfile(report)
25+
report.seek(0) # rewind after the check
2726
return self._process_csvfile(report)
2827

2928
def _process_csvfile(self, report: Path):
3029
"""
3130
If passed in a regular security.csv, process it.
3231
No file information then.
3332
"""
34-
security_issues = {}
35-
with report.open(encoding="utf-8") as f:
36-
security_issues = self.__partition_by_key(f)
33+
content = report.read()
34+
if isinstance(content, bytes):
35+
content = content.decode("utf-8")
3736

37+
security_issues = self.__partition_by_key(io.StringIO(content))
3838
project_ids = set(security_issues.keys())
3939
return self._process_project_findings(
4040
project_ids, security_issues, None,
@@ -48,7 +48,7 @@ def _process_zipfile(self, report):
4848
files = {}
4949
security_issues = {}
5050

51-
with zipfile.ZipFile(str(report)) as zipf:
51+
with zipfile.ZipFile(report) as zipf:
5252
for full_file_name in zipf.namelist():
5353
file_name = full_file_name.split("/")[-1]
5454
# Backwards compatibility, newer versions of Blackduck have a source file rather

0 commit comments

Comments
 (0)