Skip to content

Add Chrome Releases blog integration to security-audit skill#4097

Merged
mattleibow merged 18 commits into
mainfrom
mattleibow/dev-security-audit-chrome-releases
May 29, 2026
Merged

Add Chrome Releases blog integration to security-audit skill#4097
mattleibow merged 18 commits into
mainfrom
mattleibow/dev-security-audit-chrome-releases

Conversation

@mattleibow

Copy link
Copy Markdown
Contributor

Summary

Integrates the Chrome Releases blog as a data source for the security-audit skill, providing early CVE detection (often before NVD) and cross-validation with existing NVD data. Also adds a Markdown report renderer and numerous HTML viewer improvements.

New Features

Chrome Releases Blog Integration

  • query-chrome-releases.py — Fetches RSS feed, extracts Skia-relevant CVEs (regex-based), caches results for 24h
  • Two-pass review: deterministic regex extraction + AI broad scan
  • Cross-references with NVD data (sets source field: "both", "chrome_releases", or "nvd")
  • Reference doc: references/chrome-releases.md

Markdown Report Renderer

  • render-security-audit-md.py — Generates comprehensive markdown from JSON for AI consumption
  • Full descriptions (no truncation), sanitized for table safety
  • Section order: Summary → Findings → CG Alerts → Chrome Releases → Version Verification → Next Steps

HTML Viewer Improvements

  • Chrome Releases section with severity cards + CVE table
  • Blog post link column for each CVE
  • Component priority sorting (Skia first, then ANGLE, Canvas, etc.)
  • Descriptive text on summary cards
  • Compact CVE tables with click-to-expand descriptions
  • Fixed column widths (description 50%/35%, source 150px)
  • Conditional "Fixed In" column (hidden when no data)
  • Sort: affected/severity-first ordering

Eval Updates

Workflow Changes

  • Step 1.5 added: Query Chrome Releases blog
  • Step 10 now renders both HTML + MD
  • Step 11 simplified: point to generated files instead of manual in-chat markdown

Files Changed

Area Files
Scripts scripts/query-chrome-releases.py, scripts/render-security-audit-md.py
References references/chrome-releases.md
HTML scripts/viewer.html
Skill SKILL.md
Evals evals/evals.json

mattleibow and others added 17 commits May 29, 2026 18:10
Integrate the Chrome Releases blog (chromereleases.googleblog.com) as an
additional data source for the security-audit skill. This provides:

- Earlier detection of Skia/ANGLE CVEs (blog publishes before NVD)
- Explicit component tagging (Skia, ANGLE, Canvas, GPU, Fonts)
- Direct milestone-to-CVE mapping from Chrome version numbers
- Cross-validation of NVD findings

Uses a two-pass approach for robustness:
- Pass 1: Deterministic regex extraction from the known blog format
- Pass 2: Raw text included for AI review (catches format changes)

New files:
- scripts/query-chrome-releases.py: RSS fetcher with keyword filtering,
  regex CVE extraction, and caching (no external dependencies)
- references/chrome-releases.md: Reference doc for AI review instructions

Updated files:
- SKILL.md: Added Step 1.5 (Chrome Releases query), renumbered steps
- references/skia-cve-resolution.md: Cross-reference instructions
- references/third-party-deps.md: ANGLE coverage note
- references/report-schema.md: chromeReleases section + source field

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Added 6 Chrome Releases assertions to eval #1 (full audit)
- Added new eval #4 specifically for Chrome Releases blog integration
- Total: 4 evals with 56 expectations

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Renders the chromeReleases data in a new card section with:
- Severity breakdown cards (Critical/High/Medium/Low + above-milestone count)
- CVE table grouped by component (only shows CVEs above current milestone)
- Meta line with query stats (months, posts, totals)
- Badge in header showing relevant CVE count

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Each CVE row now has a 'Blog' column with a link icon pointing to the
Chrome Releases blog post where it was disclosed.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Component priority order: Skia > ANGLE > Canvas > Fonts > GPU >
Compositing > WebGL > others. Within same priority, sort by severity.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Each top card now shows a small description below the label:
- Needs Attention: 'CVEs requiring action or patches'
- CG Alerts: 'Build pipeline container vulnerabilities'
- Undiscovered: 'Proactively found, no issue filed yet'
- False Positive: 'Not applicable to SkiaSharp'
- Clean: 'Dependencies with no open CVEs'

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- CVE IDs and severity now use white-space:nowrap to prevent wrapping
- Descriptions truncated to 60 chars with '…' indicator
- Click description to expand a hidden row with full text
- Chevron icon hints at expandability
- Keeps table compact and scannable

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Table uses table-layout:fixed so columns respect widths
- CVE, Severity, CVSS, Fixed In, Status get fixed narrow widths
- Description gets all remaining space with text-overflow:ellipsis
- Click row to expand full description below
- No more wrapping on CVE IDs or severity text

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…me CVE tables

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Skia CVEs: maps fixMilestone -> fixedIn for display
- Non-Skia deps: hides the 'Fixed In' column entirely when no data
- Avoids showing a blank column that wastes space

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sort order: potentially_affected/affected > undiscovered > already_fixed
> false_positive. Within each group, Critical > High > Medium > Low.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
New script: render-security-audit-md.py generates a comprehensive MD
report from the JSON, including all sections:
- Summary table with status counts
- Chrome Releases blog (CVEs above milestone, by-component breakdown)
- Findings sorted by assessment priority, then severity
- CG alerts with Critical/High detail table
- Version verification table
- Next steps with commands

Updated SKILL.md to reference new script and update Step 10 to
render both HTML + MD.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The render-security-audit-md.py script now produces the full MD report
automatically. Step 11 no longer asks the AI to manually compose a
markdown summary — just point to the 3 generated files and highlight
top actionable items.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The markdown report is primarily for AI consumption, so full
descriptions are needed for proper analysis. Removed 80-char
truncation from both CVE tables and Non-Chrome CVE tables.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Added sanitize_cell() to replace newlines with spaces and escape
  pipe characters in descriptions — fixes broken table rendering
- Moved Chrome Releases section after CG Alerts (order: Summary →
  Findings → CG → Chrome Releases → Version Verification → Next Steps)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The JSON uses 'name' not 'dependency' for version verification entries.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented May 29, 2026

Copy link
Copy Markdown
Contributor

📦 Try the packages from this PR

Warning

Do not run these scripts without first reviewing the code in this PR.

Step 1 — Download the packages

bash / macOS / Linux:

curl -fsSL https://raw.githubusercontent.com/mono/SkiaSharp/main/scripts/get-skiasharp-pr.sh | bash -s -- 4097

PowerShell / Windows:

iex "& { $(irm https://raw.githubusercontent.com/mono/SkiaSharp/main/scripts/get-skiasharp-pr.ps1) } 4097"

Step 2 — Add the local NuGet source

dotnet nuget add source ~/.skiasharp/hives/pr-4097/packages --name skiasharp-pr-4097
More options
Option Description
--successful-only / -SuccessfulOnly Only use successful builds
--force / -Force Overwrite previously downloaded packages
--list / -List List available artifacts without downloading
--build-id ID / -BuildId ID Download from a specific build

Or download manually from Azure Pipelines — look for the nuget artifact on the build for this PR.

Remove the source when you're done:

dotnet nuget remove source skiasharp-pr-4097

B1: Fix field-name contradiction between schema, docs, and renderers.
    - report-schema.md now documents structuredCves as primary array
    - security-audit-schema.json requires structuredCves (not earlyDisclosures)
    - Added snake_case→camelCase field mapping docs
    - Added blogPostUrl propagation instructions

B2: Add chromeReleases as explicit key #6 in SKILL.md Step 8 with
    transformation instructions so the AI knows to emit it.

N1: MD renderer now shows resolution details (fixCommit, reachability,
    inOurTree, cherryPicksCleanly) when present on CVEs.

N2: MD header now includes upstream commit, verification note, and
    behind-by count when available.

N3: Cache freshness check now compares months_queried — requesting a
    wider window than cached invalidates the cache automatically.

N4: CVE_ENTRY_REGEX reporter/date tail is now optional, capturing
    embargoed entries that omit attribution.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

📖 Documentation Preview

The documentation for this PR has been deployed and is available at:

🔗 View Staging Site
🔗 View Staging Docs
🔗 View Staging Gallery (Blazor)
🔗 View Staging Gallery (Uno Platform)
🔗 View Staging SkiaFiddle

This preview will be updated automatically when you push new commits to this PR.


This comment is automatically updated by the documentation staging workflow.

@mattleibow
mattleibow merged commit 5c91396 into main May 29, 2026
6 checks passed
@mattleibow
mattleibow deleted the mattleibow/dev-security-audit-chrome-releases branch May 29, 2026 21:17
@mattleibow mattleibow added this to the 4.148.0-rc.1 milestone Jun 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant