mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-631-internet-pri
This commit is contained in:
parent
c1840269ff
commit
2e6560fe25
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user