
Schweregrad: Kritisch (CVSS 9.8)
Komponente: opencontainers/runc (libcontainer)
Sicherheitslückentyp: CWE-59: Unzulässige Linkauflösung vor Dateizugriff ('Link Following')
Eine kritische Sicherheitslücke besteht in der maskPaths-Funktion von runc. Beim Maskieren sensibler Pfade (wie /proc/kcore) innerhalb eines Containers verwendet runc os.OpenFile(path, O_PATH, 0) ohne das O_NOFOLLOW-Flag. Dies ermöglicht es einem bösartigen Containerprozess, den Zielpfad durch einen Symlink zu einer sensiblen Hostdatei (z. B. /etc/shadow) zu ersetzen, wodurch runc Mount-Operationen auf der Hostdatei statt auf dem Containerpfad ausführt.
Die enthaltene Datei exploit.go demonstriert das Kernelverhalten, das diesen Bypass ermöglicht.
Kompilieren und führen Sie den Code in einer Linux-Umgebung aus (oder in einem Container mit CAP_SYS_ADMIN, falls die Rekursion getestet werden soll):
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 erforderlich:
Aktualisieren Sie libcontainer/rootfs_linux.go, um beim Öffnen von Zielpfaden für das Maskieren das Flag unix.O_NOFOLLOW einzubeziehen.
- 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: Funktionierender PoC-Code in Go.analysis.md: Detaillierte technische Analyse der Race-Condition.cve_draft.md: Berichtsvorlage für die Einreichung.Haftungsausschluss: Dieser Code dient ausschließlich der Sicherheitsforschung und zu Bildungszwecken.