원클릭으로
patch-cve
// Use this skill when the user asks to "patch a CVE", "fix a CVE", "handle a CVE", "check a CVE", or discusses Docker image vulnerabilities, docker scout findings, or Go/dependency CVE remediation in the Dockerfile.
// Use this skill when the user asks to "patch a CVE", "fix a CVE", "handle a CVE", "check a CVE", or discusses Docker image vulnerabilities, docker scout findings, or Go/dependency CVE remediation in the Dockerfile.
Guide for investigating slow PostgreSQL queries
AWS Lambda High Latency Troubleshooting
Troubleshooting Application Gateway Problems
Database Connection Troubleshooting
Python Application Memory Troubleshooting
Service Connectivity Issues
| name | patch-cve |
| description | Use this skill when the user asks to "patch a CVE", "fix a CVE", "handle a CVE", "check a CVE", or discusses Docker image vulnerabilities, docker scout findings, or Go/dependency CVE remediation in the Dockerfile. |
| version | 0.1.0 |
This skill provides the workflow for patching CVEs found in the HolmesGPT Docker image. It covers identifying the source, checking if upstream fixes exist, applying patches, and validating the fix.
1. Identify → 2. Check upstream → 3. Apply fix → 4. Build → 5. Validate → 6. Cleanup
Run docker scout cves on the current image to understand which package/binary introduces the CVE:
docker scout cves <image> 2>&1 | grep -B20 -A5 "CVE-XXXX-XXXXX"
Key info to extract:
stdlib 1.25.5 (Go standard library), a system package, or a Python dependency>=1.25.0-0, <1.25.71.25.7Before rebuilding from source, always check if a newer release of the affected tool already includes the fix.
Check the latest release version:
curl -s https://api.github.com/repos/<org>/<repo>/releases/latest | python3 -c "import sys,json; print(json.load(sys.stdin)['tag_name'])"
Check Go version in that release — download the binary and inspect:
# For tools that show version info with Go version
./<tool> version
Or check go.mod in the release tag:
curl -s https://raw.githubusercontent.com/<org>/<repo>/<tag>/go.mod | head -5
Important:
go.modshows the minimum Go version, but the binary may be compiled with a newer Go toolchain. Always prefer checking the actual binary's version output.
Check upstream PRs/issues for the CVE — it may be merged to master but not yet in a release branch. Search:
https://github.com/<org>/<repo>/pulls?q=CVE-XXXX-XXXXX
Check if a newer version is available:
apt-get update && apt-cache policy <package>
Check if a newer version fixes the CVE:
pip index versions <package>
Choose the appropriate strategy based on findings:
If a newer release includes the fix, simply update the version in the Dockerfile:
ARG TOOL_VERSION=vX.Y.Z # Updated from vX.Y.W to fix CVE-XXXX-XXXXX
If upstream hasn't released a fix yet, rebuild the tool from source. For Go CVEs:
FROM golang:<fixed-version> AS go-builder
RUN git clone --depth 1 --branch <version> <repo> /build/<tool>
WORKDIR /build/<tool>
RUN CGO_ENABLED=0 go build -o /go/bin/<tool> <build-path>
Or use the pre-built binary approach (see Strategy C).
For tools that are slow to compile, build locally for both architectures and commit to the repo:
scripts/ (see scripts/build_go_binaries.sh for reference)linux/amd64 and linux/arm64 using cross-compilation:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/<tool>/amd64/<tool> <build-path>
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o bin/<tool>/arm64/<tool> <build-path>
ARG TARGETARCH in Dockerfile to select the right binary:
ARG TARGETARCH
COPY bin/<tool>/${TARGETARCH}/<tool> /usr/local/bin/<tool>
For apt packages:
RUN apt-get install -y <package>=<fixed-version>
Build for the target platform:
docker build --platform linux/amd64 -t holmes-cve-test:latest .
Note: For a quick validation, building for a single platform is sufficient. Multi-platform builds (
linux/amd64,linux/arm64) can be done after the fix is confirmed.
This is the most critical step. Never skip validation.
docker scout cves holmes-cve-test:latest 2>&1 | grep -A5 "CVE-XXXX-XXXXX"
docker scout cves holmes-cve-test:latest 2>&1 | grep -E "✗ (CRITICAL|HIGH)"
Check if the fix introduced any new vulnerabilities or if there are other CVEs that should be addressed.
docker run --rm holmes-cve-test:latest <tool> version
docker run --rm holmes-cve-test:latest <tool> --help
Add comments in the Dockerfile explaining the CVE patch and when it can be reverted:
# Rebuilt with Go 1.25.7 to fix CVE-2025-68121.
# Revert when <tool> releases a version built with Go >= 1.25.7.
Remove temporary workarounds when upstream releases a fix. Keep track of what needs reverting.
Clean up test images:
docker rmi holmes-cve-test:latest
These are the most common. A CVE in Go's standard library affects every Go binary in the image. Steps:
When the image contains multiple Go binaries (e.g., ArgoCD + Helm), each may use a different Go version. Check and fix each independently — don't assume fixing one fixes all.
docker scout cves and confirmed the CVE is gone--help, version)