
Gravità: Critica (CVSS 9.8)
Componente: opencontainers/runc (libcontainer)
Tipo di vulnerabilità: CWE-59: Improper Link Resolution Before File Access ('Link Following')
Una vulnerabilità critica esiste nella funzione maskPaths di runc. Quando maschera percorsi sensibili (come /proc/kcore) all'interno di un container, runc usa os.OpenFile(path, O_PATH, 0) senza il flag O_NOFOLLOW. Ciò consente a un processo container malevolo di sostituire il percorso di destinazione con un symlink a un file host sensibile (ad es. /etc/shadow), facendo sì che runc esegua operazioni di mount sul file host anziché sul percorso del container.
Il file exploit.go incluso dimostra il comportamento del kernel che consente questo bypass.
Compila ed esegui in un ambiente Linux (o in un container con CAP_SYS_ADMIN se si testa la ricorsione):
go run exploit.go
// Vulnerable Code Pattern in runC:
// 1. Path is typically provided as a string (e.g. from config)
// 2. runC calls os.OpenFile(path, O_PATH...)
// 3. MISSING: unix.O_NOFOLLOW flag
// Result: Kernel follows symlink if attacker swapped the path.
Patch richiesta:
Aggiorna libcontainer/rootfs_linux.go per includere unix.O_NOFOLLOW quando si aprono i percorsi di destinazione per la mascheratura.
- dstFh, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC, 0)
+ dstFh, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC|unix.O_NOFOLLOW, 0)
exploit.go: Codice PoC funzionale in Go.analysis.md: Analisi tecnica dettagliata della condizione di race.cve_draft.md: Modello di report per la presentazione.Disclaimer: Questo codice è destinato esclusivamente a scopi di ricerca sulla sicurezza e didattici.