20 KiB
description, argument-hint
| description | argument-hint |
|---|---|
| Analyze Go codebase for CVE vulnerabilities and suggest fixes | <CVE-ID> |
Name
compliance:analyze-cve
Synopsis
/compliance:analyze-cve <CVE-ID>
Description
The compliance:analyze-cve command performs comprehensive security vulnerability analysis for Go projects. Given a CVE identifier, it fetches complete vulnerability details from authoritative sources, analyzes the codebase for potential impact, and provides actionable remediation guidance.
This command helps developers:
- Understand the full scope of a CVE vulnerability
- Determine if their Go codebase is affected
- Get specific fix recommendations
- Optionally apply fixes automatically
Implementation
Phase 1: CVE Intelligence Gathering
-
Validate CVE Format
- Verify CVE ID follows standard format (e.g., CVE-2024-1234)
- Extract year and number components
-
Fetch CVE Details from Multiple Sources
Use web_search tool to gather information from these sources:
-
Primary Sources:
-
NVD: Search for "CVE-{ID} site:nvd.nist.gov"
- URL pattern: https://nvd.nist.gov/vuln/detail/{CVE-ID}
- Extract: CVSS score, severity, affected versions, vulnerability type
-
MITRE: Search for "CVE-{ID} site:cve.mitre.org"
- URL pattern: https://cve.mitre.org/cgi-bin/cvename.cgi?name={CVE-ID}
- Extract: Description, references, CWE classification
-
-
Go-Specific Sources:
-
Go Vulnerability Database: Search for "CVE-{ID} golang vulnerability"
- Check: https://go.dev/security/vuln/
- Search GitHub: "CVE-{ID} site:github.com/golang/vulndb"
- Extract: Affected Go packages, versions, fix versions
-
GitHub Security Advisories: Search for "CVE-{ID} golang GHSA"
- May have GHSA-* aliases
- Often contains detailed remediation steps
-
-
General Go Security:
- Search: "CVE-{ID} golang fix" or "CVE-{ID} go security"
- Look for blog posts, security advisories, and discussions
-
-
Handle Search Issues and Limited Results
-
If CVE details cannot be fetched (network error, search failure, insufficient results):
- Inform user about the lookup issue
- Try alternative search strategies:
- Search for package name + "vulnerability" + year
- Search for GHSA (GitHub Security Advisory) aliases
- Check if govulncheck finds it (most reliable for Go CVEs)
- If still unsuccessful, ask user to provide available information:
- CVE description and severity
- Affected Go packages/modules
- Vulnerable version ranges
- Fixed versions (if known)
- Any relevant links or references
- Document the source as "User-provided information"
- Note limitations in final report
-
If CVE is very new (e.g., CVE-2025-xxxxx):
- May not be in NVD or Go vulndb yet
- Search for: "CVE-{ID} disclosure" or "CVE-{ID} advisory"
- Check vendor security pages directly
- Run govulncheck anyway - it may know about it via GHSA
-
If suggested fixes cannot be found:
- Check the package's GitHub releases for recent security fixes
- Look for security-related commits in the repository
- Ask user if they have:
- Official security advisories
- Patch information
- Workaround documentation
- Any relevant fix details
- Proceed with available information
- Clearly mark sections as "Based on user input" vs "Verified online"
-
-
Gather Remediation Intelligence
- Search for:
- Official security advisories
- GitHub Security Advisories (GHSA)
- Vendor patches and updates
- Community discussions on GitHub, Go forums
- Follow hyperlinks to:
- Pull requests with fixes
- Security mailing list threads
- Blog posts with analysis
- Proof-of-concept exploits (for context)
- If searches fail or return insufficient results:
- Request user input for any known fixes or workarounds
- Accept partial information and document gaps
- Search for:
-
Compile Vulnerability Profile
- Create structured summary with:
- CVE ID and aliases (GHSA-*, etc.)
- Severity and CVSS metrics
- Affected packages/modules
- Vulnerable version ranges
- Fixed versions
- Attack vectors and prerequisites
- Impact assessment (confidentiality, integrity, availability)
- Recommended mitigations
- Clearly distinguish:
- Information from authoritative sources (NVD, MITRE, etc.)
- Information from web searches
- Information provided by user
- Information gaps or uncertainties
- Create structured summary with:
Phase 2: Codebase Impact Analysis
-
Identify Go Module Dependencies
- Read
go.modfile from workspace root - Parse direct and indirect dependencies
- Extract module versions using
go list -m all - Build dependency tree if needed
- Read
-
Cross-Reference Vulnerable Packages
-
Method 1: Dependency Matching
- Compare CVE-affected packages with
go.moddependencies - Check if affected package versions are in use
- Account for version ranges and semantic versioning
- Compare CVE-affected packages with
-
Method 2: Go Vulnerability Scanner
- Run
govulncheckif available in the environment - Command:
govulncheck ./... - Parse output for CVE matches
- Alternative: Use
go list -json -m alland cross-reference
- Run
-
Method 3: Direct Dependency Check
- Use
go listto verify package presence - Command:
go list -mod=mod <vulnerable-package> - Example:
go list -mod=mod golang.org/x/net/html - Confirms package is included (directly or transitively)
- Note: This alone doesn't prove vulnerable functions are called
- Use
-
Method 4: Call Graph Reachability Analysis (Highest Confidence)
- Build complete program call graph using
callgraphtool - Search for vulnerable function signatures in the graph
- Commands:
# Check if vulnerable function exists in call graph callgraph -format=digraph . | digraph nodes | grep "<vulnerable-function-signature>" # Find execution path from main to vulnerable function callgraph -format=digraph . | digraph somepath command-line-arguments.main <vulnerable-function> | digraph to dot - Example (for CVE-2024-45338 affecting
golang.org/x/net/html.Parse):# Step 1: Check if Parse is called anywhere callgraph -format=digraph . | digraph nodes | grep "golang.org/x/net/html.Parse$" # Step 2: Find path from main() to Parse() callgraph -format=digraph . | digraph somepath command-line-arguments.main golang.org/x/net/html.Parse - Interpretation:
- If path exists: Code is DEFINITELY vulnerable (reachable code path)
- If no path: Function may be dead code or only called conditionally
- Generates DOT graph showing exact call chain
- Visualization (optional):
callgraph -format=digraph . | digraph somepath <entrypoint> <vulnerable-func> | digraph to dot | sfdp -Tsvg -o callgraph.svg - Prerequisites: Install tools if missing
go install golang.org/x/tools/cmd/callgraph@latest go install golang.org/x/tools/cmd/digraph@latest
- Build complete program call graph using
-
Method 5: Source Code Analysis
- Search for import statements of vulnerable packages
- Use grep/codebase_search to find package usage
- Identify actual code paths that use vulnerable functions
- Check if vulnerable functions are called in reachable code
-
-
Verify Impact with Multiple Methods & Confidence Levels
Use multiple verification layers, with each providing increasing confidence:
-
Level 1: Basic Presence (Low Confidence)
- Check
go.modfor vulnerable package - Run:
go list -mod=mod <vulnerable-package> - Result: Confirms package is a dependency (direct or transitive)
- ⚠️ Limitation: Doesn't prove the vulnerable code is actually used
- Check
-
Level 2: Import & Version Analysis (Medium Confidence)
- Verify package is imported in source code (grep/codebase_search)
- Check version is in vulnerable range
- Search for vulnerable function/method names in codebase
- ⚠️ Limitation: Function may exist but not be in reachable code paths
-
Level 3: Vulnerability Scanner (Medium-High Confidence)
- Run
govulncheck ./...(official Go vulnerability checker) - Performs reachability analysis automatically
- Reports if vulnerable functions are actually called
- ✓ Advantage: Maintained by Go team, knows about CVEs
- Run
-
Level 4: Call Graph Reachability (Highest Confidence)
- Use
callgraph+digraphto prove execution path exists - Trace from
main()(or test entry points) to vulnerable function - Generate visual call graph showing exact path
- ✓ Advantage: Provides definitive proof with traceable evidence
- Example output shows complete call chain:
main → MyHandler → ParseHTML → html.Parse (VULNERABLE)
- Use
-
Level 5: Configuration & Context Analysis
- Review if vulnerable features are actually enabled
- Check if vulnerable code paths are behind feature flags
- Verify if inputs can reach vulnerable functions
- Consider security controls (input validation, sandboxing)
Recommended Approach: Use multiple methods and assign confidence:
- High Confidence (DEFINITELY AFFECTED):
- Call graph shows reachable path AND version is vulnerable
- OR govulncheck explicitly reports the CVE
- Medium Confidence (LIKELY AFFECTED):
- Package present + vulnerable version + function calls found
- But no call graph or reachability proof
- Low Confidence (POSSIBLY AFFECTED):
- Vulnerable package present but no direct usage evidence
- Not Affected:
- Package not present OR version not vulnerable OR dead code
-
-
Build Evidence Package
Collect comprehensive evidence for the report:
-
Dependency Evidence:
go.modentries showing vulnerable packagego listoutput confirming presence- Version information from
go list -m <package>
-
Static Code Evidence:
- File paths where vulnerable packages are imported
- Line numbers where vulnerable functions are called
- Code snippets showing usage context
-
Reachability Evidence (if call graph analysis performed):
- Call graph output showing vulnerable function in nodes
- Execution path from entry points to vulnerable code
- DOT graph visualization (saved to
.work/compliance/analyze-cve/{CVE-ID}/callgraph.svg) - Complete call chain as text (e.g., "main → handler → parse → VULN")
-
Scanner Evidence:
govulncheckoutput (full text)- Vulnerability findings with line numbers
-
Mitigation Factors:
- Input validation or sanitization in place
- Vulnerable features disabled by configuration
- Code behind feature flags or conditional execution
- Security controls limiting exposure
-
Confidence Assessment:
- List which verification methods were used
- Assign overall confidence level based on evidence
- Note any gaps in analysis or areas needing manual review
-
Phase 3: Report Generation
-
Create Analysis Report
-
Location:
.work/compliance/analyze-cve/{CVE-ID}/report.md -
Additional artifacts:
callgraph.svg(if generated)govulncheck-output.txt(if run)evidence.json(structured evidence data)
-
Include sections:
-
Executive Summary:
- Impact verdict (AFFECTED/NOT AFFECTED/UNKNOWN)
- Confidence level badge (HIGH/MEDIUM/LOW)
- Quick summary of findings
-
CVE Details:
- Full vulnerability information
- Tag information sources (e.g., "Source: NVD", "Source: User-provided")
- Affected package/function signatures
- Vulnerability type and attack vector
-
Analysis Methodology:
- List all verification methods used
- Note which tools were available (callgraph, govulncheck, etc.)
- Explain confidence level determination
- Example:
✓ Method 1: Dependency check (go list) - POSITIVE ✓ Method 2: Version analysis - VULNERABLE VERSION FOUND ✓ Method 3: govulncheck scan - CVE REPORTED ✓ Method 4: Call graph analysis - REACHABLE PATH FOUND → Confidence: HIGH
-
Dependency Analysis:
- Package versions from go.mod
- Direct vs. transitive dependencies
- Vulnerable package version range
-
Impact Assessment:
- Specific findings in codebase
- File paths and line numbers
- Code snippets showing vulnerable usage
- Reachability Analysis (if performed):
- Call chain from entry points to vulnerable functions
- Visual call graph (link to SVG)
- Interpretation of findings
-
Risk Level:
- Based on exploitability, exposure, and reachability
- Consider CVSS score + actual codebase context
-
Evidence:
- All collected evidence organized by type
- Terminal output from tools
- Screenshots or links to visualizations
-
Confidence Assessment:
- Final confidence: High/Medium/Low
- Justification based on methods used
- Gaps or limitations noted
- Recommendations for additional verification if needed
-
Remediation Steps:
- Specific fixes needed (version updates, code changes)
- Verification commands (prefer make targets, fallback to go commands)
- Note which make targets are available in the project
- Priority based on confidence level and risk
-
References:
- All sources consulted (automated + user-provided)
- Tool versions used
- Timestamp of analysis
-
-
-
Format Report
- Use clear markdown formatting
- Include severity badges
- Add code blocks for examples
- Link to external references
- Provide actionable recommendations
- Clearly mark user-provided information with labels like:
- "⚠️ Based on user-provided information"
- "✓ Verified from authoritative sources"
- "⚠️ Partial information - manual verification recommended"
Phase 4: Remediation Guidance
-
If Codebase is NOT Affected
- Explain why (version not vulnerable, package not used, etc.)
- Suggest preventive measures
- Recommend ongoing monitoring
-
If Codebase IS Affected
- Provide specific remediation steps:
-
Update Dependencies
- Exact
go getcommands to upgrade packages - Target version that fixes the CVE
- Consider semantic versioning compatibility
- Note: Use
go mod tidyafter updates
- Exact
-
Code Changes (if needed)
- Identify functions that need modification
- Provide before/after code examples
- Explain breaking changes if any
-
Workarounds (if no fix available)
- Suggest temporary mitigations
- Configuration changes to reduce risk
- Input validation or sanitization
-
Verification Commands
- Check for project's Makefile first
- Prefer project-specific make targets:
make verify,make build,make test - Fall back to standard Go commands if no Makefile
- Command to check for make targets:
make -qp | grep "^[a-zA-Z]" | head -20
-
Testing Recommendations
- Suggest tests to verify the fix
- Security test cases to add
- Regression testing guidance
- Re-run
govulncheckto confirm vulnerability is resolved
-
- Provide specific remediation steps:
Phase 5: Interactive Fix Application
-
Present Remediation Plan
- Show complete analysis report
- Highlight critical findings
- List all proposed fixes
-
Ask User for Permission
- "Would you like me to apply these fixes automatically?"
- Wait for explicit user confirmation
- Do NOT proceed without approval
-
If User Approves, Apply Fixes
-
Update go.mod and go.sum
- Run
go get -u <package>@<fixed-version> - Run
go mod tidyto clean up
- Run
-
Modify Source Code (if required)
- Apply code changes identified in Phase 4
- Use search_replace or write tools
- Maintain code style and formatting
-
Verify Changes
- Check if project has Makefile with common targets
- For verification:
- Try
make verifyfirst (if target exists) - Fallback:
go mod verify
- Try
- For building:
- Try
make buildfirst (if target exists) - Fallback:
go build ./...
- Try
- For testing:
- Try
make testfirst (if target exists) - Fallback:
go test ./...
- Try
- Re-check vulnerability:
- Run
govulncheck ./...to confirm fix
- Run
-
-
Document Changes
- Create summary of changes made
- List files modified
- Provide git diff summary
- Suggest commit message
Return Value
- Format: Markdown report at
.work/compliance/analyze-cve/{CVE-ID}/report.md - Content:
- Vulnerability details and severity
- Impact assessment (AFFECTED/NOT AFFECTED/UNCLEAR)
- Evidence from codebase analysis
- Specific remediation recommendations
- Applied fixes (if user approved)
Examples
- CVE analysis:
Analyzes the codebase for CVE-2024-45338
/compliance:analyze-cve CVE-2024-45338
Arguments
<CVE-ID>: The CVE identifier to analyze (e.g., CVE-2024-1234, CVE-2023-45678)- Format: CVE-YYYY-NNNNN
- Case insensitive
- Required argument
Notes
- The command focuses on Go-specific vulnerabilities
- Flexible Information Sources:
- Prefers automatic CVE lookup from authoritative sources (NVD, MITRE, Go vulndb)
- Falls back to user-provided information if internet access fails or CVE data is unavailable
- Clearly distinguishes between verified and user-provided information in reports
- Analysis may take several minutes for complex codebases
- If
govulncheckis not installed, the command will use alternative methods - The command does NOT make changes without explicit user approval
- Generated reports are saved locally and not committed to git
- When providing manual CVE information, include as much detail as possible:
- Affected Go package/module names
- Vulnerable and fixed version numbers
- Severity and CVSS score (if known)
- Links to security advisories or patches
Prerequisites
-
Required:
- Go toolchain installed (
go versionshould work) - Read access to
go.modand source files in the workspace
- Go toolchain installed (
-
Recommended (for comprehensive analysis):
- Internet connectivity for automatic CVE data fetching
govulncheck- Go's official vulnerability checkergo install golang.org/x/vuln/cmd/govulncheck@latestcallgraph&digraph- For reachability analysis (highest confidence)go install golang.org/x/tools/cmd/callgraph@latest go install golang.org/x/tools/cmd/digraph@latestsfdporgraphviz- For call graph visualization (optional)# macOS brew install graphviz # Linux sudo apt-get install graphviz
-
Alternative: If internet access is unavailable, be prepared to provide:
- CVE description and details
- Affected package information
- Specific vulnerable function signatures
- Remediation guidance from other sources
Tool Availability Check: The command will automatically detect which tools are available and use the most comprehensive methods possible. Missing tools will result in lower confidence levels but analysis will still proceed.
Exit Conditions
- Success: Report generated with clear impact assessment based on complete information
- Success with User Input: Report generated based on user-provided CVE details when internet access fails
- Partial Success: Report generated but impact is unclear (needs manual review)
- Marked with confidence level: "Low" or "Medium"
- Includes recommendations for further investigation
- Failure Scenarios:
- Invalid CVE format (must be CVE-YYYY-NNNNN)
- User declines to provide information when automatic lookup fails
- No Go-related information available (CVE is for different technology)
- Insufficient information to proceed with analysis