diff --git a/security/reports/README.md b/security/reports/README.md new file mode 100644 index 0000000..604f1e5 --- /dev/null +++ b/security/reports/README.md @@ -0,0 +1,9 @@ +# Security HTML reports + +Tracked outputs from the multi-scanner CVE automation: + +- `cve-report.html` — consolidated scanner status and findings +- `human-review.html` — FIX/IGNORE recommendations for items that need code or process changes + +Machine-readable JSON/SBOM artifacts are written to the `security-reports/` directory (ignored by Git) locally via `make security-scan`. +OpenVEX acceptances live in `security/vex/fastworkflow.openvex.json`. diff --git a/security/reports/cve-report.html b/security/reports/cve-report.html new file mode 100644 index 0000000..d2c96b7 --- /dev/null +++ b/security/reports/cve-report.html @@ -0,0 +1,87 @@ + + + + +fastWorkflow CVE Report — 2026-08-09 00:03 UTC + + + +
+

fastWorkflow multi-scanner CVE report

+

Generated 2026-08-09 00:03 UTC against branch cursor/cve-report-and-remediation-f918 (post PR #61 / v2.31.0 — sqlite3 / Python 3.13+). Tools: Trivy, Grype, Syft, Snyk, Docker Scout, Dockle, Dive, osv-scanner (+ pip-audit corroboration).

+
+
+
+

Executive summary

+
+
1Python advisory (diskcache)
+
0Fixable via pyproject.toml
+
0Open Python vulns after OpenVEX
+
24Proxy-image High/Critical rows (not product)
+
+

Easy third-party package bumps: none. Full OSV sweep of 141 locked PyPI packages found only diskcache==5.6.3, and PyPI still has no patched release (latest remains 5.6.3). Existing floors in pyproject.toml already cover prior CVE sets (litellm, multipart, starlette, cryptography, etc.). v2.31.0 dependency graph change (speedict→sqlite3 stdlib) introduced no new PyPI advisories.

+
+
+

Scanner run status

+ + + + + + + + + + + + + +
ToolStatusNotes
SyftOKSBOM generated from poetry.lock (JSON/table/SPDX)
TrivyOKFS/lockfile scan: 1 MEDIUM (diskcache), suppressed via OpenVEX → 0 open
GrypeOKSBOM scan: 1 MEDIUM (diskcache); with OpenVEX → 0 matches (1 ignoredMatch)
osv-scannerOKpoetry.lock: 1 MEDIUM (diskcache / CVE-2025-69872 / PYSEC-2026-2447); no fixed version
pip-auditOKPyPI advisory service reports clean (OSV/GHSA still flag diskcache; service lag). Corroborates no other PyPI vulns.
SnykSKIPPEDSNYK_TOKEN not configured (CLI v1.1306.3 installed)
Docker ScoutSKIPPEDDocker Hub login required for scout CLI (plugin v1.24.0 installed)
DockleOK (proxy image)python:3.13-slim-bookworm — CIS-DI-0001 (WARN), CIS-DI-0005 (INFO), CIS-DI-0006 (INFO), CIS-DI-0008 (INFO); no first-party Dockerfile
DiveOK (proxy image)python:3.13-slim-bookworm efficiency≈96.8651%; repo has no first-party Dockerfile
+
+
+

Python / poetry.lock findings (pre-VEX)

+ + + +
CVE / IDPackageVersionSeverityFixed inSummaryDetected by
CVE-2025-69872diskcache5.6.3MEDIUMNone (no release)DiskCache has unsafe pickle deserializationosv-scanner, trivy, grype
+

With security/vex/fastworkflow.openvex.json, Trivy and Grype report a clean poetry.lock. See human-review report for Fix/Ignore decision.

+
+
+

Proxy image High/Critical (python:3.13-slim-bookworm)

+

Included because Dockle/Dive/Scout/image scanners require an image and this repo has no Dockerfile. These are distro CVEs in a stand-in base image — not shipped by fastWorkflow. Image tag updated to Python 3.13 to match the v2.31.0 runtime floor.

+

Severity totals — Critical: 6 rows / 6 unique CVEs; High: 18 rows / 8 unique CVEs

+ + + + + +
SevIDPackageInstalledFixedTitle
CRITICALCVE-2023-45853zlib1g1:1.2.13.dfsg-1zlib: integer overflow and resultant heap-based buffer overflow in zipOpenNewFileInZip4_6
CRITICALCVE-2025-7458libsqlite3-03.40.1-2+deb12u2sqlite: SQLite integer overflow
CRITICALCVE-2026-13221perl-base5.36.0-7+deb12u3Perl versions through 5.43.9 produce silently incorrect regular expres ...
CRITICALCVE-2026-42496perl-base5.36.0-7+deb12u3perl-archive-tar: perl-archive-tar: Path traversal via crafted symlinks allows arbitrary file access
CRITICALCVE-2026-57433perl-base5.36.0-7+deb12u3Storable versions before 3.41 for Perl have a signed integer overflow ...
CRITICALCVE-2026-8376perl-base5.36.0-7+deb12u3perl: Perl: Heap buffer overflow when compiling regular expressions on 32-bit builds
HIGHCVE-2025-69720libncursesw66.4-4ncurses: ncurses: Buffer overflow vulnerability may lead to arbitrary code execution.
HIGHCVE-2026-41992gzip1.12-1GNU gzip contains a global buffer overflow vulnerability in the LZH de ...
HIGHCVE-2026-42497perl-base5.36.0-7+deb12u3perl-Archive-Tar: perl-Archive-Tar: Arbitrary file modification via crafted hardlinks during archive
HIGHCVE-2026-48962perl-base5.36.0-7+deb12u3perl-IO-Compress: perl-IO-Compress: Arbitrary code execution via attacker-controlled output glob
HIGHCVE-2026-53615bsdutils1:2.38.1-5+deb12u3[Integer Overflow or Wraparound in libblkid/src/partitions/dos.c]
HIGHCVE-2026-54369libacl12.3.1-3acl: Symlink traversal privilege escalation via libacl functions
HIGHCVE-2026-57432perl-base5.36.0-7+deb12u3perl: Perl: Information disclosure via integer overflow in pack/unpack operations
HIGHCVE-2026-9538perl-base5.36.0-7+deb12u3perl-Archive-Tar: perl-Archive-Tar: Denial of Service via crafted tar header with large entry size
+
+
+

Artifacts

+

Machine-readable outputs (gitignored): security-reports/ — syft/grype/trivy/osv-scanner/dockle/dive JSON+text. Tracked OpenVEX: security/vex/fastworkflow.openvex.json. Human-review HTML: security/reports/human-review.html.

+
+
+ + diff --git a/security/reports/human-review.html b/security/reports/human-review.html new file mode 100644 index 0000000..ad028f2 --- /dev/null +++ b/security/reports/human-review.html @@ -0,0 +1,70 @@ + + + + +fastWorkflow vulnerability human review — 2026-08-09 00:03 UTC + + + +
+

Vulnerabilities requiring human review

+

Findings that cannot be closed by an easy pyproject.toml version bump. Each item has a recommendation of FIX or IGNORE with documented rationale. Generated 2026-08-09 00:03 UTC (post PR #61 / v2.31.0).

+
+ IGNORE = accept / already VEX’d / out of product scope + FIX = code or process change required +
+
+
+ +
+
IGNORE
+

Unsafe pickle deserialization in DiskCache

+

ID: CVE-2025-69872 / GHSA-w8v5-vhqr-4h9v / PYSEC-2026-2447
+ Component: diskcache 5.6.3 (transitive via dspy)

+

Why a code / process change (not pyproject alone)

+

No patched PyPI release exists (latest still 5.6.3 as of 2026-08-09 00:03 UTC). A pyproject.toml bump cannot remediate. Mitigation would require application changes (disable DSPy disk cache, relocate/harden cache dir permissions, or wait for upstream non-pickle default).

+

Rationale

+

Already documented in security/vex/fastworkflow.openvex.json as not_affected with justification vulnerable_code_cannot_be_controlled_by_adversary. Exploitation requires write access to the process-local DSPy cache directory; remote API/MCP clients cannot write that path. An adversary who can write as the service user already has equivalent privilege to pickle RCE. Re-evaluate if cache directory is shared across trust boundaries or world-writable. When upstream ships a fix, add a floor constraint in pyproject.toml.

+
+
+
IGNORE
+

6 Critical / 8 High unique CVEs on proxy scan image

+

ID: Proxy base image OS CVEs (Trivy on python:3.13-slim-bookworm)
+ Component: Debian bookworm packages in python:3.13-slim-bookworm (not shipped by this repo)

+

Why a code / process change (not pyproject alone)

+

This repository has no Dockerfile. Image CVEs are in distro packages (perl, libc, sqlite, etc.) and cannot be fixed via pyproject.toml. Remediation would mean publishing and maintaining a hardened runtime image, then refreshing base tags / applying distro patches.

+

Rationale

+

fastWorkflow is distributed as a PyPI package, not a container image. Proxy image scan was performed only to exercise Dockle/Dive/Trivy-image as required by the automation. Do not treat these OS CVEs as product vulnerabilities until a first-party image is published. If/when a Dockerfile is added, pin a maintained base and rebuild on distro security updates. Note: proxy image was updated from 3.12 to 3.13-slim-bookworm to align with the Python 3.13+ requirement from PR #61.

+
+
+
IGNORE
+

Container runs as root; no HEALTHCHECK; content trust unset

+

ID: Dockle CIS-DI-0001 (and related INFO findings)
+ Component: python:3.13-slim-bookworm proxy image

+

Why a code / process change (not pyproject alone)

+

Requires Dockerfile USER/HEALTHCHECK instructions and deployment content-trust policy — not addressable in pyproject.toml.

+

Rationale

+

Findings apply to the proxy base image used for scanner coverage, not a shipped fastWorkflow image. Track as image-hardening requirements when a first-party Dockerfile is introduced.

+
+
+

pyproject.toml easy-fix outcome

+

No third-party package vulnerability in the locked graph had a fixed version available on PyPI. Therefore this PR does not change dependency pins for CVE remediation. Prior release work (through v2.31.0) already raised floors for litellm, python-multipart, starlette, cryptography, aiohttp, urllib3, requests, setuptools, and related packages. The PR #61 speedict→sqlite3 migration removed a third-party dependency and did not introduce new PyPI advisories.

+

Optional follow-ups (not done here): add SNYK_TOKEN / Docker Hub auth for Scout; publish a first-party runtime Dockerfile if container CVEs should become product backlog. Refresh after merge of PR #61 (v2.31.0).

+
+
+ + diff --git a/security/vex/fastworkflow.openvex.json b/security/vex/fastworkflow.openvex.json index 28ed460..4441b8f 100644 --- a/security/vex/fastworkflow.openvex.json +++ b/security/vex/fastworkflow.openvex.json @@ -3,8 +3,8 @@ "@id": "https://github.com/radiantlogicinc/fastworkflow/security/vex/fastworkflow.openvex.json", "author": "fastworkflow maintainers ", "role": "document creator", - "timestamp": "2026-08-08T14:55:09Z", - "version": 2, + "timestamp": "2026-08-09T00:03:00Z", + "version": 3, "statements": [ { "vulnerability": { @@ -19,7 +19,7 @@ "status": "not_affected", "justification": "vulnerable_code_cannot_be_controlled_by_adversary", "impact_statement": "Alias CVE-2025-69872. fastWorkflow uses diskcache only as DSPy's on-disk LM response cache (via dspy.configure_cache). Exploitation requires an attacker to write attacker-controlled pickle bytes into the process-local DSPy cache directory (default under the service account home, e.g. ~/.dspy_cache) and then have the process deserialize them. Remote API/MCP clients cannot write that directory. An adversary who can already write arbitrary files as the service user has equivalent or greater privilege than pickle RCE would grant. There is no patched diskcache release on PyPI as of this VEX; the finding remains accepted under this justification.", - "status_notes": "Code review 2026-08-08 (Dependabot alert #48). diskcache is transitive via dspy; not imported directly by fastworkflow. Cache path is not a multi-tenant shared volume in supported deployments. Re-evaluate if a deployment mounts the DSPy disk cache directory as world-writable or shares it across trust boundaries. Dual-stated as CVE-2025-69872 below for scanners that key on CVE IDs." + "status_notes": "Code review 2026-08-08 (Dependabot alert #48); re-verified 2026-08-09 after PR #61 / v2.31.0 (OSV/Trivy/Grype still report diskcache 5.6.3 with no PyPI fix). diskcache is transitive via dspy; not imported directly by fastworkflow. Cache path is not a multi-tenant shared volume in supported deployments. Re-evaluate if a deployment mounts the DSPy disk cache directory as world-writable or shares it across trust boundaries. Dual-stated as CVE-2025-69872 below for scanners that key on CVE IDs." }, { "vulnerability": {