Repository navigation
Reports can contain more findings than with 1.0.2. The merge identity changed, so this is a minor release. Findings are now merged only if the HTTP method and the location (URL path and parameter) are also the same, and paths are compared case-sensitively. Before, the same ZAP or Burp title at different paths, with different methods, or at /Admin and /admin was one finding and is now several. The example report grew from 104 to 162 findings (39 to 49 at Medium or higher).
- Observations: every finding has
observations, one per place where a tool saw it:host,method,location(URL path, with the parameter if named) andsource_tool. ZAP gives one per alert instance, Burp one per issue, Nuclei one per result (the URL path of a web match), the other tools one per host. There are nolocation,methodorlocationsfields on a finding. - Merge rule: findings with the same title, ids and port are merged only if they have the same set of (method, location) pairs. Locations and parameter names are compared exactly: URL paths are case-sensitive, so
/loginand/Loginare two findings; only surrounding spaces and the case of the method are ignored. Two ZAP alerts with different sets of locations stay two findings, also on different hosts. The same title on several hosts or from several tools with the same set is still one finding. Findings without a location merge as before. Nuclei findings of one template at different URL paths are now several findings. --hostremoves the observations and the evidence of other hosts, so a merged finding no longer shows paths seen only on another host. Evidence getshostswhen findings are merged. Evidence of an unmerged finding with several hosts names no host and is kept; README says so.- Filter order:
--hostruns on the parsed findings before merging, so severity, CVSS and sources of a merged finding come only from the selected hosts. Then come merging, overrides and exclusions,ignore_titlesand--min-severity. Before,--host A --min-severity Highkept a finding that was Low on A and Critical on B. - "Affected" (host, method and location per line) is shown in the Markdown, the HTML search, the PDF and the CSV (last column
Affected); the index shows the method and location. The JSON hasobservations;schema_versionstays 2 because the fields are additions. - SARIF: results no longer put a host in
artifactLocation. Each host is a logical location (kindresource); hosts and observations are in the resultproperties. The output validates against the SARIF 2.1.0 schema. It has nophysicalLocation, so it is not for GitHub code scanning upload; README says so. - Markdown escaping treats every line break that Python or a renderer recognises (
\r,\x0b,\x0c,\x1c-\x1e,\x85, U+2028, U+2029) as a newline, so scanner text cannot start a heading, list or underline after one of them. --format-out pdfexits with code 2, not 1, whenreport.pdfexists and--replaceis not given.--replaceremoves a stale file listed in the manifest only if its SHA-256 matches the digest in the manifest. Manifests now contain the digests; entries of older manifests have none and are never removed. When the manifest is trusted, the digest check prevents cleanup of files that changed since scanfuse wrote them. The manifest is not authenticated and does not prove that scanfuse created a file; anyone who can edit the report folder can also delete files in it. README anddocs/security-model.mdsay so.- File names: the
-Nsuffix that makes a slug unique no longer pushes it past 100 characters. - README and SECURITY: the Excel notes no longer contradict each other. The import observations are manual tests in Windows Excel; formula handling in Excel and LibreOffice and opening the HTML page in a browser are unverified. Each finding starts on a new page in the PDF; long findings continue on further pages.
- A German comment in
.gitignoreis now English. - Package classifier is "Development Status :: 4 - Beta" again.
Install
pipx install scanfuse==1.1.0Standalone programs for Linux, Windows and macOS are attached below. Check them against SHA256SUMS.