
CVE-2025-31133 PoC
Este documento explica a funcionalidade do script de Prova-de-Conceito (PoC) fornecido para a vulnerabilidade runc CVE-2025-31133.
maskedPaths do runc.maskedPaths, permitindo que ele escreva em arquivos sensíveis do sistema host. Isso constitui uma escape de contêiner./proc/sys/kernel/core_pattern do host a partir de dentro de um contêiner."pwned" no arquivo alvo e não executa código arbitrário no host. Também fornece instruções para restaurar o valor original.O recurso maskedPaths na especificação OCI de um contêiner (config.json) é um mecanismo de segurança projetado para impedir que contêineres acessem arquivos sensíveis do sistema. Ele funciona montando por bind /dev/null (um arquivo de dispositivo vazio) sobre esses caminhos sensíveis dentro do contêiner, tornando-os efetivamente ilegíveis e não graváveis.
A vulnerabilidade (CVE-2025-31133) é uma condição de corrida Time-of-Check to Time-of-Use (TOCTOU). O exploit funciona da seguinte forma:
runc configura o contêiner, ele se prepara para usar o arquivo dev/null do rootfs do contêiner como fonte para a montagem por bind que irá mascarar o caminho sensível (por exemplo, /proc/sys/kernel/core_pattern).runc resolve o caminho para rootfs/dev/null e quando ele realmente executa a operação de montagem.rootfs/dev/null entre um nó de dispositivo legítimo e um link simbólico apontando para o arquivo alvo no host (/proc/sys/kernel/core_pattern).runc realizará sua operação de montagem no exato momento em que rootfs/dev/null for um symlink. Isso faz com que o kernel siga o symlink, e a operação de mascaramento pretendida falha para /proc/sys/kernel/core_pattern.Este PoC usa essa técnica para escrever em /proc/sys/kernel/core_pattern, um alvo comum para tais exploits porque modificá-lo pode levar à execução de código arbitrário no host quando um processo falha. No entanto, este PoC escreve apenas uma string inofensiva para provar que a primitiva de escrita existe.
O script poc.sh automatiza todo o processo descrito acima.
Configuração e Limpeza:
runc, nome do contêiner e caminho rootfs.cleanup robusta que garante que quaisquer contêineres ou arquivos criados anteriormente pelo script sejam removidos. Esta função é chamada automaticamente na saída, interrupção ou término.Preparação:
/proc/sys/kernel/core_pattern do host em um arquivo temporário. Isso é usado posteriormente para verificar se o exploit teve sucesso e para ajudar o usuário a restaurar o sistema../rootfs) e um arquivo config.json.config.json lista explicitamente /proc/sys/kernel/core_pattern em maskedPaths—exatamente o recurso que o exploit visa contornar.A Função de Corrida (symlink_race)
Pré-requisitos:
runc.busybox-static instalado (para o shell do contêiner).sudo) para executar runc e modificar /proc.Passos:
poc.sh.chmod +x poc.sh.sudo ./poc.sh.[+] EXPLOIT BEM-SUCEDIDO!, significa que a condição de corrida foi vencida. O arquivo /proc/sys/kernel/core_pattern do host foi modificado com sucesso de dentro do contêiner, confirmando a vulnerabilidade.[-] O Exploit não foi bem-sucedido., a corrida não foi vencida nesta tentativa. Condições de corrida são probabilísticas e dependem fortemente do tempo e carga do sistema. Tente executar o script mais algumas vezes.O PoC modificará um arquivo do sistema. Para restaurá-lo ao seu estado original, execute o comando sugerido pelo script:
# The 'ORIGINAL_PATTERN' will be the actual value from your system
echo 'original_core_pattern_value' | sudo tee /proc/sys/kernel/core_pattern
/proc/sys/kernel/core_patternrootfs/dev/null.rootfs/dev/null para o arquivo alvo do host (/proc/sys/kernel/core_pattern).rootfs/dev/null como um dispositivo de caractere apropriado (mknod).Execução:
symlink_race é iniciada como um processo em segundo plano.runc run ... para criar e iniciar o contêiner. É neste momento que o runc tentará aplicar os maskedPaths.runc exec para executar um comando dentro do contêiner: echo 'pwned' > /proc/sys/kernel/core_pattern.Verificação:
/proc/sys/kernel/core_pattern do host."pwned" e o valor original.[+] EXPLOIT BEM-SUCEDIDO! ou [-] O Exploit não foi bem-sucedido..