
Kit educacional e defensivo para duas LPEs de corrupção de cache de página do Linux (DirtyClone CVE-2026-43503, pedit COW CVE-2026-46331): fortalecimento, detecção, verificação, seccomp + aparato de validação. Apenas detecção e prevenção — nenhum código de exploit. TLP:CLEAR.
Detecte, contenha e verifique defesas contra duas escalações de privilégio local (LPE) por corrupção do page-cache no Linux — DirtyClone (CVE-2026-43503) e pedit COW (CVE-2026-46331) — em hosts e contêineres.
Este é um kit de segurança educacional e defensivo. Ele explica como ambas as vulnerabilidades funcionam no nível de chamadas de sistema (syscalls) e fornece ferramentas de hardening, detecção, verificação e seccomp — além de um ambiente de validação que prova que as ferramentas funcionam em kernels reais. Não contém exploit, shellcode ou offsets de alvo, por design.
Ambos os CVEs permitem que um usuário local não privilegiado se torne root ao corromper o page cache (a cópia na RAM) de um binário setuid-root como /usr/bin/su — sem jamais tocar no arquivo em disco. Isso os torna furtivos: o monitoramento de integridade de arquivos permanece verde, a forense de disco não encontra nada, e a corrupção se desfaz na reinicialização.
Corrigir o kernel é a solução real. Mas durante a janela de implantação — e como defesa em profundidade depois — você precisa fechar os caminhos de ataque, monitorar a cadeia de ataque e verificar sua postura. É isso que este kit fornece, com cada controle mapeado de volta a uma etapa documentada da cadeia de exploração para que você veja por que funciona.
Ambos os bugs são da mesma classe de defeito: o kernel escreve em um buffer que acredita ser privado enquanto esse buffer ainda é respaldado por memória compartilhada de page-cache com suporte de arquivo. Duas portas estruturais governam cada variante de ambas as cadeias:
| Portão | O que é | Força como controle |
|---|---|---|
| 1. Caminho de capacidade | CAP_NET_ADMIN obtido via namespaces de usuário não privilegiados (unshare(CLONE_NEWUSER|CLONE_NEWNET)) | Ponto de estrangulamento robusto — todas as variantes devem passar por aqui, conhecidas e desconhecidas. Feche-o primeiro. |
| 2. Superfície de módulo | Módulos vulneráveis: act_pedit, esp4/esp6, rxrpc, xt_TEE, nf_dup_ipv4/nf_dup_ipv6 | Defesa em profundidade — remove apenas primitivas conhecidas; um novo sumidouro (sink) o contornaria. |
Corrigido upstream em point-releases estáveis (DirtyClone ≥ 6.12.91 / 7.0.10; pedit COW 6.12.94 / 7.0.13) além de backports de fornecedores; mainline 7.1 é final. Confirme seu kernel junto ao rastreador da sua distribuição — veja docs/analysis.md §8.
Apenas hosts Linux. Estes scripts leem e escrevem estados reais do kernel. Execute o hardening em um host que você controla; execute o ambiente de validação destrutivo em uma VM descartável. Veja Requisitos.
# 1. Visualize as alterações de contenção do host (não escreve nada)
sudo ./kit/harden-pagecache-lpe.sh --dry-run
# 2. Aplique restrições de userns + bloqueios de módulo vulnerável
sudo ./kit/harden-pagecache-lpe.sh
# 3. Verifique a postura — execute a sonda funcional como um usuário NÃO PRIVILEGIADO
sudo -u nobody ./kit/verify-pagecache-lpe.sh # saída: 0=PASS 1=WARN 2=FAIL
# 4. (Opcional) Acompanhe a cadeia de ataque ao vivo com eBPF
sudo bpftrace ./kit/detect-pagecache-lpe.bt
Para contêineres, aplique a sobreposição seccomp
(kit/seccomp-pagecache-lpe.json):
docker run --security-opt seccomp=kit/seccomp-pagecache-lpe.json <imagem>
Novo aqui? Leia START-HERE.md — um passo a passo guiado, em formato de palestra, desde a causa raiz até uma execução de validação completa.
.
├── START-HERE.md Guided walkthrough — the recommended entry point
├── docs/ The "why": analysis and operator guidance
│ ├── analysis.md Root-cause analysis, attack chains, detection engineering
│ ├── HARDENING-GUIDE.md Operator containment guide (host → systemd → Docker → Kubernetes)
│ └── plain-language-summary.md Gentler, plain-English overview of both bugs
├── kit/ The "what you run": four self-contained artifacts
│ ├── harden-pagecache-lpe.sh Apply host containment (sysctl + module blocks)
│ ├── verify-pagecache-lpe.sh Read-only posture check (PASS/WARN/FAIL)
│ ├── detect-pagecache-lpe.bt bpftrace/eBPF telemetry for the staging chain
│ └── seccomp-pagecache-lpe.json Container seccomp overlay denying the chain's syscalls
└── testkit/ The "proof": validation harness + SHOWCASE.md writeup
| Componente | Função |
|---|---|
docs/analysis.md | Fonte da verdade: causa raiz, cadeias de ataque comportamentais, engenharia de detecção, hardening, tabela comparativa. |
docs/HARDENING-GUIDE.md | Contenção em camadas para hosts, unidades systemd, Docker/Podman e Kubernetes. |
kit/ | Os quatro artefatos. Copie este diretório para um host para defendê-lo. |
testkit/ | Validação reproduzível em kernels reais (Docker local + EC2 descartável) e SHOWCASE.md — uma avaliação honesta do que os testes provam e não provam. |
harden, verify): um host Linux com bash, sysctl, modprobe e unshare. Root para o hardening; execute a sonda de verificação como um usuário não root.detect-pagecache-lpe.bt): root, bpftrace ≥ 0.16 e kernel com BTF (/sys/kernel/btf/vmlinux). Alguns kprobes podem estar inline em um determinado kernel — o cabeçalho do script explica como adaptar.testkit/): uma VM Linux descartável — ela escreve configurações reais e descarrega módulos do kernel. O lançador EC2 precisa do AWS CLI v2 e jq; não é usado SSH (o transporte é AWS SSM). Usuários macOS podem executar o teste de fumaça Docker local, mas a validação completa requer Linux.TLP:CLEAR — distribuição pública, irrestrita. Este repositório é apenas detecção e prevenção. Ele inclui deliberadamente:
…e exclui deliberadamente:
Os limites honestos desta abordagem — o que a validação prova e não prova — estão documentados em testkit/SHOWCASE.md §8. Use apenas em sistemas que você possui ou está autorizado a testar. Hardening é contenção, não cura: corrija seu kernel.
START-HERE.md — o passo a passo guiado (comece aqui)docs/analysis.md — a análise técnica completadocs/plain-language-summary.md — uma visão geral mais suave, em inglês simplesIssues e pull requests são bem-vindos — veja CONTRIBUTING.md. Como os controles estão espelhados em vários arquivos (a lista de módulos, os botões de userns, o bitmap de detecção), por favor, leia os invariantes de sincronização nesse guia antes de alterar a superfície de ataque.
Licenciado sob a Licença Apache 2.0.