-
Notifications
You must be signed in to change notification settings - Fork 16
security: CVE multi-scanner report and human-review findings #58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| # Security scan reports | ||
|
|
||
| Generated 2026-08-08 18:58 UTC on branch `cursor/cve-report-and-remediation-6925`. | ||
|
|
||
| | Report | Description | | ||
| |--------|-------------| | ||
| | [cve-report.html](cve-report.html) | Multi-scanner CVE summary (Trivy, Grype, Syft, Snyk, Scout, Dockle, Dive, osv-scanner) | | ||
| | [human-review.html](human-review.html) | Findings needing code/process changes with FIX or IGNORE recommendations | | ||
|
|
||
| Machine-readable scanner outputs remain local/gitignored under `security-reports/` (see makefile `security-scan` targets). Accepted Python finding: `diskcache` CVE-2025-69872 via [`../vex/fastworkflow.openvex.json`](../vex/fastworkflow.openvex.json). |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,75 @@ | ||
| <!DOCTYPE html> | ||
| <html lang="en"> | ||
| <head> | ||
| <meta charset="utf-8"/> | ||
| <title>fastWorkflow CVE Report — 2026-08-08 18:58 UTC</title> | ||
| <style> | ||
| :root { --bg:#f6f7f9; --card:#fff; --ink:#1a1d23; --muted:#5c6570; --line:#d8dee6; --ok:#0b6b3a; --skip:#8a6d00; --fail:#9b1c1c; --med:#9a5b00; } | ||
| body { margin:0; font-family: "IBM Plex Sans", "Source Sans 3", "Segoe UI", sans-serif; color:var(--ink); background:linear-gradient(180deg,#eef2f6,#f8f6f2 40%,#f6f7f9); } | ||
| header { padding:2.5rem 2rem 1.5rem; border-bottom:1px solid var(--line); background:radial-gradient(1200px 400px at 10% -10%, #d9e7f5, transparent), #fff; } | ||
| h1 { margin:0 0 .4rem; font-size:1.8rem; letter-spacing:-0.02em; } | ||
| .sub { color:var(--muted); max-width:70ch; line-height:1.45; } | ||
| main { padding:1.5rem 2rem 3rem; display:grid; gap:1.25rem; } | ||
| section { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:1.25rem 1.4rem; box-shadow:0 1px 0 rgba(16,24,40,.03); } | ||
| h2 { margin:0 0 .8rem; font-size:1.15rem; } | ||
| table { width:100%; border-collapse:collapse; font-size:.92rem; } | ||
| th,td { text-align:left; padding:.55rem .5rem; border-bottom:1px solid var(--line); vertical-align:top; } | ||
| th { color:var(--muted); font-weight:600; font-size:.8rem; text-transform:uppercase; letter-spacing:.04em; } | ||
| .badge { display:inline-block; padding:.15rem .5rem; border-radius:999px; font-size:.75rem; font-weight:600; } | ||
| .badge.ok { background:#e5f6ec; color:var(--ok); } | ||
| .badge.skipped { background:#fff3cd; color:var(--skip); } | ||
| .badge.failed { background:#fde8e8; color:var(--fail); } | ||
| .kpi { display:flex; flex-wrap:wrap; gap:1rem; } | ||
| .kpi div { min-width:140px; padding:.8rem 1rem; background:#f3f6fa; border-radius:10px; } | ||
| .kpi strong { display:block; font-size:1.4rem; } | ||
| .note { color:var(--muted); font-size:.9rem; } | ||
| code { background:#f0f3f7; padding:.1rem .35rem; border-radius:4px; } | ||
| </style> | ||
| </head> | ||
| <body> | ||
| <header> | ||
| <h1>fastWorkflow multi-scanner CVE report</h1> | ||
| <p class="sub">Generated 2026-08-08 18:58 UTC against branch <code>cursor/cve-report-and-remediation-6925</code> (post PR #57 / v2.30.0). Tools: Trivy, Grype, Syft, Snyk, Docker Scout, Dockle, Dive, osv-scanner (+ pip-audit corroboration).</p> | ||
| </header> | ||
| <main> | ||
| <section> | ||
| <h2>Executive summary</h2> | ||
| <div class="kpi"> | ||
| <div><strong>1</strong>Python advisory (diskcache)</div> | ||
| <div><strong>0</strong>Fixable via pyproject.toml</div> | ||
| <div><strong>0</strong>Open Python vulns after OpenVEX</div> | ||
| <div><strong>24</strong>Proxy-image High/Critical (not product)</div> | ||
| </div> | ||
| <p class="note" style="margin-top:1rem">Easy third-party package bumps: <strong>none</strong>. Full OSV sweep of 142 locked PyPI packages found only <code>diskcache==5.6.3</code>, and PyPI still has no patched release. Existing floors in <code>pyproject.toml</code> already cover prior CVE sets (litellm, multipart, starlette, cryptography, etc.).</p> | ||
| </section> | ||
| <section> | ||
| <h2>Scanner run status</h2> | ||
| <table> | ||
| <thead><tr><th>Tool</th><th>Status</th><th>Notes</th></tr></thead> | ||
| <tbody><tr><td>Syft</td><td><span class='badge ok'>OK</span></td><td>SBOM generated from poetry.lock (CycloneDX/SPDX/JSON)</td></tr><tr><td>Trivy</td><td><span class='badge ok'>OK</span></td><td>FS/lockfile scan: 1 MEDIUM (diskcache), suppressed via OpenVEX → 0 open</td></tr><tr><td>Grype</td><td><span class='badge ok'>OK</span></td><td>SBOM scan: 1 MEDIUM (diskcache); with OpenVEX → No vulnerabilities found</td></tr><tr><td>osv-scanner</td><td><span class='badge ok'>OK</span></td><td>poetry.lock: 1 MEDIUM (diskcache / CVE-2025-69872); no fixed version</td></tr><tr><td>pip-audit</td><td><span class='badge ok'>OK</span></td><td>venv audit: 1 known vulnerability (diskcache); requirements.txt install-audit blocked by platform markers</td></tr><tr><td>Snyk</td><td><span class='badge skipped'>SKIPPED</span></td><td>SNYK_TOKEN not configured</td></tr><tr><td>Docker Scout</td><td><span class='badge skipped'>SKIPPED</span></td><td>Docker Hub login required for scout CLI</td></tr><tr><td>Dockle</td><td><span class='badge ok'>OK (proxy image)</span></td><td>Scanned python:3.12-slim-bookworm (no first-party Dockerfile); CIS warnings only</td></tr><tr><td>Dive</td><td><span class='badge failed'>FAILED (env)</span></td><td>Layer fetch failed in nested containerd; not a project defect</td></tr></tbody> | ||
| </table> | ||
| </section> | ||
| <section> | ||
| <h2>Python / poetry.lock findings (pre-VEX)</h2> | ||
| <table> | ||
| <thead><tr><th>CVE / ID</th><th>Package</th><th>Version</th><th>Severity</th><th>Fixed in</th><th>Summary</th><th>Detected by</th></tr></thead> | ||
| <tbody><tr><td>CVE-2025-69872</td><td>diskcache</td><td>5.6.3</td><td>MEDIUM</td><td>None (no release)</td><td>DiskCache has unsafe pickle deserialization</td><td>osv-scanner, trivy, grype, pip-audit</td></tr></tbody> | ||
| </table> | ||
| <p class="note">With <code>security/vex/fastworkflow.openvex.json</code>, Trivy and Grype report a clean poetry.lock. See human-review report for Fix/Ignore decision.</p> | ||
| </section> | ||
| <section> | ||
| <h2>Proxy image High/Critical (python:3.12-slim-bookworm)</h2> | ||
| <p class="note">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.</p> | ||
| <p class="note">Severity totals — Critical: 6, High: 18, Medium: 70, Low: 97</p> | ||
| <table> | ||
| <thead><tr><th>Sev</th><th>ID</th><th>Package</th><th>Installed</th><th>Fixed</th><th>Title</th></tr></thead> | ||
| <tbody><tr><td>CRITICAL</td><td>CVE-2023-45853</td><td>zlib1g</td><td>1:1.2.13.dfsg-1</td><td>—</td><td>zlib: integer overflow and resultant heap-based buffer overflow in zipOpenNewFileInZip4_6</td></tr><tr><td>CRITICAL</td><td>CVE-2025-7458</td><td>libsqlite3-0</td><td>3.40.1-2+deb12u2</td><td>—</td><td>sqlite: SQLite integer overflow</td></tr><tr><td>CRITICAL</td><td>CVE-2026-13221</td><td>perl-base</td><td>5.36.0-7+deb12u3</td><td>—</td><td>Perl versions through 5.43.9 produce silently incorrect regular expres ...</td></tr><tr><td>CRITICAL</td><td>CVE-2026-42496</td><td>perl-base</td><td>5.36.0-7+deb12u3</td><td>—</td><td>perl-archive-tar: perl-archive-tar: Path traversal via crafted symlinks allows arbitrary file access</td></tr><tr><td>CRITICAL</td><td>CVE-2026-57433</td><td>perl-base</td><td>5.36.0-7+deb12u3</td><td>—</td><td>Storable versions before 3.41 for Perl have a signed integer overflow ...</td></tr><tr><td>CRITICAL</td><td>CVE-2026-8376</td><td>perl-base</td><td>5.36.0-7+deb12u3</td><td>—</td><td>perl: Perl: Heap buffer overflow when compiling regular expressions on 32-bit builds</td></tr><tr><td>HIGH</td><td>CVE-2025-69720</td><td>libncursesw6</td><td>6.4-4</td><td>—</td><td>ncurses: ncurses: Buffer overflow vulnerability may lead to arbitrary code execution.</td></tr><tr><td>HIGH</td><td>CVE-2025-69720</td><td>libtinfo6</td><td>6.4-4</td><td>—</td><td>ncurses: ncurses: Buffer overflow vulnerability may lead to arbitrary code execution.</td></tr><tr><td>HIGH</td><td>CVE-2025-69720</td><td>ncurses-base</td><td>6.4-4</td><td>—</td><td>ncurses: ncurses: Buffer overflow vulnerability may lead to arbitrary code execution.</td></tr><tr><td>HIGH</td><td>CVE-2025-69720</td><td>ncurses-bin</td><td>6.4-4</td><td>—</td><td>ncurses: ncurses: Buffer overflow vulnerability may lead to arbitrary code execution.</td></tr><tr><td>HIGH</td><td>CVE-2026-41992</td><td>gzip</td><td>1.12-1</td><td>—</td><td>GNU gzip contains a global buffer overflow vulnerability in the LZH de ...</td></tr><tr><td>HIGH</td><td>CVE-2026-42497</td><td>perl-base</td><td>5.36.0-7+deb12u3</td><td>—</td><td>perl-Archive-Tar: perl-Archive-Tar: Arbitrary file modification via crafted hardlinks during archive extraction</td></tr><tr><td>HIGH</td><td>CVE-2026-48962</td><td>perl-base</td><td>5.36.0-7+deb12u3</td><td>—</td><td>perl-IO-Compress: perl-IO-Compress: Arbitrary code execution via attacker-controlled output glob</td></tr><tr><td>HIGH</td><td>CVE-2026-53615</td><td>bsdutils</td><td>1:2.38.1-5+deb12u3</td><td>—</td><td>[Integer Overflow or Wraparound in libblkid/src/partitions/dos.c]</td></tr><tr><td>HIGH</td><td>CVE-2026-53615</td><td>libblkid1</td><td>2.38.1-5+deb12u3</td><td>—</td><td>[Integer Overflow or Wraparound in libblkid/src/partitions/dos.c]</td></tr><tr><td>HIGH</td><td>CVE-2026-53615</td><td>libmount1</td><td>2.38.1-5+deb12u3</td><td>—</td><td>[Integer Overflow or Wraparound in libblkid/src/partitions/dos.c]</td></tr><tr><td>HIGH</td><td>CVE-2026-53615</td><td>libsmartcols1</td><td>2.38.1-5+deb12u3</td><td>—</td><td>[Integer Overflow or Wraparound in libblkid/src/partitions/dos.c]</td></tr><tr><td>HIGH</td><td>CVE-2026-53615</td><td>libuuid1</td><td>2.38.1-5+deb12u3</td><td>—</td><td>[Integer Overflow or Wraparound in libblkid/src/partitions/dos.c]</td></tr><tr><td>HIGH</td><td>CVE-2026-53615</td><td>mount</td><td>2.38.1-5+deb12u3</td><td>—</td><td>[Integer Overflow or Wraparound in libblkid/src/partitions/dos.c]</td></tr><tr><td>HIGH</td><td>CVE-2026-53615</td><td>util-linux</td><td>2.38.1-5+deb12u3</td><td>—</td><td>[Integer Overflow or Wraparound in libblkid/src/partitions/dos.c]</td></tr><tr><td>HIGH</td><td>CVE-2026-53615</td><td>util-linux-extra</td><td>2.38.1-5+deb12u3</td><td>—</td><td>[Integer Overflow or Wraparound in libblkid/src/partitions/dos.c]</td></tr><tr><td>HIGH</td><td>CVE-2026-54369</td><td>libacl1</td><td>2.3.1-3</td><td>—</td><td>acl: Symlink traversal privilege escalation via libacl functions</td></tr><tr><td>HIGH</td><td>CVE-2026-57432</td><td>perl-base</td><td>5.36.0-7+deb12u3</td><td>—</td><td>perl: Perl: Information disclosure via integer overflow in pack/unpack operations</td></tr><tr><td>HIGH</td><td>CVE-2026-9538</td><td>perl-base</td><td>5.36.0-7+deb12u3</td><td>—</td><td>perl-Archive-Tar: perl-Archive-Tar: Denial of Service via crafted tar header with large entry size</td></tr></tbody> | ||
| </table> | ||
| </section> | ||
| <section> | ||
| <h2>Artifacts</h2> | ||
| <p class="note">Machine-readable outputs were written under gitignored <code>security-reports/</code> (Syft SBOM, Trivy/Grype/OSV JSON, Dockle JSON, status notes for Snyk/Scout/Dive). Tracked HTML lives in <code>security/reports/</code>.</p> | ||
| </section> | ||
| </main> | ||
| </body> | ||
| </html> | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,70 @@ | ||
| <!DOCTYPE html> | ||
| <html lang="en"> | ||
| <head> | ||
| <meta charset="utf-8"/> | ||
| <title>fastWorkflow vulnerability human review — 2026-08-08 18:58 UTC</title> | ||
| <style> | ||
|
Comment on lines
+4
to
+6
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. suggestion: Mirror the viewport meta tag here to keep the human-review report mobile-friendly as well. Without a viewport meta tag, this page will render poorly on phones and narrow viewports. Please add the same standard viewport meta line used in the CVE report to improve readability and keep the reports consistent. |
||
| body { margin:0; font-family:"IBM Plex Sans","Source Sans 3","Segoe UI",sans-serif; color:#1a1d23; background:linear-gradient(180deg,#f3efe8,#f7f8fa); } | ||
| header { padding:2.5rem 2rem 1.25rem; background:#fff; border-bottom:1px solid #d8dee6; } | ||
| h1 { margin:0 0 .4rem; font-size:1.7rem; } | ||
| .sub { color:#5c6570; max-width:70ch; line-height:1.45; } | ||
| main { padding:1.5rem 2rem 3rem; display:grid; gap:1rem; } | ||
| article { background:#fff; border:1px solid #d8dee6; border-radius:12px; padding:1.2rem 1.4rem; } | ||
| .rec { display:inline-block; font-weight:700; letter-spacing:.04em; padding:.25rem .65rem; border-radius:6px; margin-bottom:.6rem; } | ||
| h3 { margin:.2rem 0 .6rem; } | ||
| h4 { margin:1rem 0 .35rem; font-size:.95rem; color:#3b4450; } | ||
| p { margin:.35rem 0; line-height:1.5; } | ||
| .meta { color:#5c6570; font-size:.92rem; } | ||
| .legend { display:flex; gap:1rem; margin-top:1rem; } | ||
| .legend span { padding:.2rem .55rem; border-radius:6px; font-weight:600; font-size:.8rem; } | ||
| </style> | ||
| </head> | ||
| <body> | ||
| <header> | ||
| <h1>Vulnerabilities requiring human review</h1> | ||
| <p class="sub">Findings that cannot be closed by an easy <code>pyproject.toml</code> version bump. Each item has a recommendation of <strong>FIX</strong> or <strong>IGNORE</strong> with documented rationale. Generated 2026-08-08 18:58 UTC.</p> | ||
| <div class="legend"> | ||
| <span style="background:#e5f6ec;color:#0b6b3a">IGNORE = accept / already VEX’d / out of product scope</span> | ||
| <span style="background:#fde8e8;color:#9b1c1c">FIX = code or process change required</span> | ||
| </div> | ||
| </header> | ||
| <main> | ||
|
|
||
| <article> | ||
| <div class="rec" style="background:#e5f6ec;color:#0b6b3a">IGNORE</div> | ||
| <h3>Unsafe pickle deserialization in DiskCache</h3> | ||
| <p class="meta"><strong>ID:</strong> CVE-2025-69872 / GHSA-w8v5-vhqr-4h9v / PYSEC-2026-2447<br/> | ||
| <strong>Component:</strong> diskcache 5.6.3 (transitive via dspy)</p> | ||
| <h4>Why a code / process change (not pyproject alone)</h4> | ||
| <p>No patched PyPI release exists (latest still 5.6.3). 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).</p> | ||
| <h4>Rationale</h4> | ||
| <p>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.</p> | ||
| </article> | ||
| <article> | ||
| <div class="rec" style="background:#e5f6ec;color:#0b6b3a">IGNORE</div> | ||
| <h3>6 Critical / 18 High findings on proxy scan image</h3> | ||
| <p class="meta"><strong>ID:</strong> Proxy base image OS CVEs (Trivy/Grype on python:3.12-slim-bookworm)<br/> | ||
| <strong>Component:</strong> Debian bookworm packages in python:3.12-slim-bookworm (not shipped by this repo)</p> | ||
| <h4>Why a code / process change (not pyproject alone)</h4> | ||
| <p>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.</p> | ||
| <h4>Rationale</h4> | ||
| <p>fastWorkflow is distributed as a PyPI package, not a container image. Proxy image scan was performed only to exercise Dockle/Dive/Trivy-image/Grype-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.</p> | ||
| </article> | ||
| <article> | ||
| <div class="rec" style="background:#e5f6ec;color:#0b6b3a">IGNORE</div> | ||
| <h3>Container runs as root; no HEALTHCHECK; content trust unset</h3> | ||
| <p class="meta"><strong>ID:</strong> Dockle CIS-DI-0001 (and related INFO findings)<br/> | ||
| <strong>Component:</strong> python:3.12-slim-bookworm proxy image</p> | ||
| <h4>Why a code / process change (not pyproject alone)</h4> | ||
| <p>Requires Dockerfile USER/HEALTHCHECK instructions and deployment content-trust policy — not addressable in pyproject.toml.</p> | ||
| <h4>Rationale</h4> | ||
| <p>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.</p> | ||
| </article> | ||
| <section style="background:#fff;border:1px solid #d8dee6;border-radius:12px;padding:1.2rem 1.4rem"> | ||
| <h3>pyproject.toml easy-fix outcome</h3> | ||
| <p>No third-party package vulnerability in the locked graph had a fixed version available on PyPI. Therefore this PR does <em>not</em> change dependency pins for CVE remediation. Prior release work (v2.25–v2.30) already raised floors for litellm, python-multipart, starlette, cryptography, aiohttp, urllib3, requests, setuptools, and related packages.</p> | ||
| <p class="meta">Optional follow-ups (not done here): add <code>SNYK_TOKEN</code> / Docker Hub auth for Scout; publish a first-party runtime Dockerfile if container CVEs should become product backlog.</p> | ||
| </section> | ||
| </main> | ||
| </body> | ||
| </html> | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
suggestion: Add a viewport meta tag for better mobile and small-screen rendering.
The page currently lacks a
<meta name="viewport">, so it will appear zoomed out with small text on mobile. Please add a tag like:to improve readability on smaller screens.
Suggested implementation:
None needed beyond this insertion; the existing CSS will automatically adapt better on small screens once the viewport is correctly set.