O Dompdf é vulnerável a um ataque ** Existência de Arquivo Oracle** através da manipulação da diretiva CSS `@font-face`. Ao fornecer HTML malicioso que refere arquivos locais através do protocolo `file://` repetidamente, um atacante pode desencadear o exaustão da memória do PHP. O ponto crítico deste defeito é a discrepância no comportamento do sistema. 1 **Se o arquivo existir:** O Dompdf tenta processar o recurso local várias vezes, levando a um erro "Permitir o tamanho da memória esgotado", que bloqueia a criação. 2. **Se o arquivo NÃO existir:** O motor de renderização falha rapidamente ou ignora a importação, e o limite de memória não é atingido. Esta discrepância permite que um atacante enumera arquivos sensíveis no servidor, independentemente das restrições `CHROOT`.
Alguns fatores impactam a capacidade dos atacantes de explorar a vulnerabilidade: - O atacante deve ser permitido fornecer conteúdo HTML sem restrições e/ou não saneados. - Os parâmetros do sistema devem ser configurados de tal forma que o Dompdf seja capaz de gerar um erro de sobrecarga de memória. - HTTP GET querystring ou corpo POST devem permitir dados grandes - os limites de memória devem ser baixos o suficiente para que o Dompdf possa desencadear um sobrecarga - `$_dompdf_show_warnings` quando definido para verdadeiro pode bloquear o uso da memória ### 1. Sistema Vulnerável. Um aplicativo web fornece um mecanismo público para gerar um PDF baseado em conteúdo fornecido pelo usuário. O aplicativo aceita entrada HTML em bruto ou renderiza conteúdo fornecido pelo usuário sem saneamento ou validação e o processa usando o Dompdf. - Ponto de End Vulnerável: - Parâmetro Vulnerável: html_input (POST). `index.php` simplificado: ``` $dompdf = novo Dompdf(novas Opções()); $dompdf->loadHtml($_POST['html_input']); $dompdf->rending(); $dompdf->stream("document.pdf"); ```.
### 2. Geração de ataque. O atacante executa um script localmente em sua própria máquina para gerar uma carga útil pesada. Esta carga útil é então enviada para o objetivo público da vítima através de um pedido padrão do HTTP POST. - Script Local do atacante (payload_gen.php). /** * Uso: php exploit.php * Exemplo: php exploit.php /etc/passwd 5000 */ // Verifique se o argumento do arquivo foi fornecido se ($argc [iterações]\n"; saída( 1 ); }.
Arquivo $ = $argv[ 1 ]; $iterations = isset( $argv[ 2 ])? (int)$argv[ 2 ]: 5000; função generate_payload($file, $iterations) { $css = "; $body = ". // Usamos @font-face para enganar o motor a tentar um arquivo local lido para ($i = 0; $i . "; } retorna " {$css} {$body} "; }. // Saída da carga útil para stdout para canalização echo generation_payload($file, $iterations);.
O atacante canaliza o HTML malicioso para um pedido de curl direcionado ao servidor remoto: ``` php ployload_gen.php /etc/passwd 5530. curl -X POST \. --data-urlencode "html_input@-" \ -- output response.pdf ```. Ao analisar o arquivo `response.pdf` gerado (pelo tamanho ou erro), o atacante remoto pode confirmar a existência de arquivos sem ter acesso direto ao servidor. Quando uma referência de arquivo é válida e os parâmetros de execução são cumpridos, o Dompdf transborda o limite PHP e pendura/desliza.
### Arquivo existente. #### Arquivo inexistente: Note que a contagem de iteração específica que irá desencadear o transbordo varia de acordo com o sistema. Isto é baseado no limite de memória imposto pelo sistema de destino, bem como os internos do PHP relacionados ao gerenciamento de memória (alocação de lixo e limpeza de lixo). Sob a maioria dos cenários não há diferença aparente no uso da memória entre arquivos existentes e inexistentes. Mas com um número específico de operações de arquivo, o limite de memória só pode ser violado quando o arquivo existe. **Informação (Arquivo Oracle via HTML refletido)**: Em cenários onde um usuário pode controlar HTML refletido, um atacante pode confirmar a existência de arquivos locais sensíveis (por exemplo, arquivos `.env`, teclas SSH ou configurações de sistema). Ao observar se o aplicativo retorna um erro de exaustão de memória (o arquivo existe) ou se renderiza normalmente (o arquivo não existe), o atacante pode mapear sistematicamente o sistema de arquivos do servidor.
Registro de aconselhamento: GHSA- 7 x 2 p-. 4 Jvh- 6384. Identificadores relacionados: CVE- 2026 - 55555. Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 22 T 21: 07: 07.000 Z e lista a sua última modificação como 2026 - 07 - 22 T 21: 07: 07.000 Z. Severidade: LOW. Dados de pontuação publicados: CVSS_V 4: CVSS: 4.0 /AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:N/VA:N/SC:N/SI:N/África do Sul:N.
Software afetado e informações de versão: Packagist dompdf/dompdf — ECOSISTEM: introduzido 0, corrigido 3.1.6. Classificação e evidência: identificadores de fraqueza CWE- 203. O registro contém 4 suporte de referências nestes tipos: WEB, PACKAGE.