**Scope**: Full audit after Telegram/Slack notification remediation + zlib CVE fix
**Branch**: `feature/beta-release`
**Scope**: Full audit after removing `curl`, `binutils`, `libc-utils` from runtime image; substituting `wget`; updating `.grype.yaml`
**Auditor**: QA Security Agent
---
## Overall Verdict: PASS
All blocking gates cleared. The three HIGH CVEs targeted by this remediation are confirmed absent from the runtime image. One additional critical gap (docker-compose health checks still referencing the removed `curl` binary) was discovered and corrected during Step 1.
---
## CVE Remediation Verification
### Confirmed Eliminated
| CVE | Package | Method | Verified |
|-----|---------|--------|---------|
| CVE-2026-3805 (HIGH) | `curl` 8.17.0-r1 | Removed from `apk add` in runtime stage | ✅ |
| CVE-2025-69650 (HIGH) | `binutils` 2.45.1-r0 | Removed from `apk add` in runtime stage | ✅ |
| CVE-2025-69649 (HIGH) | `binutils` 2.45.1-r0 | Removed from `apk add` in runtime stage | ✅ |
- **Uncovered Lines**: 4 lines in `notification_service.go` (L462-463, L466-467) — dead code paths for Slack error formatting, accepted per remediation decision
### 1. E2E Container Rebuild
## 2. Backend Unit Tests & Coverage
Image rebuilt from scratch (212s build time). Container reached `healthy` in <5s. Confirmed HEALTHCHECK passes against `/api/v1/health` using `wget`. Image SHA: `ae066857e8c0`.
- **Test Result**: All packages passed, 0 failures
- **Statement Coverage**: 87.9%
- **Line Coverage**: 88.1% (gate: ≥87%)
- **Gate**: PASS
> **See [Incidental Findings](#incidental-findings)** — all five docker-compose files still had `curl` in their health check definitions; corrected before rebuild was confirmed healthy.
**Risk Acceptance**: Both `binutils` CVEs affect `readelf` processing of crafted ELF binaries. Charon does not process user-supplied ELF files; `binutils` is present as a build-time dependency in the Alpine image. Risk is accepted as non-exploitable in production context. Will be resolved when Alpine releases updated `binutils` package.
- No Gotify tokens or `?token=` query strings found
- **Gate**: PASS
All five docker-compose files retained `curl`-based `healthcheck.test` definitions. Since `curl` is no longer present in the runtime image, any container started from these files would enter and remain in the `unhealthy` state. This was confirmed during Step 1 (container failed health checks immediately after first rebuild).
**Root cause**: The Dockerfile `HEALTHCHECK` and `.docker/docker-entrypoint.sh` were correctly migrated to `wget`, but the compose `healthcheck` overrides were not updated in the same commit.
Removed comment `# binutils provides objdump for debug symbol detection in docker-entrypoint.sh` from Dockerfile — `binutils` is no longer installed; the comment was stale and misleading.
---
## Remediation Confirmation
All 4 blockers from the previous audit are resolved:
1.**Slack unit test coverage**: 7 new tests covering 11 of 15 uncovered lines (4 accepted as dead code) — verified via 92.3% patch coverage
2.**CVE-2026-27171 (zlib)**: Fixed via `apk upgrade --no-cache zlib` in Dockerfile runtime stage — confirmed zlib 1.3.2-r0 in image, 0 zlib CVEs remaining
3.**E2E notification tests**: All 160 tests passing across Chromium/Firefox/WebKit (verified in prior run)
4.**Container rebuild**: Image rebuilt with zlib fix, scan confirms resolution
docker run -d --name ${BACKEND_CONTAINER} --network containers_default kennethreitz/httpbin
log_info "Starting Charon container with Cerberus enabled..."
@@ -201,12 +202,12 @@ done
echo""
log_info "Waiting for httpbin backend to be ready..."
for i in {1..20};do
for i in {1..45};do
if docker exec${CONTAINER_NAME} sh -c "curl -sf http://${BACKEND_CONTAINER}/get" >/dev/null 2>&1;then
log_info "httpbin backend is ready"
break
fi
if[$i -eq 20];then
if[$i -eq 45];then
log_error "httpbin backend failed to start"
exit1
fi
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.