Precious
https://app.hackthebox.com/machines/Precious
Summary
Precious é um alvo baseado em Linux que hospeda um utilitário de conversão de "Web para PDF" alimentado por Ruby on Rails. A avaliação identificou uma vulnerabilidade crítica de Injeção de Comando (CVE-2022-25765) na biblioteca subjacente pdfkit, permitindo a Execução Remota de Código (RCE) não autenticada.
A enumeração pós-exploração descobriu credenciais em texto claro armazenadas na configuração do Bundler de um usuário, facilitando a movimentação lateral via SSH. A escalação final de privilégios para root foi alcançada explorando uma falha de Desserialização Insegura em um script Ruby com permissões sudo que utilizava YAML.load em entradas não confiáveis.
MITRE Kill Chain
Reconnaissance
#attack/T1018 #attack/T1595_001 #attack/T1592
Initial Connectivity & Host Discovery
A avaliação começou com uma verificação de conectividade com o host alvo. Uma solicitação de eco ICMP foi transmitida para verificar o status do ativo e estimar o sistema operacional subjacente.
attacker> ping -c 1 10.10.11.189
PING 10.10.11.189 (10.10.11.189) 56(84) bytes of data.
64 bytes from 10.10.11.189: icmp_seq=1 ttl=63 time=208 ms
--- 10.10.11.189 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 208.190/208.190/208.190/0.000 msO valor TTL (Time to Live) de 63 indica que o alvo é provavelmente um sistema baseado em Linux, considerando um salto único no trânsito.
Network Service Enumeration
Para mapear a superfície de ataque, uma varredura completa de portas TCP foi realizada utilizando o nmap. A varredura visou todas as 65.535 portas para identificar listeners abertos.
Após a identificação das portas abertas, uma varredura de serviço direcionada foi executada para determinar informações de versão e a saída de scripts padrão para os serviços descobertos nas portas 22 e 80.
A enumeração de serviços revelou o seguinte:
Port 22: Executando
OpenSSH 8.4p1no Debian Bullseye.Port 80: Executando
nginx 1.18.0. O servidor web respondeu com um redirecionamento302 Foundparahttp://precious.htb/, indicando uma configuração baseada em virtual host.
Virtual Host Configuration
Para interagir com a aplicação web, o arquivo local /etc/hosts foi atualizado para mapear o endereço IP 10.10.11.189 para o domínio precious.htb.
Web Exploitation
#attack/T1592 #attack/T1593
O perfilamento tecnológico inicial foi realizado em http://precious.htb para identificar a stack web subjacente e potenciais pontos de interesse.
O alvo é uma aplicação Ruby on Rails servida via Phusion Passenger 6.0.15 por trás de um Nginx 1.18.0.
A aplicação é um utilitário "Convert Web Page to PDF" rodando em Ruby-on-Rails e servido pelo Phusion Passenger 6.0.15. Uma busca por vulnerabilidades conhecidas no Phusion Passenger foi conduzida; no entanto, os resultados foram principalmente exploits legados para Windows e não se alinharam com o ambiente alvo.
Functional Analysis: PDF Conversion
A interface web apresenta um único campo de entrada solicitando uma URL para ser convertida em um documento PDF.

Para testar o comportamento da aplicação e verificar sua capacidade de alcançar recursos externos, um servidor HTTP local foi iniciado, e uma requisição foi iniciada a partir da interface web.

A aplicação recuperou com sucesso o conteúdo do servidor controlado pelo atacante e renderizou um PDF.
Vulnerability Discovery: PDFKit Command Injection
#attack/T1190 #owasp/A05_2025 #owasp/A03_2025
A análise do PDF gerado foi realizada utilizando exiftool para identificar o mecanismo de processamento no backend.
A aplicação utiliza pdfkit v0.8.6 para a geração de documentos.
Pesquisas adicionais sobre esta versão revelaram a CVE-2022-25765, uma vulnerabilidade crítica de injeção de comando (command injection). A falha existe porque a biblioteca não higieniza adequadamente os parâmetros de URL. Se uma URL contiver uma query string com um comando shell codificado (por exemplo, usando crases ou $( )), o pdfkit executa o comando durante o processo de conversão.
Finding: Command Injection in pdfkit v0.8.6 (CVE-2022-25765)
Affected Asset:
http://precious.htb/(Backend: Ruby pdfkit library)Severity: Critical
Vulnerability Type: Unauthenticated Remote Code Execution (RCE)
Reproduction Steps:
Identifique o campo de entrada para conversão de URL.
Submeta um payload contendo um comando dentro de um parâmetro de consulta, como: http://<attacker-ip>/?name=#{'%20 sleep 5%'}
Observe a resposta atrasada ou execute um comando de reverse shell.
Remediation: Atualize a gem pdfkit para a versão 0.8.7 ou superior, que inclui a higienização adequada de parâmetros.
Exploit Verification
Uma prova de conceito foi executada para confirmar a vulnerabilidade tentando ecoar o usuário atual dentro do conteúdo do PDF. Ao passar o comando como um parâmetro de URL, o backend executou a instrução e incorporou a saída no documento resultante.
O PDF resultante confirmou a execução bem-sucedida, exibindo o nome de usuário ruby.

Remote Code Execution (RCE)
A vulnerabilidade no pdfkit v0.8.6 foi aproveitada para obter execução arbitrária de código. Ao injetar comandos shell nos parâmetros de URL passados para o gerador de PDF, o sistema subjacente executou os comandos sob o contexto do usuário ruby.
A validação inicial foi realizada executando os comandos id e hostname -I. O payload foi estruturado para satisfazer o requisito de URL enquanto escapava da lógica pretendida pela aplicação.

O documento PDF resultante renderizou a saída dos comandos, confirmando o contexto de execução e a configuração de rede.

RCE confirmado: A aplicação está executando comandos como o usuário ruby (UID 1001).
Reverse Shell Establishment
Para obter uma sessão interativa, um payload de reverse shell baseado em Ruby foi criado. Um listener HTTP não foi necessário para o payload final; em vez disso, um listener Netcat foi preparado na máquina do atacante para interceptar a conexão de saída.

O listener capturou a conexão com sucesso, fornecendo um shell remoto.
Shell Stabilization
O shell inicial foi atualizado para um TTY totalmente interativo para suportar recursos avançados de terminal e controle de jobs.
Lateral Movement
#attack/T1552_001 #attack/T1021_004
Internal Enumeration
Após o estabelecimento do acesso inicial, o sistema foi enumerado em busca de arquivos sensíveis e contas de usuário adicionais.
A enumeração identificou um usuário secundário, henry. A investigação do diretório home do usuário ruby revelou um diretório oculto .bundle contendo um arquivo de configuração.
Credenciais em texto claro para o usuário henry foram descobertas dentro do arquivo de configuração do Bundler.
As credenciais descobertas foram utilizadas para autenticar como henry via SSH, garantindo acesso mais persistente e acesso aos dados do usuário.
Após o login bem-sucedido, a flag de usuário foi recuperada do diretório home.
Privilege Escalation
#attack/T1548_003 #attack/T1210 #owasp/A08_2025
Sudo Rights Enumeration
O usuário henry foi encontrado com privilégios sudo específicos que permitiam a execução de um script Ruby como o usuário root sem fornecer uma senha.
O script alvo, /opt/update_dependencies.rb, pertence ao root e não pode ser escrito pelo usuário atual.
Vulnerability Analysis: Insecure Deserialization
A análise do código-fonte Ruby revelou uma falha de segurança crítica na maneira como o script lida com arquivos de configuração externos.
O script utiliza o método YAML.load para processar um arquivo chamado dependencies.yml. Como o script usa um caminho relativo e o método inseguro load (ao contrário de safe_load), um atacante pode controlar o fluxo de execução colocando um arquivo YAML malicioso no diretório de trabalho atual.
Finding: Insecure Deserialization in update_dependencies.rb
Affected Asset:
/opt/update_dependencies.rbSeverity: Critical
Vulnerability Type: Insecure Deserialization (Ruby YAML)
Reproduction Steps:
Crie um arquivo chamado dependencies.yml em um diretório gravável.
Incorpore um payload de objeto Ruby serializado projetado para acionar a execução de Kernel.system.
Execute o script com sudo a partir desse diretório: sudo /usr/bin/ruby /opt/update_dependencies.rb.
Remediation: Substitua YAML.load por YAML.safe_load e garanta que o script referencie arquivos de configuração usando caminhos absolutos.
Vulnerability Verification (PoC)
Para verificar a vulnerabilidade, um dependencies.yml malicioso foi criado usando uma conhecida gadget chain de desserialização Ruby YAML. O primeiro teste visou executar o comando id como root.
A saída confirmou que o comando foi executado com sucesso com privilégios de root.
Root Access Acquisition
O payload foi modificado para estabelecer um ponto de acesso persistente de nível root. Especificamente, o binário bash foi copiado para o diretório /tmp e recebeu permissões SUID.
Executar o script novamente acionou o payload:
Ao executar o binário bash SUID com a flag -p (preservar permissões), um shell root foi obtido.
Escalação de privilégios bem-sucedida. Comprometimento total do sistema alcançado.

Atualizado