CVE-2015-1328 Prova de Conceito
Um exploit de Prova de Conceito (PoC) para o CVE-2015-1328, uma vulnerabilidade de escalonamento de privilégios que afeta a implementação overlayfs do kernel Linux. Essa vulnerabilidade permite que usuários locais não privilegiados obtenham acesso root explorando verificações de permissão inadequadas em operações de montagem overlayfs dentro de namespaces de usuário.
Visão Geral
CVE-2015-1328 é uma vulnerabilidade de segurança crítica que afeta kernels Linux com suporte a overlayfs e namespaces de usuário habilitados. A vulnerabilidade permite que um usuário local não privilegiado:
- Criar um namespace de usuário usando
unshare(CLONE_NEWUSER)
- Montar sistemas de arquivos overlayfs dentro do namespace
- Explorar falhas de verificação de permissão para escrever em
/etc/ld.so.preload
- Executar uma biblioteca compartilhada maliciosa para obter privilégios root
Este PoC demonstra a vulnerabilidade ao:
- Usar isolamento de namespace para contornar restrições de montagem
- Montar overlayfs para manipular arquivos do sistema
- Injetar uma biblioteca compartilhada personalizada via
/etc/ld.so.preload
- Sequestrar
getuid() para executar um shell root
Sistemas Afetados
- Ubuntu 14.04 LTS com versões de kernel anteriores a 3.19.0-21.21
- Sistemas com:
- Namespaces de usuário habilitados (
kernel.unprivileged_userns_clone=1)
- Suporte a sistema de arquivos overlayfs
- Versões de kernel sem patch
Requisitos
- Compilador GCC com suporte a 32 bits
- Kernel Linux com namespaces de usuário e suporte a overlayfs
- Bibliotecas de sistema apropriadas (suporte à flag
-m32)
Compilação
O projeto inclui um Makefile para compilação fácil:
Isso compilará:
ofs - O binário principal do exploit (estático 32 bits)
ofs-lib.so - A biblioteca compartilhada para o hook LD_PRELOAD (32 bits)
Compilação Manual
Se preferir compilar manualmente:
# Compile main exploit
gcc -o ofs ofs.c -m32 -static
# Compile shared library
gcc -m32 -fPIC -shared -o ofs-lib.so ofs-lib.c -ldl -static-libgcc
Uso
⚠️ AVISO: Este exploit modificará arquivos do sistema e tentará obter privilégios root. Use apenas em ambientes controlados com autorização adequada.
-
Compile o exploit:
-
Execute o exploit:
-
Se bem-sucedido, o exploit irá:
- Criar as estruturas de namespace necessárias
- Montar sistemas de arquivos overlayfs
- Escrever em
/etc/ld.so.preload
- Executar
/bin/su que aciona a biblioteca maliciosa
- Gerar um shell root
Como Funciona
Fluxo do Exploit
- Criação de Namespace: O exploit cria um novo namespace de usuário usando
unshare(CLONE_NEWUSER)
- Namespace de Montagem: Cria um namespace de montagem usando
clone() com CLONE_NEWNS
- Montagem Overlayfs: Monta sistemas de arquivos overlayfs para manipular diretórios do sistema
- Manipulação de Arquivos: Usa overlayfs para renomear arquivos e escrever em
/etc/ld.so.preload
- Injeção de Biblioteca: Escreve uma biblioteca compartilhada maliciosa em
/tmp/ofs-lib.so
- Escalonamento de Privilégios: Executa
/bin/su, que aciona a biblioteca pré-carregada
- Shell Root: A biblioteca sequestra
getuid() e gera um shell root
Detalhes Técnicos
- O exploit usa
clone() com uma pilha personalizada para criar namespaces de montagem isolados
- As montagens overlayfs permitem manipulação de arquivos dentro do namespace que afetam o host
- A biblioteca compartilhada (
ofs-lib.so) faz hook de getuid() via LD_PRELOAD
- Quando
/bin/su chama getuid(), a função maliciosa é executada em seu lugar
Estrutura do Código
.
├── ofs.c # Main exploit code
├── ofs-lib.c # Shared library for privilege escalation
├── lib_so.h # Embedded binary library data
├── Makefile # Build configuration
└── README.md # This file
Arquivos Principais
- ofs.c: Contém a lógica principal do exploit, criação de namespace e operações de montagem
- ofs-lib.c: Implementa o hook de
getuid() que gera um shell root
- lib_so.h: Contém a biblioteca compartilhada compilada como um array binário (para incorporação)
Mitigação
Para se proteger contra esta vulnerabilidade:
- Atualize o kernel para uma versão corrigida (3.19.0-21.21 ou posterior para Ubuntu 14.04)
- Desabilite namespaces de usuário se não forem necessários:
echo 0 > /proc/sys/kernel/unprivileged_userns_clone
- Use AppArmor/SELinux para restringir capacidades de criação de namespace
- Monitore logs do sistema para operações de montagem suspeitas
Aviso Legal e Ético
Este código é fornecido apenas para fins educacionais e de pesquisa em segurança.
- O uso não autorizado deste exploit contra sistemas sem permissão explícita é ilegal
- Este PoC é destinado a:
- Pesquisadores de segurança estudando vulnerabilidades do kernel
- Administradores de sistemas testando a resiliência de seus sistemas
- Fins educacionais em ambientes controlados
- Os autores não são responsáveis por qualquer uso indevido deste código
- Sempre garanta que você tenha autorização adequada antes de testar em qualquer sistema
Referências
Licença
Este projeto é fornecido como está para fins educacionais. Use com responsabilidade e de acordo com todas as leis e regulamentos aplicáveis.