Skip to content

Commit 8a9a5e2

Browse files
committed
Sort package vulnerabilities by criticality
1 parent beff985 commit 8a9a5e2

3 files changed

Lines changed: 600 additions & 9 deletions

File tree

.github/workflows/PR-tests.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,18 @@ jobs:
125125
f.write("1")
126126
vulns = []
127127
for i in range(1, 56):
128+
severity = "low"
129+
if i % 10 == 0:
130+
severity = "critical"
131+
elif i % 10 == 1:
132+
severity = "high"
133+
elif i % 10 == 2:
134+
severity = "medium"
128135
vulns.append({
129136
"name": f"pkg{i}",
130137
"version": f"1.{i}.0",
131138
"manager": "windows-registry",
139+
"severity": severity,
132140
"vulns": [f"CVE-2026-{10000 + i}"],
133141
})
134142
response = {
@@ -166,6 +174,15 @@ jobs:
166174
if ($vulnLines -ne 50) {
167175
Write-Error "Expected 50 vulnerable package lines, got $vulnLines.`n$output"
168176
}
177+
$firstVulnLine = [regex]::Match($output, "(?m)^\s+- pkg\d+ .*$").Value
178+
if ($firstVulnLine -notmatch "pkg10 .* \[Critical\]: CVE-2026-10010") {
179+
Write-Error "Expected critical package vulnerabilities to be printed first, got: $firstVulnLine`n$output"
180+
}
181+
$criticalIndex = $output.IndexOf("pkg10")
182+
$lowIndex = $output.IndexOf("- pkg3 ")
183+
if ($criticalIndex -lt 0 -or $lowIndex -lt 0 -or $criticalIndex -gt $lowIndex) {
184+
Write-Error "Expected critical packages to appear before low packages.`n$output"
185+
}
169186
if ($output -notmatch "\.\.\. 5 more vulnerable package\(s\) not shown\.") {
170187
Write-Error "The hidden vulnerable package count was not printed.`n$output"
171188
}

winPEAS/winPEASexe/Tests/ArgumentParsingTests.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,5 +273,43 @@ public void PackageVulnerabilityFormatter_CapsAtFiftyLines()
273273
Assert.AreEqual(5, summary.NotShown);
274274
Assert.IsTrue(summary.Lines[0].StartsWith("- pkg1 1.1.0 [windows-registry]: CVE-2026-10001"));
275275
}
276+
277+
[TestMethod]
278+
public void PackageVulnerabilityFormatter_SortsByCriticalityBeforeCapping()
279+
{
280+
var responseJson =
281+
"{\"package_vulnerabilities\":{\"checked\":4,\"affected\":4,\"vulnerable_packages\":[" +
282+
"{\"name\":\"lowpkg\",\"version\":\"1.0\",\"manager\":\"windows-registry\",\"severity\":\"low\",\"vulns\":[\"CVE-2026-10001\"]}," +
283+
"{\"name\":\"criticalpkg\",\"version\":\"2.0\",\"manager\":\"windows-registry\",\"severity\":\"critical\",\"vulns\":[\"CVE-2026-10002\"]}," +
284+
"{\"name\":\"highpkg\",\"version\":\"3.0\",\"manager\":\"windows-registry\",\"severity\":\"high\",\"vulns\":[\"CVE-2026-10003\"]}," +
285+
"{\"name\":\"mediumpkg\",\"version\":\"4.0\",\"manager\":\"windows-registry\",\"severity\":\"medium\",\"vulns\":[\"CVE-2026-10004\"]}" +
286+
"]}}";
287+
288+
var summary = winPEAS.Info.NetworkInfo.HackTricksHostChecker.ParsePackageVulnerabilities(responseJson, 3);
289+
290+
Assert.AreEqual(3, summary.Lines.Count);
291+
Assert.AreEqual(1, summary.NotShown);
292+
Assert.IsTrue(summary.Lines[0].StartsWith("- criticalpkg 2.0 [windows-registry] [Critical]: CVE-2026-10002"));
293+
Assert.IsTrue(summary.Lines[1].StartsWith("- highpkg 3.0 [windows-registry] [High]: CVE-2026-10003"));
294+
Assert.IsTrue(summary.Lines[2].StartsWith("- mediumpkg 4.0 [windows-registry] [Medium]: CVE-2026-10004"));
295+
}
296+
297+
[TestMethod]
298+
public void PackageVulnerabilityFormatter_UsesCvssCriticalityWhenSeverityMissing()
299+
{
300+
var responseJson =
301+
"{\"package_vulnerabilities\":{\"checked\":3,\"affected\":3,\"vulnerable_packages\":[" +
302+
"{\"name\":\"mediumcvss\",\"version\":\"1.0\",\"manager\":\"windows-registry\",\"cvss_score\":5.0,\"vulns\":[\"CVE-2026-10001\"]}," +
303+
"{\"name\":\"criticalcvss\",\"version\":\"2.0\",\"manager\":\"windows-registry\",\"cvss_score\":9.8,\"vulns\":[\"CVE-2026-10002\"]}," +
304+
"{\"name\":\"highobject\",\"version\":\"3.0\",\"manager\":\"windows-registry\",\"vulns\":[{\"id\":\"CVE-2026-10003\",\"severity\":\"high\",\"cvss_score\":8.1}]}" +
305+
"]}}";
306+
307+
var summary = winPEAS.Info.NetworkInfo.HackTricksHostChecker.ParsePackageVulnerabilities(responseJson, 50);
308+
309+
Assert.AreEqual(3, summary.Lines.Count);
310+
Assert.IsTrue(summary.Lines[0].StartsWith("- criticalcvss 2.0 [windows-registry] [Critical]: CVE-2026-10002"));
311+
Assert.IsTrue(summary.Lines[1].StartsWith("- highobject 3.0 [windows-registry] [High]: CVE-2026-10003"));
312+
Assert.IsTrue(summary.Lines[2].StartsWith("- mediumcvss 1.0 [windows-registry] [Medium]: CVE-2026-10001"));
313+
}
276314
}
277315
}

0 commit comments

Comments
 (0)