Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion vulnerabilities/pipelines/enhance_with_exploitdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,8 @@ def add_vulnerability_exploit(row, logger):
for raw_alias in aliases:
try:
if alias := Alias.objects.get(alias=raw_alias):
vulnerabilities.add(alias.vulnerability)
if alias.vulnerability:
vulnerabilities.add(alias.vulnerability)
except Alias.DoesNotExist:
continue

Expand Down
7 changes: 6 additions & 1 deletion vulnerabilities/pipelines/enhance_with_kev.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,16 @@ def add_vulnerability_exploit(kev_vul, logger):
vulnerability = None
try:
if alias := Alias.objects.get(alias=cve_id):
vulnerability = alias.vulnerability
if alias.vulnerability:
vulnerability = alias.vulnerability
except Alias.DoesNotExist:
logger(f"No vulnerability found for aliases {cve_id}")
return 0

if not vulnerability:
logger(f"No vulnerability found for aliases {cve_id}")
return 0

Exploit.objects.update_or_create(
vulnerability=vulnerability,
data_source="KEV",
Expand Down
3 changes: 2 additions & 1 deletion vulnerabilities/pipelines/enhance_with_metasploit.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ def add_vulnerability_exploit(record, logger):
for ref in interesting_references:
try:
if alias := Alias.objects.get(alias=ref):
vulnerabilities.add(alias.vulnerability)
if alias.vulnerability:
vulnerabilities.add(alias.vulnerability)
except Alias.DoesNotExist:
continue

Expand Down
15 changes: 15 additions & 0 deletions vulnerabilities/tests/pipelines/test_enhance_with_exploitdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,18 @@ def test_exploit_db_improver(mock_get):
# Run Exploit-DB Improver again when there are matching aliases.
improver.execute()
assert Exploit.objects.count() == 1


@pytest.mark.django_db
@mock.patch("requests.get")
def test_invalid_exploit_db_improver(mock_get):
mock_response = Mock(status_code=200)
with open(TEST_DATA, "r") as f:
mock_response.text = f.read()
mock_get.return_value = mock_response

improver = ExploitDBImproverPipeline()
Alias.objects.create(alias="CVE-2009-3699", vulnerability=None)
status, _ = improver.execute()
assert status == 0
assert Exploit.objects.count() == 0
15 changes: 15 additions & 0 deletions vulnerabilities/tests/pipelines/test_enhance_with_kev.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,18 @@ def test_kev_improver(mock_get):
# Run Kev Improver again when there are matching aliases.
improver.execute()
assert Exploit.objects.count() == 1


@pytest.mark.django_db
@mock.patch("requests.get")
def test_invalid_kev_improver(mock_get):
mock_response = Mock(status_code=200)
mock_response.json.return_value = load_json(TEST_DATA)
mock_get.return_value = mock_response

improver = VulnerabilityKevPipeline()
Alias.objects.create(alias="CVE-2021-38647", vulnerability=None)

status, _ = improver.execute()
assert status == 0
assert Exploit.objects.count() == 0
14 changes: 14 additions & 0 deletions vulnerabilities/tests/pipelines/test_enhance_with_metasploit.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,17 @@ def test_metasploit_improver(mock_get):
# Run metasploit Improver again when there are matching aliases.
improver.execute()
assert Exploit.objects.count() == 1


@pytest.mark.django_db
@mock.patch("requests.get")
def test_invalid_metasploit_improver(mock_get):
mock_response = Mock(status_code=200)
mock_response.json.return_value = load_json(TEST_DATA)
mock_get.return_value = mock_response

Alias.objects.create(alias="CVE-2007-4387", vulnerability=None) # Alias without vulnerability
improver = MetasploitImproverPipeline()
status, _ = improver.execute()
assert status == 0
assert Exploit.objects.count() == 0