유닉스 시스템 공격: CUPS를 통한 공격, Part I
요약
-
CVE-2024-47176:
cups-browsed
<= 2.0.1은 UDP INADDR_ANY:631에서 바인딩되어, 공격자가 제어하는 URL로 Get-Printer-Attributes
IPP 요청을 트리거할 수 있음
-
CVE-2024-47076:
libcupsfilters
<= 2.1b1의 cfGetPrinterAttributes5
는 IPP 서버에서 반환된 IPP 속성을 검증하거나 정리하지 않아, 공격자가 제어하는 데이터를 CUPS 시스템에 제공할 수 있음
-
CVE-2024-47175:
libppd
<= 2.1b1의 ppdCreatePPDFromIPP2
는 임시 PPD 파일에 IPP 속성을 기록할 때 검증하거나 정리하지 않아, 공격자가 제어하는 데이터를 주입할 수 있음
-
CVE-2024-47177:
cups-filters
<= 2.0.1의 foomatic-rip
는 FoomaticRIPCommandLine
PPD 매개변수를 통해 임의의 명령 실행을 허용함
영향
- 원격 인증되지 않은 공격자가 기존 프린터의 IPP URL을 악성 URL로 교체하거나 새로운 프린터를 설치할 수 있으며, 프린트 작업이 시작될 때 임의의 명령을 실행할 수 있음
진입점
-
WAN / 공용 인터넷: 원격 공격자가 포트 631로 UDP 패킷을 전송함. 인증 불필요
-
LAN: 로컬 공격자가 zeroconf / mDNS / DNS-SD 광고를 스푸핑하여 동일한 코드 경로를 통해 RCE를 달성할 수 있음
영향을 받는 시스템
- 대부분의 GNU/Linux 배포판
- 일부 BSD
- Google Chromium / ChromeOS (가능성 있음)
- Oracle Solaris
- 기타
해결책
-
cups-browsed
서비스를 비활성화하고 제거함
- 시스템의 CUPS 패키지를 업데이트함
- 시스템을 업데이트할 수 없는 경우, UDP 포트 631과 모든 DNS-SD 트래픽을 차단함
소개
- 몇 주 전, 새로운 노트북에 Ubuntu를 설정하던 중 UDP 포트를 청취하는 서비스를 확인하기 위해
netstat -anu
명령을 실행함
- 포트 631에서
cups-browsed
가 UDP를 사용하여 모든 네트워크 인터페이스에서 청취하고 응답하는 것을 발견함
-
cups-browsed
는 새로운 프린터를 자동으로 시스템에 추가하는 역할을 함
cups-browsed란?
-
cups-browsed
는 CUPS 시스템의 일부로, 새로운 프린터를 발견하고 자동으로 시스템에 추가함
- 기본 설정 파일은 주석 처리되어 있으며, 누구나 연결할 수 있도록 허용됨
스택 버퍼 오버플로 및 경쟁 조건
-
cups-browsed
는 oss-fuzz의 커버리지에 포함되지 않음
-
process_browse_data
함수에서 스택 버퍼 오버플로와 경쟁 조건이 발생할 수 있음
- 이러한 문제는 개발자와 CERT에 보고되었으나, 아직 패치되지 않음
found_cups_printer로 돌아가기
-
found_cups_printer
함수는 패킷에서 URL을 추출하여 cfGetPrinterAttributes
함수에 전달함
- 이 URL은 공격자가 제어하는 서버로 연결됨
인터넷 프린팅 프로토콜 (IPP)
- IPP는 클라이언트 장치와 프린터 간의 통신을 위한 프로토콜임
- 공격자가 제어하는 프린터 속성을 반환하여, 시스템에 프린터를 추가할 수 있음
GN⁺의 정리
- 이 글은 CUPS 시스템의 취약점을 악용하여 원격 코드 실행을 달성하는 방법을 설명함
- CUPS와 관련된 다양한 취약점이 있으며, 이를 통해 공격자가 시스템을 제어할 수 있음
- 이러한 취약점은 아직 패치되지 않았으며, 사용자는 CUPS 서비스를 비활성화하거나 업데이트해야 함
- 비슷한 기능을 가진 다른 프로젝트로는
LPRng
와 CUPS
의 최신 버전이 있음