1P by neo 19일전 | favorite | 댓글과 토론

유닉스 시스템 공격: 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-ripFoomaticRIPCommandLine 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 서비스를 비활성화하거나 업데이트해야 함
  • 비슷한 기능을 가진 다른 프로젝트로는 LPRngCUPS의 최신 버전이 있음