-
Notifications
You must be signed in to change notification settings - Fork 1.7k
🐛 Implement Wazuh v4.8 #12739
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
base: bugfix
Are you sure you want to change the base?
🐛 Implement Wazuh v4.8 #12739
Changes from all commits
99f7e41
7e65e43
5e9e2f8
aee40ca
5218ed9
baa63f3
3684cec
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
import hashlib | ||
|
||
from dojo.models import Endpoint, Finding | ||
|
||
|
||
class WazuhV4_7: | ||
def parse_findings(self, test, data): | ||
dupes = {} | ||
vulnerabilities = data.get("data", {}).get("affected_items", []) | ||
for item in vulnerabilities: | ||
if ( | ||
item["condition"] != "Package unfixed" | ||
and item["severity"] != "Untriaged" | ||
): | ||
cve = item.get("cve") | ||
package_name = item.get("name") | ||
package_version = item.get("version") | ||
description = item.get("condition") | ||
severity = item.get("severity").capitalize() | ||
agent_ip = item.get("agent_ip") | ||
links = item.get("external_references") | ||
cvssv3_score = item.get("cvss3_score") | ||
publish_date = item.get("published") | ||
agent_name = item.get("agent_name") | ||
agent_ip = item.get("agent_ip") | ||
detection_time = item.get("detection_time").split("T")[0] | ||
|
||
references = "\n".join(links) if links else None | ||
|
||
title = ( | ||
item.get("title") + " (version: " + package_version + ")" | ||
) | ||
|
||
if agent_name: | ||
dupe_key = title + cve + agent_name + package_name + package_version | ||
else: | ||
dupe_key = title + cve + package_name + package_version | ||
dupe_key = hashlib.sha256(dupe_key.encode("utf-8")).hexdigest() | ||
|
||
if dupe_key in dupes: | ||
find = dupes[dupe_key] | ||
else: | ||
dupes[dupe_key] = True | ||
|
||
find = Finding( | ||
title=title, | ||
test=test, | ||
description=description, | ||
severity=severity, | ||
references=references, | ||
static_finding=True, | ||
component_name=package_name, | ||
component_version=package_version, | ||
cvssv3_score=cvssv3_score, | ||
publish_date=publish_date, | ||
unique_id_from_tool=dupe_key, | ||
date=detection_time, | ||
) | ||
|
||
# in some cases the agent_ip is not the perfect way on how to identify a host. Thus prefer the agent_name, if existant. | ||
if agent_name: | ||
find.unsaved_endpoints = [Endpoint(host=agent_name)] | ||
elif agent_ip: | ||
find.unsaved_endpoints = [Endpoint(host=agent_ip)] | ||
|
||
if id: | ||
find.unsaved_vulnerability_ids = cve | ||
|
||
dupes[dupe_key] = find | ||
return list(dupes.values()) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
import hashlib | ||
|
||
from dojo.models import Finding | ||
|
||
|
||
class WazuhV4_8: | ||
def parse_findings(self, test, data): | ||
dupes = {} | ||
vulnerabilities = data.get("hits", {}).get("hits", []) | ||
for item_source in vulnerabilities: | ||
item = item_source.get("_source") | ||
vuln = item.get("vulnerability") | ||
cve = vuln.get("id") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
description = vuln.get("description") | ||
severity = vuln.get("severity") | ||
cvssv3_score = vuln.get("score").get("base") | ||
publish_date = vuln.get("published_at").split("T")[0] | ||
agent_id = item.get("agent").get("id") | ||
detection_time = vuln.get("detected_at").split("T")[0] | ||
|
||
references = vuln.get("reference") | ||
|
||
title = ( | ||
cve + " (agent_id: " + agent_id + ")" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Updated the title to include |
||
) | ||
|
||
dupe_key = title + agent_id + description | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I got some warnings on dedupes
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This means that the default dedupe fields are being used here |
||
dupe_key = hashlib.sha256(dupe_key.encode("utf-8")).hexdigest() | ||
|
||
if dupe_key in dupes: | ||
find = dupes[dupe_key] | ||
else: | ||
dupes[dupe_key] = True | ||
|
||
find = Finding( | ||
title=title, | ||
test=test, | ||
description=description, | ||
severity=severity, | ||
references=references, | ||
static_finding=True, | ||
cvssv3_score=cvssv3_score, | ||
publish_date=publish_date, | ||
unique_id_from_tool=dupe_key, | ||
date=detection_time, | ||
) | ||
find.unsaved_vulnerability_ids = cve | ||
dupes[dupe_key] = find | ||
return list(dupes.values()) |
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.
Add package object too for get
package_name
andpackage_version
fields.