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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-34990 — 루트 `cupsd`에 대한 로컬 권한 상승. | Kitploit
도구/GitHubGitHub/gbuyssens/cve-2026-34990
Privilege EscalationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingPayload Development
GitHubgbuyssens/cve-2026-34990

CVE-2026-34990

루트 `cupsd`에 대한 로컬 권한 상승.

저장소 보기
3일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-34990 — CUPS 로컬 권한 상승 (cups2root, 하네스 제거판)

CVSS 3.x : 8.4 HIGH   (대략 — 확인 필요)
CWE      : CWE-287 (부적절한 인증) + CWE-269 (부적절한 권한 관리)
Fix      : CUPS 2.4.17+
Affects  : cupsd가 root로 실행되고 631 포트가 로컬에서 접근 가능한 CUPS ≤ 2.4.16

root cupsd에 대한 로컬 권한 상승. 악성 로컬 서버를 향해 IPP 클라이언트로 동작하도록 유도되면, cupsd는 401 WWW-Authenticate: Local 챌린지에 대해 자신의 admin 토큰을 재전송하여 응답한다. 이 토큰을 탈취하면 비권한 사용자가 cupsd를 admin(root)으로 조종할 수 있다. 영구 file:// 프린트 큐(printer-is-temporary=false)는 FileDevice 정책을 우회하므로, raw Print-Job이 공격자의 바이트를 root 권한으로 임의 경로에 기록한다 — 여기서는 NOPASSWD sudoers 조각이다.


목차

  • 취약점 요약
  • 근본 원인
  • 공격 체인
  • 하네스 제거 vs 공개 PoC
  • 영향받는 버전
  • 이 저장소
  • 사용법
  • 완화 조치
  • 참고 자료

취약점 요약

두 가지 프리미티브가 연쇄되어 임의의 root 파일 쓰기가 가능해진다:

  1. 재사용 가능한 Local 인증. cupsd는 /run/cups/certs/ 아래의 root 인증서로 뒷받침되는 Local 인증을 수용한다. IPP 클라이언트로 동작할 때, 401 WWW-Authenticate: Local로 챌린지를 받으면 그 admin 토큰을 스스로 제공한다. cupsd를 공격자가 제어하는 가짜 IPP 서버로 향하게 하면, 이를 root로 조종할 수 있는 유효한 토큰을 탈취하게 된다.
  2. FileDevice 우회. device-uri로서의 file://는 기본적으로 거부된다. 큐를 printer-is-temporary=false로 생성하면 영구화되어 그 가드를 우회한다; 이후 raw Print-Job이 그 바이트를 대상 파일에 root 권한으로 곧바로 기록한다.

근본 원인

                  cupsd (root)                     rogue server 127.0.0.1:9189
                       |                                    |
  CUPS-Create-Local-Printer                                 |
  device-uri=ipp://127.0.0.1:9189/ipp/print                 |
                       |  "validate" the printer            |
                       |----------------------------------->|
                       |   401 WWW-Authenticate: Local      |
                       |<-----------------------------------|
                       |   retry + Authorization: Local <T> |
                       |----------------------------------->|  capture <T>

<T>는 cupsd 자신의 admin 토큰이다 — 이를 /admin/에 재전송하면 root에 준하는 권한을 얻는다.


공격 체인

1. Cap thread          bind 127.0.0.1:9189, answer 401 Local, capture token
2. Coerce              CUPS-Create-Local-Printer -> device-uri ipp://127.0.0.1:9189/...
                       -> cupsd connects out -> 401 -> retry -> [+] Local token
3. Root write          CUPS-Add-Modify-Printer  device-uri=file:///etc/sudoers.d/<user>-pwn
                       printer-is-temporary=false (FileDevice bypass) + accept + resume
                       Print-Job (application/vnd.cups-raw, gzip) = "<user> ALL=(ALL) NOPASSWD: ALL"
4. Verify              sudo -n id   ->   root
   (fallback: a root cron job dropped to /etc/cron.d/<user>-pwn copies /etc/shadow
    to /tmp/shadow-<user> mode 644; wait ≤90s for cron)

하네스 제거 vs 공개 PoC

참조 PoC (GHSA-c54j-2vqw-wpwp / cups2root, R. de Jager)는 데모 하네스이다: root로 실행되며 자체 cupsd와 일회용 unpriv 사용자를 생성한 뒤, sudo -u unpriv로 공격자를 시뮬레이션한다. 그대로는 사용할 수 없다. 변경 사항:

  1. 하네스 제거 — root/스폰 스캐폴딩 없음; 127.0.0.1:631에서 이미 root로 실행 중인 시스템 cupsd를 대상으로 한다.
  2. 실제 대상 — 공격자 = 현재 사용자 (또는 $ATTACKER); 조각 <user> ALL=(ALL) NOPASSWD: ALL.
  3. 소켓을 통한 raw IPP — ipptool / lpadmin / lpinfo / cupsctl 없이 전면 재작성

영향받는 버전

StatusVersions
VulnerableCUPS ≤ 2.4.16
FixedCUPS 2.4.17 and later

이 저장소

FileRole
exploit.pyPoC: token leak → file:// queue → raw Print-Job → sudoers root
README.mdThis file

사용법

Python 3 표준 라이브러리만 사용 — 의존성 없음.

# attacker = current user, cupsd on 127.0.0.1:631
python3 exploit.py

# override the target user (e.g. after landing as anotheruser)
ATTACKER=anotheruser python3 exploit.py

# non-default cupsd / capture endpoint
IPP_HOST=127.0.0.1 IPP_PORT=631 CAPTURE_PORT=9189 python3 exploit.py

성공 시:

[+] Local token: <token>
[+] ROOT via sudoers

그런 다음 sudo -i.


완화 조치

  1. **CUPS 2.4.17+**로 업그레이드한다.
  2. 가능하면 cupsd를 root로 실행하지 않는다; 서비스의 권한을 낮추거나 샌드박스화한다.
  3. Local 인증과 file:// 디바이스 백엔드를 제한한다; 영구 큐에 대해 FileDevice 정책이 계속 적용되도록 유지한다.
  4. 프린팅이 필요하지 않다면: systemctl disable --now cups cups-browsed를 실행하고 패키지를 제거한다.

참고 자료

  • NVD — CVE-2026-34990
  • GHSA-c54j-2vqw-wpwp — cups2root (R. de Jager, v12-security)
  • OpenPrinting CUPS 2.4.17 릴리스 노트

면책 조항

이 프로젝트는 승인된 보안 테스트, 교육, 방어적 연구 목적으로만 제공된다. 적용 가능한 법률과 실험실 또는 고객의 교전 규칙을 준수할 책임은 사용자에게 있다.

도구 다운로드