
Severidade: Crítica (CVSS 9.8)
Componente: opencontainers/runc (libcontainer)
Tipo de Vulnerabilidade: CWE-59: Resolução Incorreta de Links Antes do Acesso a Arquivos ('Link Following')
Existe uma vulnerabilidade crítica na função maskPaths do runc. Ao mascarar caminhos sensíveis (como /proc/kcore) dentro de um contêiner, o runc usa os.OpenFile(path, O_PATH, 0) sem a flag O_NOFOLLOW. Isso permite que um processo malicioso do contêiner substitua o caminho de destino por um symlink para um arquivo sensível do host (por exemplo, /etc/shadow), fazendo com que o runc execute operações de montagem no arquivo do host em vez do caminho do contêiner.
O exploit.go incluído demonstra o comportamento do kernel que permite esse bypass.
Compile e execute em um ambiente Linux (ou em um contêiner com CAP_SYS_ADMIN se estiver testando recursão):
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 Necessário:
Atualize libcontainer/rootfs_linux.go para incluir unix.O_NOFOLLOW ao abrir caminhos de destino para mascaramento.
- 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: Código PoC funcional em Go.analysis.md: Análise técnica detalhada da condição de corrida.cve_draft.md: Modelo de relatório para submissão.Aviso Legal: Este código é apenas para fins de pesquisa em segurança e educação.