Add Seal Security CSV parser - #15592
Open
amita-seal wants to merge 2 commits into
Open
Conversation
Adds a parser for the CSV export of the Seal Security CLI, produced by `seal scan --csv <file>`. The export has one row per vulnerable package, with a pipe-separated list of vulnerability identifiers. Each identifier becomes its own Finding so that it can be triaged independently. Identifiers are not always CVEs: Seal reports the most specific identifier it has, falling back to a GitHub advisory or Snyk identifier when no CVE is assigned. Two properties of the export are worth noting: - A scan without findings leaves the file empty rather than writing a header, so an empty file is a valid report and yields no findings. - A vulnerability reaching the project through an embedded (shaded) package is reported as `CVE-2021-1234(via shaded lib1&lib2)`. The identifier is used for the Finding and the embedding packages are named in the description. The export has no severity column, so findings default to Medium. The parser reads an optional Score column when present and maps it onto the standard severity bands. Severity is deliberately left out of the deduplication hashcode so that findings imported before and after a report gains that column are not treated as distinct. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Adds a parser for the CSV export of the Seal Security CLI, produced by
seal scan --csv <file>. Seal backports security fixes into "sealed" versions of open-source packages, so a vulnerable dependency can be remediated without a major-version upgrade.The export has one row per vulnerable package, with a pipe-separated list of vulnerability identifiers:
Each identifier becomes its own Finding, so that each one can be triaged and risk-accepted independently. Identifiers are not always CVEs: Seal reports the most specific identifier it has, falling back to a GitHub advisory or Snyk identifier when no CVE is assigned.
Two properties of the export are worth calling out, both covered by test files:
CVE-2021-1234(via shaded lib1&lib2). The identifier is used for the Finding, and the embedding packages are named in the description. The Finding's component stays the package that is actually present in the project.When a sealed version is available,
fix_availableis set and the mitigation names the version to update to.Severity
Not every Seal report carries severity, so the parser supports both shapes of the export.
When a
Scorecolumn is present its value is mapped onto the standard severity bands;when it is absent there is nothing in the report to derive a severity from, and findings
are imported as Medium. Either export imports cleanly, with no configuration and no
scan-type variant.
For that reason
severityis deliberately left out of the deduplication hashcode. Aproject can import a report without a score today and one with a score tomorrow, and
including severity would fork every existing finding into a duplicate at that point.
Test results
Ruff clean against the pinned
ruff==0.16.1.Documentation
docs/content/supported_tools/parsers/file/seal.mdadded.Checklist
dev.dev.🤖 Generated with Claude Code