Skip to content

docs: Adopt GitHub Private Vulnerability Reporting Workflow#477

Open
Aloui-Ikram wants to merge 3 commits into
mainfrom
docs/github-security-reporting
Open

docs: Adopt GitHub Private Vulnerability Reporting Workflow#477
Aloui-Ikram wants to merge 3 commits into
mainfrom
docs/github-security-reporting

Conversation

@Aloui-Ikram

Copy link
Copy Markdown
Member

Reference implementation of goharbor/community#292 on harbor-next: replace
mailing-list-based security reporting with GitHub private vulnerability
reporting (PVR) and repository security advisories, so upstream goharbor/harbor
can adopt a proven, tested setup.

What's in this PR

  • SECURITY.md : rewritten reporter-facing policy:
    • every intake route leads to the private report form (Security tab,
      direct link, issue chooser)
    • supported-versions table
    • concrete response targets: acknowledge within 3 business days, triage
      within 7 calendar days, critical fix within 14 business days, coordinated
      disclosure within 90 days
    • what reporters can expect: advisory collaboration, CVE request through
      GitHub, credit
    • deflection rules: known-CVE/public issues and unverified scanner output
      go to the public tracker, dependency findings to the dependency-update flow
  • docs/security-process.md : maintainer runbook: intake, triage with a
    CVSS severity ladder, embargoed fix in a temporary private fork, in-band
    CVE request (GitHub as CNA), coordinated disclosure, release-note
    conventions, and a per-advisory checklist
  • .github/workflows/codeql.yml : CodeQL for Go and JavaScript/TypeScript,
    build-mode none, security-extended queries, SHA-pinned actions (this PR
    triggers its first run)
  • .github/ISSUE_TEMPLATE/bug_report.yml : warning at the top directing
    security reports away from public issues (adopted from docs: switch security reporting to GitHub private vulnerability reporting goharbor/harbor#23559)
  • .typos.toml : allow the CNA acronym

Where the ideas come from

Each design choice follows a reference project studied for this work:

Source project Idea adopted here
Kubernetes 3-business-day acknowledge SLA; CVSS severity ladder that maps score bands to concrete fix deadlines
containerd The draft advisory as the single shared workspace between reporter and maintainers; support tied to release-line status
Argo CD Known-CVE deflection: issues with an existing CVE are public knowledge and belong in a public issue; last-3-minors support philosophy
Trivy Dependency findings are redirected out of the private queue; honest expectations about GitHub-as-CNA CVE timing
cert-manager Unverified scanner output is not accepted as a private report
Grafana Release-note convention: every fix release names its advisory, CVE, and patched versions

Verified

  • All 12 documentation links resolve on this branch
  • Private-report flow dry-run executed as far as the MAINTAIN role allows;
    key finding: triaging reports requires an org security-manager team or
    admin — currently a single-admin bottleneck (follow-up: org-level setup,
    outside this PR's scope)

Out of scope

Org-level admin steps (security-manager team, org-wide PVR default,
automated security fixes) ; tracked separately.

Related: goharbor/community#292, goharbor/harbor#23559

Implements the reference version of goharbor/community#292 on
harbor-next:

- SECURITY.md: supported-versions table, concrete response targets
  (ack 3 business days, triage 7 days, critical fix 14 business days,
  disclosure within 90 days), reporter expectations (advisory
  collaboration, CVE, credit), fallback for reporters without a
  GitHub account, and a known-CVE deflection rule.
- docs/security-process.md: maintainer runbook covering intake,
  triage with CVSS severity ladder, embargoed fix in a temporary
  private fork, in-band CVE request via GitHub as CNA, coordinated
  disclosure, release-note conventions, and a per-advisory checklist.
- .github/ISSUE_TEMPLATE/bug_report.yml: warning at the top telling
  reporters not to file security vulnerabilities as public issues.
- .github/workflows/codeql.yml: CodeQL scanning for Go and
  TypeScript (build-mode none, security-extended queries).
- .typos.toml: allow the CNA acronym.

Signed-off-by: aloui ikram <ikram@container-registry.com>
@Aloui-Ikram
Aloui-Ikram requested review from Vad1mo and bupd July 19, 2026 14:36
@coderabbitai

coderabbitai Bot commented Jul 19, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@Aloui-Ikram, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 47 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 022dc1e4-7974-4920-9e99-f669a9014c7b

📥 Commits

Reviewing files that changed from the base of the PR and between cef37c9 and cfdcc0c.

📒 Files selected for processing (1)
  • .typos.toml
📝 Walkthrough

Walkthrough

The pull request updates vulnerability reporting guidance, adds a maintainer security-response runbook, accepts CNA in typo checks, and introduces CodeQL analysis for Go and JavaScript/TypeScript on pushes, pull requests, and a weekly schedule.

Changes

Security Reporting Process

Layer / File(s) Summary
Reporter-facing security guidance
.github/ISSUE_TEMPLATE/bug_report.yml, SECURITY.md
Adds private vulnerability-reporting instructions, supported-version guidance, response targets, reporter expectations, and disclosure policies.
Maintainer response runbook
docs/security-process.md, .typos.toml
Documents triage, embargoed fixes, CVE coordination, releases, disclosure, post-disclosure actions, open items, and typo-checker handling for CNA.

CodeQL Analysis

Layer / File(s) Summary
CodeQL workflow execution
.github/workflows/codeql.yml
Adds CodeQL triggers, concurrency controls, permissions, language matrix, checkout, security-extended queries, and language-specific analysis categories.

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description covers the change well, but it does not follow the required template sections or include the checklist/testing fields. Add the required template sections (Summary, Related Issues, Type of Change, Release Notes, Testing, Checklist) and fill in the missing checkboxes.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately describes the main change: adopting GitHub private vulnerability reporting.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/github-security-reporting
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch docs/github-security-reporting

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added documentation Improvements or additions to documentation component/ci labels Jul 19, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

OpenSSF Scorecard

PackageVersionScoreDetails
actions/actions/checkout 9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 🟢 7
Details
CheckScoreReason
Code-Review🟢 10all changesets reviewed
Maintained🟢 1020 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Pinned-Dependencies🟢 3dependency not pinned by hash detected -- score normalized to 3
Packaging⚠️ -1packaging workflow not detected
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
SAST🟢 10SAST tool is run on all commits
Branch-Protection🟢 6branch protection is not maximal on development and all release branches
actions/github/codeql-action/analyze 99df26d4f13ea111d4ec1a7dddef6063f76b97e9 UnknownUnknown
actions/github/codeql-action/init 99df26d4f13ea111d4ec1a7dddef6063f76b97e9 UnknownUnknown

Scanned Files

  • .github/workflows/codeql.yml

@gitar-bot

gitar-bot Bot commented Jul 19, 2026

Copy link
Copy Markdown

Gitar is working

Gitar

@github-advanced-security

Copy link
Copy Markdown

You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool.

What Enabling Code Scanning Means:

  • The 'Security' tab will display more code scanning analysis results (e.g., for the default branch).
  • Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results.
  • You will be able to see the analysis results for the pull request's branch on this overview once the scans have completed and the checks have passed.

For more information about GitHub Code Scanning, check out the documentation.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
.github/workflows/codeql.yml (1)

17-19: 🩺 Stability & Availability | 🔵 Trivial | 💤 Low value

Consider preserving in-progress scans on the default branch.

Setting cancel-in-progress: true unconditionally will cancel running scans for earlier commits when a new push to main occurs. While this saves runner minutes, it may result in some merged commits not having their own specific scan results attached to the default branch history. It is generally recommended to only cancel in-progress runs on pull requests.

💡 Proposed refactor to only cancel on PRs
 concurrency:
   group: codeql-${{ github.event.pull_request.number || github.ref }}
-  cancel-in-progress: true
+  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/codeql.yml around lines 17 - 19, Update the workflow’s
concurrency configuration so cancel-in-progress is enabled only for pull request
runs and disabled for pushes to the default branch. Preserve the existing CodeQL
concurrency group and ensure scans triggered by main commits are allowed to
complete.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/codeql.yml:
- Around line 25-26: Add contents: read and actions: read to the job-level
permissions block alongside security-events: write, preserving the existing
permission while allowing actions/checkout and the CodeQL action to access the
repository.

In @.typos.toml:
- Around line 25-26: Change the dictionary exception key in the
[default.extend-words] configuration from uppercase CNA to lowercase cna,
preserving the mapped value and existing security terminology comment.

---

Nitpick comments:
In @.github/workflows/codeql.yml:
- Around line 17-19: Update the workflow’s concurrency configuration so
cancel-in-progress is enabled only for pull request runs and disabled for pushes
to the default branch. Preserve the existing CodeQL concurrency group and ensure
scans triggered by main commits are allowed to complete.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f5fe9cbc-8f3a-4035-9e36-facf6b457605

📥 Commits

Reviewing files that changed from the base of the PR and between 044468c and be888e2.

📒 Files selected for processing (5)
  • .github/ISSUE_TEMPLATE/bug_report.yml
  • .github/workflows/codeql.yml
  • .typos.toml
  • SECURITY.md
  • docs/security-process.md

Comment thread .github/workflows/codeql.yml
Comment thread .typos.toml

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 5 files

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread .github/workflows/codeql.yml Outdated
Comment thread .github/workflows/codeql.yml
Comment thread .typos.toml
aloui ikram added 2 commits July 19, 2026 17:56
- Go does not support build-mode none (fails on CodeQL 2.26.1); use
  autobuild for Go, keep none for JS/TS.
- Job-level permissions override workflow read-all: add actions: read
  and contents: read alongside security-events: write.
- typos lowercases words before dictionary lookup: extend-words key
  must be lowercase (cna).

Signed-off-by: aloui ikram <ikram@container-registry.com>
The lowercase key made typos treat cna as a typo with correction CNA,
flagging every legitimate CNA occurrence (error: CNA should be CNA).
The uppercase form passed CI on the first run; restore it.

Signed-off-by: aloui ikram <ikram@container-registry.com>
@Aloui-Ikram

Copy link
Copy Markdown
Member Author

Hi @bupd, could you please review this PR when you have time? Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component/ci documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants