Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[Low] setupImageVolumes builds host mount paths from vol.Name without a containment check

Aperta Adatta ai principianti
#2,919 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@abhisheksharma2411 ci sta già lavorando.

Dal 20/10/2026.

  • #3024 di @abhisheksharma2411 — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
73/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
go
Ambito
security

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

area/security kind/bug

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:

  1. Both ateapi (cmd/ateapi/internal/apivalidation/zz_generated.validation.go#L9511) and atelet (cmd/atelet/internal/apivalidation/zz_generated.validation.go#L4448) enforce validate.ShortName (content.IsDNS1123Label), rejecting slashes and .. traversal sequences in volume names at API ingress.
  2. rootfs-overlay.json is generated by atelet on 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 malicious rootfs-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 (SystemInfoVolumeSource path 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

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di agent-substrate/substrate

Tutte le issue di agent-substrate/substrate

Issue simili

Altre issue su Go

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.