Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
PinTheft-go — Uma implementação Go de PinTheft (CVE-2026-43494) | Kitploit
Ferramentas/GitHubGitHub/kagantua/pintheft-go
Escalada de PrivilégiosExploraçãoPós-ExploraçãoDesenvolvimento de PayloadsExploração de Binários
GitHubkagantua/pintheft-go

PinTheft-go

Uma implementação Go de PinTheft (CVE-2026-43494)

Ver Repositório
3há 3 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

pintheft-go

Porte em Go do pintheft - LPE de double-free zcopy do RDS. Membro da classe de vulnerabilidade Dirty Frag.

[!IMPORTANT] O Arch Linux é uma das distribuições mais expostas para essa vulnerabilidade, já que está entre as poucas onde o módulo RDS pode tipicamente ser carregado por padrão.

Como funciona (tl;dr)

O bug está em rds_message_zcopy_from_user(). A função fixa (GUP-pins) páginas do usuário uma de cada vez via FOLL_GET. Se uma página posterior falhar (por exemplo, uma página de guarda PROT_NONE), o caminho de erro chama put_page() nas páginas já fixadas, então rds_message_purge() chama __free_page() nelas novamente porque op_mmp_znotifier foi anulado mas as entradas op_nents/sg permaneceram intactas. Quando a página ainda tem outras referências, __free_page decrementa silenciosamente a contagem de refs. Cada sendmsg com falha rouba exatamente uma ref da primeira página.

Contornando CONFIG_INIT_ON_ALLOC_DEFAULT_ON

Fixe a página alvo via io_uring REGISTER_BUFFERS, que adiciona GUP_PIN_COUNTING_BIAS (1024) ao refcount através de FOLL_PIN. Roube todas as 1024 refs de pin com envios zcopy com falha. O refcount da página agora é ~1 (apenas o mapeamento PTE). munmap segue o caminho normal de __folio_put, que chama mem_cgroup_uncharge (limpando memcg_data) antes de liberar. Nenhuma verificação bad_page é acionada.

Escrita dangling bvec

io_uring mantém o struct page* bruto em seu array bvec sem verificações de vivacidade. Após a página ser recuperada como cache de página para um binário suid, IORING_OP_READ_FIXED escreve nosso payload nela através desse ponteiro dangling.

Prevenindo unpin no fechamento do ring

IORING_REGISTER_CLONE_BUFFERS incrementa imu->refs. Um processo filho do daemon (forked) mantém o fd do clone ring aberto - io_buffer_unmap vê refs > 1 e pula unpin_user_folio, prevenindo corrupção do refcount na página liberada.

PCP LIFO

Fixe na CPU 0, drene entradas PCP obsoletas antes de liberar - nossa página cai no topo quando o alocador de cache de página a pega.

Cadeia de exploração

root@kitploit:~
REGISTER_BUFFERS(+1024) -> CLONE_BUFFERS(imu->refs=2) ->
daemon holds clone -> steal 1024 refs -> evict page cache ->
drain PCP -> munmap(free) -> pread(reclaim) ->
READ_FIXED(overwrite) -> verify -> exec -> root

Uso

root@kitploit:~
go build -o pintheft-go .
./pintheft-go

Em caso de sucesso, entra em um shell root via PTY. O binário no disco não é tocado.

Limpeza

root@kitploit:~
sudo cp /tmp/.backup_pintheft_<pid> /usr/bin/su && sudo chmod u+s /usr/bin/su

Requisitos

  • Kernel Linux com RDS + io_uring sem patch
  • CONFIG_RDS=m, CONFIG_RDS_TCP=m (carregado automaticamente via SO_RDS_TRANSPORT=2)
  • CONFIG_IO_URING=y com io_uring_disabled=0
  • Binário suid-root legível
  • Sem necessidade de capabilities

Referências

  • v12-security/pocs - pintheft - PoC original em C

Créditos

  • Aaron Esau / Equipe V12 - descoberta da vulnerabilidade e PoC original

btw, eu amo o Arch Linux :)

Baixar ferramenta