Runtime image ships BusyBox with unfixed CVE-2025-60876; consider a distroless/static base
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 52/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- docker, go
- Ambito
- infrastructure, security
Direzione di ricerca
Start by reading the Dockerfile runtime stage and checking how the image is built and tested; the issue does not name specific files or tests. Evaluate the proposed distroless base against runtime requirements such as certificates, ports, and existing shell-based workflows, then verify the resulting image no longer contains the flagged BusyBox packages and still runs the server.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
The published livekit/livekit-server image uses alpine:3.24.1 as its runtime stage, so it ships BusyBox. Container scanners flag CVE-2025-60876 (Medium, CVSS 6.5) on three packages from it:
| Package | Installed | Fixed |
|---|---|---|
| busybox | 1.37.0-r31 | not available |
| busybox-binsh | 1.37.0-r31 | not available |
| ssl_client | 1.37.0-r31 | not available |
The CVE is an HTTP request-target CR/LF injection in BusyBox wget. Alpine lists every branch (3.22, 3.23, 3.24 and edge) as "possibly vulnerable" with no fixed package (https://security.alpinelinux.org/vuln/CVE-2025-60876), so the apk upgrade --no-cache step in the Dockerfile cannot clear it, and a newer Alpine digest will not either.
livekit-server itself never invokes wget or a shell, so this is not reachable in practice. But the finding blocks security reviews for self-hosted deployments, and it will keep reappearing on every release until the runtime base changes.
Server
- Version: v1.13.7 and v1.13.8 (same
alpine:3.24.1runtime stage) - Environment: self-hosted, official Docker image
To Reproduce
docker pull livekit/livekit-server:v1.13.8- Scan it with any image scanner (Trivy, Grype, Wiz, ...)
- See CVE-2025-60876 on busybox, busybox-binsh and ssl_client
Expected behavior
The image does not ship packages the server does not use. The binary is built with CGO_ENABLED=0, so it is fully static and needs only CA certificates (and optionally tzdata) at runtime.
Suggested fix
Switch the runtime stage to a distroless static base, which has no shell, package manager or BusyBox:
FROM gcr.io/distroless/static-debian12:nonroot@sha256:<digest>
COPY --from=builder /workspace/livekit-server /livekit-server
ENTRYPOINT ["/livekit-server"]
- It includes
ca-certificates,tzdataand anonrootuser (uid 65532), so outbound TLS (webhooks, Redis TLS) keeps working. - The
apk upgradestep and its cache-busting caveat go away. - The
:nonrootvariant is fine for the default ports (7880, 7881, 3478/udp, 50000-60000/udp). Users who bind a privileged port inside the container (for example TURN/TLS on 443) would need the root variantgcr.io/distroless/static-debian12, ornet.ipv4.ip_unprivileged_port_start, which may be worth a release note. Alternatively, ship:nonrootbehind a separate tag. - Anyone relying on
docker exec ... shor a shell-based healthcheck would lose that;:debugvariants of distroless exist for troubleshooting.
As a workaround today, re-basing the published image works without rebuilding:
FROM livekit/livekit-server:v1.13.8 AS upstream
FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=upstream /livekit-server /livekit-server
ENTRYPOINT ["/livekit-server"]
Additional context
The same scan of v1.13.7 also reported CVE-2026-81870 / GHSA-8wmf-6v46-5gfg (Low) on go.opentelemetry.io/otel/sdk, otlptrace and otlptracehttp at v1.44.0. That one is already resolved in v1.13.8 (otel modules at v1.46.0 via #4879), thanks! Mentioning it only so nobody re-files it.
- Lingua principale
- Go
- Stelle
- 21.3k
- Fork
- 2.4k
- Merge medio
- 17h 59m
- PR unite (30g)
- 74
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Nessun modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di livekit/livekit
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 44/100
livekit/livekit#4982 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Updating a SIP dispatch rule or inbound trunk to new trunks or numbers skips the conflict checkForse già presa @RaphaelFakhri l’ha presa 2 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 25/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 12/100
I maintainer di solito rispondono entro 1 giorno
-
Abandoned pending tracks are never released, so long-lived participants permanently hit too many pending tracksForse già presa @kevin-pan-skydio l’ha presa 3 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 22/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
livekit/livekit#4932 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di livekit/livekit
Issue simili
-
📖 docs: Docker Compose quick start doesn't mention editing the project values in src/hive.yamlApertadocumentation help wanted needs-triage
Difficoltà 1/5 1-3 ore Idoneità per principianti 75/100
hivecommons/hive#11606 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
[docs] `/docs/identity-security/usage/alerts/`: docs reference a date that has already passedApertadocumentation
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
gravitational/teleport#69869 ·
-
category:agent
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
LanternOps/breeze#8493 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
docs
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
shaiknoorullah/hg-mono#815 ·
I maintainer di solito rispondono entro 1 giorno