
Prova de conceito para CVE-2026-43494 (PinTheft): escalonamento de privilégio local no kernel Linux explorando um bug de contagem de referência zerocopy RDS com buffers fixos io_uring para sobrescrever o cache de página de binário SUID.
Prova de conceito — uid=1000(raken) → uid=0(root) após ./sley no WSL2 (6.6.87.2-microsoft-standard-WSL2)
Prova de conceito em arquivo único para CVE-2026-43494 (PinTheft): uma escalada local de privilégios do kernel Linux que combina um bug de contagem de referências no zerocopy do RDS com buffers fixos do io_uring para sobrescrever o page cache de um binário SUID root.
Aviso: Este repositório destina-se somente a pesquisa de segurança autorizada, educação e testes defensivos. Executá-lo contra sistemas que você não possui ou sem permissão explícita para testar é ilegal e antiético. Os autores não assumem nenhuma responsabilidade por uso indevido.
A pesquisa pública original e o PoC foram publicados pela equipe V12 Security (Aaron Esau). O SLEY é uma reimplementação independente e compacta, com uma interface de terminal estilizada para uso em laboratório e aprendizado.
flowchart LR
A[mmap anonymous page] --> B[io_uring: register fixed buffer]
B --> C[Clone buffer table to 2nd ring]
C --> D[1024× failing RDS zerocopy sends]
D --> E[Drain FOLL_PIN bias / steal refs]
E --> F[munmap → page freed]
F --> G[SUID binary page reclaimed in page cache]
G --> H[Stale io_uring ptr writes ELF stub]
H --> I[exec SUID → root shell]su, mount, passwd, …).FOLL_PIN ≈ 1024).execve do binário SUID executa o stub injetado como root.CONFIG_RDS=y e CONFIG_RDS_TCP=yCONFIG_IO_URING=y e kernel.io_uring_disabled = 0rds / rds_tcp carregados (ou autocarregáveis por usuários sem privilégios)IORING_REGISTER_CLONE_BUFFERS usada pela cadeia públicasudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# or equivalent headers package on your distro
# Patched? (example — adjust for your distro)
uname -r
grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true
# RDS available?
grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null
lsmod | grep -E '^rds'
# io_uring enabled?
cat /proc/sys/kernel/io_uring_disabled # expect 0
gcc -O2 -Wall -Wextra -o sley sley.c
Linkagem estática (opcional, para imagens mínimas de laboratório):
gcc -O2 -static -o sley sley.c
./sley
Toda a saída de status vai para stderr (interface ANSI de 256 cores, barra de progresso, registro por fases). Certifique-se de que seu terminal suporte UTF-8 e truecolor/256 cores para a interface com caracteres de caixa (box-drawing).
Exemplo de fases:
PHASE 1 │ Reconnaissance
PHASE 2 │ Memory & io_uring setup
PHASE 3 │ Pin reference theft (RDS zerocopy)
PHASE 4 │ Page cache overwrite & privesc
Em uma configuração explorada com sucesso, a cadeia é concluída e repassa o controle ao binário SUID descoberto com a primeira página sobrescrita — resultando em um shell root se a corrida (race) e o estado do kernel se alinharem.
Em kernels corrigidos, hosts endurecidos ou com RDS/io_uring ausentes, o PoC falhará precocemente (sem alvo SUID, erros de mmap/io_uring/socket, etc.).
Avisos de segurança específicos de cada distribuição podem trazer patches com backport — acompanhe a fila de segurança do kernel do seu fornecedor.
.
├── README.md # This file
├── proof-of-concept.jpg # Screenshot: successful LPE (uid 1000 → root)
├── sley.c # Single-file PoC + terminal UI
└── .gitignore
Este software é fornecido como está (as-is) para pesquisa e educação. Você é responsável por cumprir as leis aplicáveis e obter autorização por escrito antes de testar qualquer sistema que não possua.
MIT — consulte o arquivo de licença do repositório, se adicionado. Use com responsabilidade.
| Item | Detalhe |
|---|
| CVE | CVE-2026-43494 |
| Nome público | PinTheft |
| Componente | net/rds — caminho de envio zerocopy (rds_message_zcopy_from_user) |
| Primitiva | put_page() duplicado quando a fixação da página falha → rouba referências FOLL_PIN |
| Armamento | buffer fixo do io_uring + zerocopy do RDS com falha → escrita UAF no page cache |
| Impacto | Root local em configurações vulneráveis |
| Correção upstream | e17492979319 |
| Ação | Notas |
|---|
| Aplicar patch no kernel | Aplicar a correção estável contendo o commit e17492979319 |
| Desabilitar RDS | modprobe -r rds_tcp rds (e bloquear o autoload) se não for necessário |
| Restringir io_uring | kernel.io_uring_disabled=1 ou 2 via sysctl |
| Menor privilégio | Remover binários SUID desnecessários; usar contêineres com perfis endurecidos |
| Monitorar | Alertar sobre rajadas de falhas de zerocopy do RDS + padrões de registro de buffers do io_uring |