
CVE-2026-46331 e CVE-2026-43503
3 exploits de escalonamento local de privilégios no kernel Linux. Mesma classe de bug que Dirty COW e Dirty Pipe. Shell root em segundos. Todas as principais distribuições afetadas.
Todos os três corrompem o page cache do kernel — a cópia em memória dos arquivos que os processos realmente leem e executam. O arquivo em disco nunca é tocado. Ferramentas de integridade de arquivos não veem nada. execve("/usr/bin/su") carrega do cache → executa seu shellcode → root.
| Exploit | CVE | Mecanismo | Tempo até Root | Linhas |
|---|---|---|---|---|
| Dirty Pedit | CVE-2026-46331 | lacuna de COW do TC pedit (wraparound de u32) | < 1 segundo | 275 |
| skb_shift | CVE-2026-43503 | perda de flag de transferência de frag no TCP SACK | ~10 segundos | 500 |
| GRO Flag Loss | CVE-2026-43503 | perda de flag de transferência de frag na coalescência GRO | ~10 segundos | 550 |
Todos os três: sem privilégios → root. Nenhuma permissão especial. Apenas namespaces de usuário.
Cada exploit neste repositório segue o mesmo padrão:
1. Get page-cache pages into a kernel buffer (splice)
2. Bypass the copy-on-write defense
3. Write in-place → read-only file corrupted in memory
O que difere é COMO a defesa é contornada e O QUE realiza a escrita:
2016 Dirty COW COW race via mmap + fork
2022 Dirty Pipe Stale PIPE_BUF_FLAG_CAN_MERGE in splice
2026 Copy Fail AF_ALG in-place AEAD on page-cache scatterlist
2026 Dirty Frag ESP skip_cow on splice'd frags (missing flag)
2026 Fragnesia skb_try_coalesce drops SHARED_FRAG flag
2026 Dirty Pedit ← TC pedit COW gap, no crypto needed
2026 skb_shift ← TCP SACK drops SHARED_FRAG, ESP writes
2026 GRO Flag Loss ← GRO merge drops SHARED_FRAG, ESP writes
Configurações padrão. Nenhum hardening necessário para ser vulnerável. Se você roda Linux, você foi afetado.
skb_shift e GRO usam a mesma técnica de exploração: perder a flag SKBFL_SHARED_FRAG e então deixar a criptografia ESP fazer XOR nas páginas do page-cache um byte por vez usando uma tabela de consulta IV pré-computada.
Dirty Pedit é uma fera completamente diferente:
skb_store_bits.skb_ensure_writable por meio de wraparound de inteiro.# Build all three
cd dirty_pedit && gcc -static -O2 -o exploit exploit.c && cd ..
cd skb_shift && gcc -static -O2 -o exploit exploit.c && cd ..
cd gro && gcc -static -O2 -o exploit exploit.c && cd ..
Cada exploit é um único arquivo C autocontido. Sem dependências além da libc.
# Any of the three (as unprivileged user):
./exploit
# → root shell
Requisitos: kernel Linux na faixa de versões afetadas + CONFIG_USER_NS=y (padrão em todas as principais distribuições).
[*] Dirty Pedit — Local Privilege Escalation
[*] uid=1000 pid=42
[*] Victim line at offset 186: nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
[*] Injecting user 'a' (uid=0, no password) over victim line...
[+] User 'a' injected with uid=0!
[+] Running: su a
# id
uid=0(root) gid=0(root) groups=0(root)
[*] uid=1000 euid=1000
[*] IV table pre-computed (256 entries)
[*] Writing 192 bytes to /usr/bin/su...
[120] 0x00→0x48 ... OK
[121] 0x00→0x31 ... OK
[*] Write complete: 192/192
[!] /usr/bin/su page cache overwritten!
# whoami
root
Todas as vulnerabilidades foram divulgadas de forma responsável à equipe de segurança do kernel Linux e aos mantenedores de rede. Os patches foram mesclados upstream e retroportados para as árvores estáveis.
899ee91156e548f6a5356a33Estes exploits são publicados para fins educacionais e defensivos após os patches estarem disponíveis. A corrupção do page cache é apenas em memória — reiniciar ou echo 1 > /proc/sys/vm/drop_caches restaura os arquivos originais.
Rajat Gupta — Segurança Ofensiva @ Qualcomm
MIT
| Exploit | Defesa Contornada | Escritor |
|---|
| Dirty Pedit | skb_ensure_writable (wraparound de u32 → COW parcial) | skb_store_bits (escrita direta de 4 bytes) |
| skb_shift | flag SKBFL_SHARED_FRAG perdida durante TCP SACK | descriptografia ESP AES-GCM (1 byte por pacote) |
| GRO Flag Loss | flag SKBFL_SHARED_FRAG perdida durante a fusão GRO | descriptografia ESP AES-GCM (1 byte por pacote) |
| Exploit | Introduzido | Corrigido | Distribuições Afetadas |
|---|
| Dirty Pedit | v5.18 (maio de 2022) | v7.1-rc7 | Ubuntu, RHEL, Debian, Fedora, SUSE |
| skb_shift | v3.9 (2013) | v7.1-rc5 | Todas as distribuições por 13 anos |
| GRO Flag Loss | v3.9 (2013) | v7.1-rc5 | Todas as distribuições por 13 anos |
| Propriedade | Dirty Pedit | skb_shift | GRO |
|---|
| Privilégios | Nenhum (userns) | Nenhum (userns) | Nenhum (userns) |
| Acesso a arquivos | O_RDONLY | O_RDONLY | O_RDONLY |
| Criptografia necessária | Não | Sim (AES-GCM) | Sim (AES-GCM) |
| Controle de escrita | 4 bytes/pacote | 1 byte/pacote | 1 byte/pacote |
| Confiabilidade | Determinístico | Determinístico | Probabilístico (repetição) |
| Escape de contêiner K8s | Não (sem necessidade de veth) | Não | Sim (veth+GRO por padrão) |
| Superfície de ataque | geneve + TC | loopback + espintcp | veth + ESP-in-UDP |