Skip to content

Commit 6dae387

Browse files
Merge remote-tracking branch 'upstream/dev' into perf4-chord-grade
2 parents dba9a40 + 8a47310 commit 6dae387

39 files changed

Lines changed: 1116 additions & 133 deletions

.github/workflows/gh-pages.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ jobs:
2121
- name: Setup Node
2222
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
2323
with:
24-
node-version: '22.19.0'
24+
node-version: '22.20.0'
2525

2626
- name: Cache dependencies
27-
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
27+
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
2828
with:
2929
path: ~/.npm
3030
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}

.github/workflows/validate_docs_build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ jobs:
1818
- name: Setup Node
1919
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
2020
with:
21-
node-version: '22.19.0'
21+
node-version: '22.20.0'
2222

2323
- name: Cache dependencies
24-
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
24+
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
2525
with:
2626
path: ~/.npm
2727
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ services:
120120
source: ./docker/extra_settings
121121
target: /app/docker/extra_settings
122122
postgres:
123-
image: postgres:17.6-alpine@sha256:d5f196a551b5cef1c70853c6dd588f456d16ca4ea733e3f31c75bc1ae2f65f3f
123+
image: postgres:17.6-alpine@sha256:855021a5b10954343902a8c22a15f8464233126c1d12d9ad84d4a14c5af07a80
124124
environment:
125125
POSTGRES_DB: ${DD_DATABASE_NAME:-defectdojo}
126126
POSTGRES_USER: ${DD_DATABASE_USER:-defectdojo}

docs/content/en/connecting_your_tools/parsers/file/openvas.md

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,39 @@
22
title: "OpenVAS Parser"
33
toc_hide: true
44
---
5-
You can either upload the exported results of an OpenVAS Scan in a .csv or .xml format.
5+
You can upload the results of an OpenVAS/Greenbone report in either .csv or .xml format.
66

77
### Sample Scan Data
88
Sample OpenVAS scans can be found [here](https://github.com/DefectDojo/django-DefectDojo/tree/master/unittests/scans/openvas).
99

10-
### Default Deduplication Hashcode Fields
11-
By default, DefectDojo identifies duplicate Findings using these [hashcode fields](https://docs.defectdojo.com/en/working_with_findings/finding_deduplication/about_deduplication/):
10+
### Parser versions
11+
The OpenVAS parser has two versions: Version 2 and the legacy version. Only version 2 should be used going forward. This documentation assumes Version 2 going forward.
12+
13+
Version 2 comes with a number of improvements:
14+
- Use of a hash code algorithm for deduplication
15+
- Increased consistency in parsing between the XML and CSV parsers.
16+
- Combined findings where the only differences are in fields that cannot be rehashed due to inconsistent values between scans (e.g. fields containing timestamps or packet IDs). This prevents duplicates if the vulnerability is found multiple times on the same endpoint.
17+
- Increased parser value coverage
18+
- Heuristic for fix_available detection
19+
- Updated mapping to DefectDojo fields compared to version 1.
20+
21+
### Deduplication Algorithm
22+
Default Deduplication Hashcode Fields:
23+
By default, DefectDojo Parser V2 identifies duplicate findings using the following [hashcode fields](https://docs.defectdojo.com/en/working_with_findings/finding_deduplication/about_deduplication/):
1224

1325
- title
14-
- cwe
15-
- line
16-
- file path
17-
- description
26+
- severity
27+
- vuln_id_from_tool
28+
- endpoints
29+
30+
The legacy version (version 1) uses the legacy deduplication algorithm.
31+
32+
### CSV and XML differences and similarityies
33+
The parser attempts to parse XML and CSV files in a similar way. However, this is not always possible. The following lists the differences between the parsers:
34+
35+
- EPSS scores and percentiles are only available in CSV format.
36+
- CVSS vectors are only available in the XML format.
37+
- The CVSS score will always be reported as CVSS v3 in the CSV parser
38+
- The references in the CSV parser will never contain URLs.
39+
40+
If no supported CVSS version is detected, the score (if present) is registered as a CVSS v3 score, even if this is incorrect.

docs/package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@
2626
"vite": "7.1.7"
2727
},
2828
"engines": {
29-
"node": "22.19.0"
29+
"node": "22.20.0"
3030
}
3131
}

dojo/importers/endpoint_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def reactivate_endpoint_status(
8484
for endpoint_status in endpoint_status_list:
8585
# Only reactivate endpoints that are actually mitigated
8686
if endpoint_status.mitigated:
87-
logger.debug("Re-import: reactivating endpoint %s that is present in this scan", str(endpoint_status.endpoint))
87+
logger.debug("Re-import: reactivating endpoint %s that is present in this scan", endpoint_status.endpoint)
8888
endpoint_status.mitigated_by = None
8989
endpoint_status.mitigated_time = None
9090
endpoint_status.mitigated = False

dojo/jira_link/helper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1649,7 +1649,7 @@ def process_jira_project_form(request, instance=None, target=None, product=None,
16491649
# jform = JIRAProjectForm(request.POST, instance=instance if instance else JIRA_Project(), product=product)
16501650
jform = JIRAProjectForm(request.POST, instance=instance, target=target, product=product, engagement=engagement)
16511651
# logging has_changed because it sometimes doesn't do what we expect
1652-
logger.debug("jform has changed: %s", str(jform.has_changed()))
1652+
logger.debug("jform has changed: %s", jform.has_changed())
16531653

16541654
if jform.has_changed(): # if no data was changed, no need to do anything!
16551655
logger.debug("jform changed_data: %s", jform.changed_data)

dojo/middleware.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def __call__(self, request):
6262
return HttpResponseRedirect(fullURL)
6363

6464
if request.user.is_authenticated:
65-
logger.debug("Authenticated user: %s", str(request.user))
65+
logger.debug("Authenticated user: %s", request.user)
6666
with suppress(ModuleNotFoundError): # to avoid unittests to fail
6767
uwsgi = __import__("uwsgi", globals(), locals(), ["set_logvar"], 0)
6868
# this populates dd_user log var, so can appear in the uwsgi logs

dojo/pipeline.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,18 +114,18 @@ def assign_user_to_groups(user, group_names, social_provider):
114114
for group_name in group_names:
115115
group, created_group = Dojo_Group.objects.get_or_create(name=group_name, social_provider=social_provider)
116116
if created_group:
117-
logger.debug("Group %s for social provider %s was created", str(group), social_provider)
117+
logger.debug("Group %s for social provider %s was created", group, social_provider)
118118
_group_member, is_member_created = Dojo_Group_Member.objects.get_or_create(group=group, user=user, defaults={
119119
"role": Role.objects.get(id=Roles.Maintainer)})
120120
if is_member_created:
121-
logger.debug("User %s become member of group %s (social provider: %s)", user, str(group), social_provider)
121+
logger.debug("User %s become member of group %s (social provider: %s)", user, group, social_provider)
122122

123123

124124
def cleanup_old_groups_for_user(user, group_names):
125125
for group_member in Dojo_Group_Member.objects.select_related("group").filter(user=user):
126126
group = group_member.group
127127
if str(group) not in group_names:
128-
logger.debug("Deleting membership of user %s from %s group %s", user, group.social_provider, str(group))
128+
logger.debug("Deleting membership of user %s from %s group %s", user, group.social_provider, group)
129129
group_member.delete()
130130

131131

0 commit comments

Comments
 (0)