Translated ['src/network-services-pentesting/pentesting-631-internet-pri

This commit is contained in:
Translator 2025-08-14 06:34:11 +00:00
parent c1840269ff
commit 2e6560fe25

View File

@ -1,23 +1,103 @@
# Internet Printing Protocol
{{#include ../banners/hacktricks-training.md}}
# 인터넷 인쇄 프로토콜 \(IPP\)
**인터넷 인쇄 프로토콜 (IPP)**는 **RFC 2910****RFC 2911**에 명시된 바와 같이 네트워크 인쇄의 사실상 표준입니다. 이는 **HTTP/1.1** 위에서 작동하며(명확한 텍스트 또는 TLS) 인쇄 작업 생성, 프린터 기능 쿼리 및 대기열 관리를 위한 풍부한 API를 제공합니다. **IPP Everywhere**와 같은 현대적인 확장은 모바일 및 클라우드 환경에서 드라이버 없이 인쇄를 가능하게 하며, 동일한 패킷 형식이 3D 프린터에도 재사용되었습니다.
**인터넷 인쇄 프로토콜 (IPP)**는 **RFC2910** 및 **RFC2911**에 명시된 바와 같이 인터넷을 통한 인쇄의 기초가 됩니다. **IPP Everywhere**와 같은 발전은 모바일 및 클라우드 인쇄를 표준화하려는 목표를 가지고 있으며, **3D 인쇄**를 위한 확장의 도입으로 IPP의 확장 가능성을 보여줍니다.
불행히도 포트 **631/tcp (및 프린터 검색을 위한 631/udp**를 노출하는 것은 전통적인 사무실 프린터와 **CUPS**를 실행하는 모든 Linux/Unix 호스트에서 심각한 보안 문제로 이어지는 경우가 많습니다.
**HTTP** 프로토콜을 활용하여 IPP는 **기본/다이제스트 인증** 및 **SSL/TLS 암호화**와 같은 확립된 보안 관행의 혜택을 누립니다. 인쇄 작업 제출이나 프린터 상태 조회와 같은 작업은 **포트 631/tcp**에서 운영되는 IPP 서버를 향한 **HTTP POST 요청**을 통해 수행됩니다.
IPP의 잘 알려진 구현체는 **CUPS**로, 다양한 리눅스 배포판과 OS X에서 널리 사용되는 오픈 소스 인쇄 시스템입니다. 유용성에도 불구하고, IPP는 LPD와 유사하게 **PostScript** 또는 **PJL 파일**을 통해 악성 콘텐츠를 전송하는 데 악용될 수 있어 잠재적인 보안 위험을 강조합니다.
---
## Quick PoC crafting raw IPP with Python
```python
# Example of sending an IPP request using Python
import requests
import struct, requests
url = "http://printer.example.com:631/ipp/print"
headers = {"Content-Type": "application/ipp"}
data = b"..." # IPP request data goes here
# Minimal IPP Get-Printer-Attributes request (operation-id 0x000B)
ipp = struct.pack(
">IHHIHH", # version 2.0, operation-id, request-id
0x0200, # 2.0
0x000B, # Get-Printer-Attributes
0x00000001, # request-id
0x01, 0x47, # operation-attributes-tag, charset attr (skipped)
) + b"\x03" # end-of-attributes
response = requests.post(url, headers=headers, data=data, verify=True)
print(response.status_code)
r = requests.post("http://printer:631/ipp/print", headers={"Content-Type":"application/ipp"}, data=ipp)
print(r.status_code, r.content[:40])
```
프린터 해킹에 대해 더 알고 싶다면 [**이 페이지를 읽어보세요**](http://hacking-printers.net/wiki/index.php/Main_Page).
---
## 열거 및 재조사
### 1. Nmap NSE
```bash
# run all CUPS/IPP scripts
nmap -sV -p631 --script=cups* <target>
# or only basic info
nmap -p631 --script=cups-info,cups-queue-info <target>
```
`cups-info` 스크립트는 모델, 상태 및 큐 통계를 추출하고 `cups-queue-info`는 대기 중인 작업을 나열합니다.
### 2. CUPS의 IPP 유틸리티
* `ippfind` 멀티캐스트/UDP 검색 (cups-browsed에 대해 작동):
```bash
ippfind --timeout 3 --txt -v "@local and port=631" # 프린터 목록
```
* `ipptool` *.test* 파일에 정의된 임의 요청:
```bash
ipptool -tv ipp://<IP>/ipp/print get-printer-attributes.test
```
번들된 *get-printer-attributes.test* 파일은 펌웨어 버전, 지원되는 문서 형식 등을 쿼리합니다.
### 3. Shodan / Censys dorks
```bash
shodan search 'product:"CUPS (IPP)" port:631'
```
**70,000**개 이상의 호스트가 2025년 4월에 CUPS를 공개적으로 노출하고 있었습니다.
---
## 최근 취약점 (2023-2025)
| 연도 | CVE ID(s) | 영향을 받는 구성 요소 | 영향 |
|------|-----------|--------------------|--------|
| 2025 | CVE-2023-50739 | Lexmark 펌웨어 (IPP 파서) | 힙 오버플로우 → Wi-Fi/LAN을 통한 RCE |
| 2024 | CVE-2024-47076, 47175, 47176, 47177 | cups-browsed, libcupsfilters, libppd, cups-filters | CUPS 브라우징이 활성화된 모든 Linux 데스크탑/서버에서의 완전한 비인증 RCE 체인 |
| 2024 | CVE-2024-35235 | cupsd 2.4.8- | 심볼릭 링크 트릭 → 임의의 **chmod 666** → 권한 상승 |
| 2023 | CVE-2023-0856 (Canon) + Pwn2Own | `sides` 속성의 스택 오버플로우 → 원격 코드 실행 |
### cups-browsed RCE 체인 (2024년 9월)
1. `cups-browsed`는 프린터 광고를 위해 **UDP/631**에서 수신 대기합니다.
2. 공격자가 악의적인 IPP URL을 가리키는 단일 스푸핑 패킷을 보냅니다 (CVE-2024-47176).
3. `libcupsfilters`는 검증 없이 원격 **PPD**를 자동으로 가져옵니다 (CVE-2024-47076 & 47175).
4. 조작된 PPD는 **foomatic-rip** 필터를 악용하여 인쇄될 때마다 임의의 셸 명령을 실행합니다 (CVE-2024-47177).
개념 증명 코드는 연구자의 블로그에 공개되어 있으며, 익스플로잇은 **인증이 필요 없습니다**; UDP/631에 대한 네트워크 접근만으로 충분합니다.
#### 임시 완화 조치
```
sudo systemctl stop cups-browsed
sudo systemctl disable cups-browsed
sudo ufw deny 631/udp # or equivalent firewall rule
```
패치가 2024년 10월에 주요 배포판에 의해 릴리스되었습니다 **cups-filters ≥ 2.0.0**을 확인하십시오.
### cupsd symlink `Listen` 잘못된 구성 (CVE-2024-35235)
*cupsd.conf*의 `Listen` 지시문에 심볼릭 링크를 배치하면 **cupds (root)**가 공격자가 선택한 경로에 대해 `chmod 666`을 수행하게 되어 시스템 파일이 쓰기 가능해지고, Ubuntu에서는 `FoomaticRIPCommandLine`을 통해 악성 PPD로 코드 실행이 가능합니다.
---
## 공격 기술
* **인증되지 않은 원시 인쇄 작업** 많은 프린터가 인증 없이 `POST /ipp/print`를 수용합니다. 악성 **PostScript** 페이로드는 고급 장치에서 셸 명령(`system("/bin/nc ...")`)을 호출할 수 있습니다.
* **작업 탈취** `Cancel-Job` 다음에 `Send-Document`를 사용하면 공격자가 다른 사람의 문서를 물리적으로 인쇄되기 전에 교체할 수 있습니다.
* **SNMP → IPP 조합** 기본 커뮤니티 `public`은 IPP URL에 필요한 내부 큐 이름을 종종 유출합니다.
---
## 방어 모범 사례
1. CUPS 및 프린터 펌웨어를 신속하게 패치하고, 공급업체 PSIRT 피드를 구독하십시오.
2. zeroconf 인쇄가 필요하지 않는 한 `cups-browsed` 및 UDP/631을 비활성화하십시오.
3. TCP/631을 신뢰할 수 있는 서브넷/VPN으로 제한하고 **TLS (ipps://)**를 적용하십시오.
4. 익명 인쇄 대신 **Kerberos/Negotiate** 또는 인증서 인증을 요구하십시오.
5. 로그 모니터링: `/var/log/cups/error_log`에서 `LogLevel debug2`를 사용하면 불완전한 PPD 다운로드 또는 의심스러운 필터 호출을 보여줍니다.
6. 고보안 네트워크에서는 인쇄를 강화된 격리된 인쇄 서버로 이동하여 USB를 통해 장치에 작업을 프록시하십시오.
## References
- Akamai “Critical Linux RCE Vulnerability in CUPS — What We Know and How to Prepare”, April 2025.
- Debian Security Tracker CVE-2024-35235 details.
{{#include ../banners/hacktricks-training.md}}