
CVE-2026-34990에 대한 개념 증명 익스플로잇으로, CUPS_CREATE_LOCAL_PRINTER와 탈취된 로컬 인증 토큰을 통한 임의 파일 쓰기를 이용한 CUPS 2.4.16 로컬 권한 상승 취약점입니다.
CUPS 2.4.16에서 CUPS_CREATE_LOCAL_PRINTER를 통한 임의 파일 쓰기로 인한 로컬 권한 상승.
CUPS는 device-uri를 file:// 경로로 설정하여 로컬 프린터를 생성할 수 있도록 허용합니다. document-format: application/vnd.cups-raw와 compression: gzip으로 인쇄 작업을 제출하면 cupsd가 작업 데이터의 압축을 풀어 해당 경로에 직접 기록합니다 — 이는 cupsd가 실행되는 사용자(일반적으로 root 또는 높은 권한의 서비스 계정) 권한으로 수행됩니다.
관리 작업에 필요한 로컬 인증 토큰은 ipptool의 cups-create-local-printer.test를 localhost의 가짜 IPP 서버로 향하게 하여 탈취할 수 있습니다. CUPS가 인증을 위해 연결하면 Authorization: Local <token> 헤더를 전송하는데, CUPS가 이를 검증하기 전에 가로챌 수 있습니다.
cups-create-local-printer.test를 가짜 서버로 향하게 하여 ipptool 실행 — CUPS가 인증을 위해 로컬 인증 토큰을 전송401 WWW-Authenticate: Local trc="y"로 응답하여 토큰을 깔끔하게 탈취device-uri: file:///etc/sudoers.d/<user>-pwn으로 프린터 생성sudo -n /bin/bashcreate_local_printer 호출은 경쟁 조건(race) 동안 소켓을 열린 상태로 유지합니다 — 이는 관리 작업과 인쇄 작업이 처리되는 동안 프린터 등록을 진행 중인 상태로 붙잡아 둡니다.
cups-create-local-printer.test와 함께 설치된 ipptool (표준 CUPS 설치)# 기본적으로 /etc/sudoers.d/<your-username>-pwn에 기록
python3 exploit.py
# 사용자 지정 대상
CUPS_TARGET=/etc/sudoers.d/youruser-pwn CUPS_ATTACKER=youruser python3 exploit.py
스크립트의 SUDOERS_LINE을 실제 사용자 이름으로 수정하세요 — 기본값은 aporter입니다.
익스플로잇은 최대 12번 시도합니다. 각 시도는 상태를 초기화하기 위해 프린터를 삭제하고 다시 생성합니다.
승인된 보안 테스트 및 연구 목적으로만 사용하세요.