[Low] setupImageVolumes builds host mount paths from vol.Name without a containment check
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 73/100
Direzione di ricerca
Leggi internal/imagecache/bundle_linux.go in corrispondenza di setupImageVolumes e internal/imagecache/spec.go per esaminare il modello di convalida di ImageVolumeMountPath e createExtraDirs. Controlla come i nomi dei volumi raggiungono questa funzione, quindi aggiungi un controllo di contenimento prima di costruire i percorsi di mount. Il lavoro è completato quando i nomi non locali vengono rifiutati e i nomi di volume validi continuano a funzionare; il payload non indica alcun file di test.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
In internal/imagecache/bundle_linux.go, setupImageVolumes constructs mount points using ImageVolumeMountPath(bundlePath, vol.Name) without verifying that vol.Name is a clean, local relative path. If a crafted rootfs-overlay.json containing path traversal sequences (such as ../) is processed, setupImageVolumes can create directories, unmount existing mounts, and mount image layers at arbitrary locations on the host within the privileged ateworker context.
Details
In internal/imagecache/bundle_linux.go#L114-L122:
mountpoint := ImageVolumeMountPath(bundlePath, vol.Name)
if err := os.MkdirAll(mountpoint, 0o700); err != nil {
return fmt.Errorf("while creating image volume mount point %q: %w", mountpoint, err)
}
_ = unix.Unmount(mountpoint, unix.MNT_DETACH)
if err := mountImageVolume(mountpoint, vol.Layers); err != nil {
return fmt.Errorf("while mounting image volume %q: %w", vol.Name, err)
}
And internal/imagecache/spec.go#L30-L32:
func ImageVolumeMountPath(bundlePath, volumeName string) string {
return filepath.Join(bundlePath, "volumes", volumeName)
}
In contrast to createExtraDirs (internal/imagecache/spec.go#L182-L184), which uses os.OpenRoot and enforces filepath.IsLocal, setupImageVolumes performs no checks on vol.Name.
Impact
Exploitability is constrained by upstream controls:
- Both
ateapi(cmd/ateapi/internal/apivalidation/zz_generated.validation.go#L9511) andatelet(cmd/atelet/internal/apivalidation/zz_generated.validation.go#L4448) enforcevalidate.ShortName(content.IsDNS1123Label), rejecting slashes and..traversal sequences in volume names at API ingress. rootfs-overlay.jsonis generated byateleton the host; untrusted sandboxed containers cannot modify it directly.
An attacker would require a pre-existing host-level compromise or a bypass of the API server validation to write a maliciousrootfs-overlay.json.
Suggested fix
Validate vol.Name in setupImageVolumes before joining paths, rejecting non-local paths or path separators:
if !filepath.IsLocal(vol.Name) || filepath.Base(vol.Name) != vol.Name {
return fmt.Errorf("invalid volume name %q: must be a local filename", vol.Name)
}
Related
- Related: #1436 (
SystemInfoVolumeSourcepath traversal validation) - Related: PR #923 (Added image volumes to ActorTemplate)
- Related: PR #2826 (Micro-VM image volumes refactor)
- Lingua principale
- Go
- Stelle
- 5.7k
- Fork
- 612
- Merge medio
- 2g 13h
- PR unite (30g)
- 562
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la 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 agent-substrate/substrate
-
[Low] CSI plugin builds staging directories from storage_volume_id without a containment checkApertaarea/security kind/bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
agent-substrate/substrate#2935 ·
I maintainer di solito rispondono entro 1 giorno
-
[Low] CleanupSandboxState joins an unchecked id into paths it RemoveAll()sForse già presa @ericcurtin l’ha presa oggi. Apertaarea/security kind/bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
agent-substrate/substrate#2932 ·
I maintainer di solito rispondono entro 1 giorno
-
[Low] guestVolumeSource can map host paths containing ".." outside the microVM guest shareForse già presa @jiayimeow l’ha presa 3 giorni fa. Apertaarea/security kind/bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
agent-substrate/substrate#2920 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
[Low] ate-api-server accepts client certificates chained to system roots when --pod-identity-ca-certs is unsetForse già presa @abhisheksharma2411 l’ha presa 2 giorni fa. Apertaarea/security kind/bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
agent-substrate/substrate#2918 ·
I maintainer di solito rispondono entro 1 giorno
-
Cloud SQL backend: document (and optionally provision) Private Service Connect for ATE_API_POSTGRES_CLOUDSQL_IP_TYPE=pscForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertaarea/dev-infra kind/docs kind/feature
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
agent-substrate/substrate#2875 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di agent-substrate/substrate
Issue simili
-
Aspect/API Severity/Major Type/Bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
wso2/api-platform#3899 ·
I maintainer di solito rispondono entro 1 giorno
-
bug needs-acceptance wg/agentic-context
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
vllm-project/semantic-router#5418 ·
I maintainer di solito rispondono entro 1 giorno
-
feature suggestion
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
openvibely/openvibely#1526 ·
I maintainer di solito rispondono entro 1 giorno
-
docs good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
Usenova-Labs/usenova-backend#36 ·
I maintainer di solito rispondono entro 1 giorno
-
[Feature]: expose list_executors to task-mode agents (custom executor IDs are undiscoverable)Apertaenhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno