Help us improve
Share bugs, ideas, or general feedback.
How this skill is triggered — by the user, by Claude, or both
Slash command
/gh-guard:security-findingsThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Multiple gh-guard components produce security findings: CodeQL (static analysis), Scorecard (supply chain posture), cargo-deny (dependency policy), and cargo-audit (vulnerability advisories). This skill covers how to consume, triage, and act on these findings.
This skill should be used when the user asks to "triage security findings", "fix a Checkmarx finding", "review SonarCloud results", "dismiss a false positive", "check code scanning alerts", or needs to work with GitHub Advanced Security alerts, scanner annotations on PRs, or Grype vulnerability results.
Provides Rust-specific guidance for all 18 OpenSSF Scorecard security checks with implementation steps, file templates, and CI workflows to maximize scores.
Triages compromised GitHub Actions supply chain attacks with interactive checklists, full runbooks, or shell scripts for exposure checks, log audits, secret rotation, and remediation.
Share bugs, ideas, or general feedback.
Multiple gh-guard components produce security findings: CodeQL (static analysis), Scorecard (supply chain posture), cargo-deny (dependency policy), and cargo-audit (vulnerability advisories). This skill covers how to consume, triage, and act on these findings.
| Source | Format | Destination | Update Frequency |
|---|---|---|---|
| CodeQL | SARIF | GitHub Security > Code scanning | Push to main, PRs, weekly |
| Scorecard | SARIF + JSON | GitHub Security > Code scanning + api.securityscorecards.dev | Push to main, weekly |
| cargo-deny | CI output | PR checks (fail/pass) | Every PR |
| cargo-audit | CI output | PR checks (fail/pass) | Every PR |
| Dependabot | Alerts + PRs | GitHub Security > Dependabot | Continuous |
All SARIF-producing tools upload to GitHub's Code Scanning interface:
| Severity | Source | SLA | Action |
|---|---|---|---|
| Critical/High | cargo-audit (CVE) | Fix within 7 days | Upgrade dependency or apply patch |
| Critical/High | CodeQL | Fix within 14 days | Code change to resolve the finding |
| Medium | Any | Fix in next release | Plan the fix, track in issues |
| Low/Informational | Any | Backlog | Review periodically |
| Scorecard check | Scorecard | Best effort | Improve configuration |
Legitimate reasons to dismiss a finding:
Always add a comment explaining why when dismissing.
| Rule | Description | Typical Fix |
|---|---|---|
rust/sql-injection | User input in SQL queries | Use parameterized queries |
rust/unsafe-block | Unsafe code blocks | Add SAFETY comments, minimize unsafe scope |
rust/uncontrolled-format-string | Format string from user input | Use {} with explicit arguments |
In Rust code, use comments (CodeQL doesn't have Rust-specific suppression yet):
// codeql[rust/unsafe-block]: Required for FFI interop with libfoo — see SAFETY comment above
Scorecard findings appear as informational alerts. Focus on:
See the scorecard-checks skill for detailed guidance on improving each check.
When the advisory leg of cargo-deny reports a finding:
cargo update -p <crate>deny.toml:
[advisories]
ignore = ["RUSTSEC-2024-XXXX"] # Reason: not in our code path, fix pending upstream
These block PRs. Fix by:
For low-risk updates, configure auto-merge:
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: cargo
directory: "/"
schedule:
interval: weekly
open-pull-requests-limit: 5
Then in a workflow:
# Auto-merge patch-level Dependabot PRs
- name: Auto-merge
if: github.actor == 'dependabot[bot]'
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
When a GitHub Action you depend on is compromised (e.g., the March 2026 Trivy tag hijacking), follow this playbook:
tpcp-docs or similar (the Trivy attacker used victim PATs to create exfil repos)GITHUB_TOKEN (auto-rotates, but check for any PATs used)permissions: read-all + per-job scoping) limits what a compromised action can accesspersist-credentials: false on checkout steps prevents the action from using the git credential