
CUPS 2.4.16 로컬 프린터 취약점을 재현하는 Python PoC: 악성 IPP 엔드포인트를 통해 Local 인증 토큰을 탈취하고, file:// 프린터를 생성한 뒤 작업을 경쟁시켜 root 소유 파일을 작성합니다.
승인된 테스트 / 연구 용도로만 사용하십시오. 본 PoC는 본인이 소유하거나 명시적으로 테스트 권한을 부여받은 시스템에 대해서만 실행하십시오.
이 저장소는 CUPS 2.4.16의 로컬 프린터 취약점을 시스템 CUPS 환경에서 재현한 구현을 포함합니다.
이 구현은 공개된 CUPS 취약점 재현 코드를 기반으로 개발되었으며, 별도로 설치된 CUPS 빌드와 루트 권한으로 실행되는 재현 하네스를 요구하는 대신, 이미 실행 중인 시스템 CUPS 설치를 대상으로 동작하도록 개조되었습니다.
재현은 다음과 같은 일반적인 체인을 따릅니다:
CUPS 2.4.16
│
▼
로컬 인증 챌린지
│
▼
공격자가 제어하는 IPP 엔드포인트
│
▼
Authorization: Local <token>
│
▼
인증된 CUPS 관리
│
▼
CUPS-Create-Local-Printer
│
▼
file:// 디바이스 URI
│
▼
프린터/작업 레이스
│
▼
루트 소유 대상 파일
이 익스플로잇은 레이스에 의존하므로, 매 시도마다 성공이 보장되지는 않습니다.
공개된 재현 코드는 통제된 취약점 하네스로 설계되었습니다. 특히, 전용 CUPS 설치를 가정하고 재현 환경에는 적절하지만 이미 실행 중인 배포판 설치를 대표하지는 않는 설정/초기화 작업을 수행합니다.
이 구현은 대신 다음과 같이 동작합니다:
ipptool 바이너리를 사용합니다.cups-create-local-printer.test 정의를 사용합니다.Local 인증 토큰을 캡처합니다.file:// 프리미티브를 재현합니다.작성자의 랩 환경에서 테스트됨:
ipptool테스트 정의는 다음 위치에 있을 것으로 예상됩니다:
/usr/share/cups/ipptool/cups-create-local-printer.test
다음 명령으로 설치 상태를 확인하십시오:
cupsd -v
which ipptool
find /usr/share/cups -name 'cups-create-local-printer.test' 2>/dev/null
환경 변수를 통해 공격자 신원과 대상 경로를 설정하십시오:
export CUPS_ATTACKER="$USER"
export CUPS_TARGET="/tmp/cups-poc-target"
python3 exploit.py
통제된 권한 상승 재현을 위해서는 격리된 테스트 환경에 적합한 대상을 선택하십시오.
이 스크립트는 또한 기본적으로 /etc/sudoers.d/ 아래의 sudoers 스타일 대상을 사용하므로, 프로덕션 시스템에서 무심코 실행하지 마십시오.
PoC는 IPP 리스너를 시작하고 CUPS가 이에 대해 인증하도록 유도합니다. 리스너는 처음에 다음과 함께 401 챌린지를 반환합니다:
WWW-Authenticate: Local trc="y"
이어지는 요청에는 다음이 포함됩니다:
Authorization: Local <token>
그런 다음 토큰은 로컬 CUPS 관리 엔드포인트에 대해 재사용됩니다.
재현은 file:// 디바이스 URI와 함께 다음을 사용합니다:
CUPS-Create-Local-Printer
후보 루프는 다음을 포함한 프린터 작업을 반복적으로 수행합니다:
CUPS-Add-Modify-Printer
CUPS-Accept-Jobs
Resume-Printer
Print-Job
단일 시도가 성공하지 못할 수 있으므로 레이스는 의도적으로 반복됩니다.
이 저장소는 개조판이며, 정식 업스트림 구현이 아닙니다.
요청 구성 로직과 익스플로잇 시퀀스는 공개된 재현 코드를 기반으로 합니다. 주요 변경 사항은 기존 시스템 CUPS 설치에 대해 실행하는 것과 재현 환경 설정/초기화 가정을 제거하는 것에 관한 것입니다.
권위 있는 취약점 정보와 원본 재현 코드는 업스트림 OpenPrinting CUPS 보안 권고 및 저장소를 참조하십시오.
권한 없이 CUPS 설치에 대해 이 도구를 사용하지 마십시오.
방어적 검증을 위해 유용한 지표로는 공격자가 제어하는 엔드포인트로의 예상치 못한 IPP 요청, 비정상적인 Local 인증 교환, 예상치 못한 로컬 프린터 생성, 의심스러운 프린터/작업 활동 등이 있습니다.