
Linux LPE via snap-confine + systemd-tmpfiles, explicado em profundidade
Aviso: Este repositório é apenas para fins educacionais. Todo o conteúdo é baseado no aviso de segurança original publicado pela Qualys em 17 de março de 2026. A vulnerabilidade já foi corrigida — certifique-se sempre de que seus sistemas estejam atualizados. Não use este material contra sistemas que você não possui ou para os quais não tenha permissão explícita por escrito para testar.
A CVE-2026-3888 é uma vulnerabilidade de Escalação de Privilégios Local (LPE) que afeta a instalação padrão do Ubuntu Desktop >= 24.04. Foi descoberta e divulgada publicamente pela Qualys em março de 2026.
O que torna esta vulnerabilidade particularmente interessante — como a própria Qualys observou — é que ela não decorre de um único componente defeituoso. Em vez disso, ela surge da interação de dois programas individualmente seguros:
| Componente | Função |
|---|---|
snap-confine | Binário SUID-root que constrói o namespace de montagem (sandbox) para aplicativos snap |
systemd-tmpfiles | Daemon de propriedade do root que limpa periodicamente arquivos obsoletos em /tmp |
Nenhum dos programas é defeituoso por si só. Juntos, eles criam uma janela explorável.
Aviso original: https://cdn2.qualys.com/advisory/2026/03/17/snap-confine-systemd-tmpfiles.txt
Crédito: Equipe de Pesquisa de Segurança da Qualys
cve-2026-3888/
├── README.md ← Você está aqui
├── analysis/
│ ├── 01-vulnerability.md ← Análise aprofundada da vulnerabilidade
│ ├── 02-race-condition.md ← Como funciona a corrida TOCTOU
│ ├── 03-backpressure-technique.md ← O truque de contrapressão AF/UNIX
│ ├── 04-exploitation-steps.md ← Guia completo passo a passo
│ └── 05-mitigations.md ← O que foi corrigido e como
└── src/
├── firefox_2404.c ← Auxiliar de corrida (anotado)
└── librootshell.c ← Shellcode do carregador dinâmico (anotado)
| Versão do Ubuntu | Idade da Limpeza | Tempo de Espera (real) |
|---|---|---|
| 24.04 LTS | 30 dias | 30 dias |
| > 24.04 | 10 dias | 10 dias |
Corrigido em: snapd 2.74.2
/tmp/.snap como root:root 0755/tmp ativo com gravações periódicas, mas deixe /tmp/.snap ficar obsoletosystemd-tmpfiles exclui o /tmp/.snap obsoleto — como /tmp é gravável por todos, o atacante recria .snap e passa a ser o donosnap-confinesnap-confine faz bind-mount de bibliotecas de propriedade do atacante como root no namespaceld-linux-x86-64.so.2 com shellcode — qualquer binário SUID executado neste namespace executa nosso código como root/var/snap/firefox/common/ para obter um shell totalmente privilegiado