← back
CVE-2017-8291highunder attackCWE-843

CVE-2017-8291

100Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 7.8epss 96%
from disclosure to weapon5 days
Published on NVDApr 27
1st PoC+5d
metasploitApr 27
CISA KEV+1853d
exploitation probability
96%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
9 public exploit(s)
Action required by CISAfederal deadline: 2022-06-14

Apply updates per vendor instructions.

Summary

Falha de type confusion no interpretador PostScript do Ghostscript permite que um documento .eps/.ps malicioso desative a proteção -dSAFER e execute comandos arbitrários no sistema, através do pseudo-dispositivo de saída %pipe%. Foi explorada in the wild em abril de 2017 antes de existir qualquer patch público, o que motivou sua inclusão no catálogo KEV da CISA. O risco real está em qualquer software que invoque o gs internamente para renderizar imagens — não só em quem chama o binário gs diretamente.

Technical detail

O operador .rsdparams do interpretador PostScript do Ghostscript não validava corretamente o tipo do operando recebido na pilha (CWE-843, type confusion / missing type check). Tavis Ormandy demonstrou que basta um valor numérico malformado passado a .rsdparams (ele cita o teste mínimo "16#41414141 .rsdparams", sem o prefixo hexadecimal) para corromper a pilha de operandos de um jeito que engana o interpretador sobre o tipo do dado manipulado. O operador .eqproc tinha o mesmo problema e também precisou ser corrigido.

Essa corrupção é usada para desativar a flag -dSAFER, que existe justamente para impedir que um documento PostScript acesse o sistema de arquivos ou o shell. Com -dSAFER neutralizado, o atacante usa a diretiva /OutputFile combinada com o pseudo-dispositivo %pipe% do Ghostscript — um recurso legítimo que permite direcionar a saída de renderização para um processo externo via shell — para forçar o gs a executar um comando arbitrário do sistema operacional.

O vetor de entrada é um arquivo .eps (Encapsulated PostScript) construído para acionar essa sequência: corromper a pilha via .rsdparams/.eqproc, burlar o SAFER, e então declarar um /OutputFile contendo a string "%pipe%" seguida do comando desejado. O atacante controla integralmente o conteúdo do arquivo PostScript e, por consequência, o comando executado.

O relatório inicial foi feito à Atlassian pelo próprio time de segurança da empresa, que identificou o problema em produtos que processavam arquivos enviados por usuários. O bug upstream (697808) foi marcado como duplicata do bug 697799, que trata da correção definitiva no código do Ghostscript.

How it’s exploited

O vetor mais comum não é chamar o binário gs diretamente, mas sim qualquer aplicação que delega renderização de imagem a bibliotecas que internamente invocam o Ghostscript para tipos PostScript/EPS/PDF — ImageMagick, GraphicsMagick e Pillow são citados explicitamente pela Atlassian como caminhos de exposição. Isso significa que um simples upload de "imagem" — na prática um arquivo PostScript disfarçado ou com extensão trocada — processado por uma rotina de thumbnail, conversão ou validação de imagem pode disparar a execução.

O CVSS classificado como AV:L reflete que a exploração ocorre localmente dentro do processo que interpreta o arquivo (o próprio gs), não que exija acesso à rede da máquina — o vetor de entrega do arquivo malicioso pode perfeitamente ser remoto (upload web, anexo de e-mail, pipeline de processamento de mídia). UI:R indica que é necessária uma ação que dispare o processamento do arquivo (abrir, converter, gerar thumbnail), mas não exige interação sofisticada da vítima. Não há exigência de autenticação (PR:N) nem de configuração não padrão: -dSAFER é o comportamento default do Ghostscript e é justamente o que a falha contorna.

A exploração ativa registrada em abril de 2017 ocorreu antes da publicação do patch, o que a torna um caso clássico de zero-day explorado in the wild — daí a listagem no catálogo KEV. Existem módulo público no Metasploit e PoCs publicadas, o que baixou bastante a barreira técnica para replicar o ataque depois da divulgação.

Versions

Affected
Ghostscript (Artifex) em todas as versões até 9.21 inclusive, e builds até 26/04/2017 antes da aplicação do patch ("through 2017-04-26" segundo a descrição oficial). Afeta também qualquer software que embuta ou invoque o interpretador Ghostscript para processar PostScript/EPS/PDF, como bibliotecas de imagem que o usam como backend.
Fixed in
Corrigido via os commits 04b37bbce1 e 4f83478c88 no repositório git do ghostpdl, com patches adicionais 57f20719 e ccfd2c75ac para regressões subsequentes. Distribuições aplicaram como backport: RHEL 6 e 7 via RHSA-2017:1230 (pacote ghostscript-9.07-20.el7_3.5 e correspondentes), SUSE (bug 1036453) e Gentoo via GLSA 201708-06.

How to protect

A correção definitiva está nos patches aplicados diretamente no repositório git do Ghostscript (ghostpdl), commits 04b37bbce1 e 4f83478c88, com duas correções adicionais posteriores para regressões: 57f20719 (problema com a feature DELAYBIND) e ccfd2c75ac (correção de checagem de underflow da pilha de operandos). Quem compila o Ghostscript a partir do código-fonte deve aplicar essa cadeia completa de patches, não apenas o primeiro commit.

Para quem usa pacotes de distribuição, a correção chegou via backport: Red Hat publicou RHSA-2017:1230 para RHEL 6 e 7 (ghostscript-9.07-20.el7_3.5 e equivalentes), SUSE tratou no bug 1036453, e Gentoo publicou o GLSA 201708-06. Atualizar para o pacote ghostscript da distribuição igual ou posterior a essas correções resolve o problema nessas plataformas.

Como -dSAFER é justamente o mecanismo neutralizado pela falha, confiar apenas nessa flag como controle compensatório é o mito a evitar — ela não protege contra este bug específico. Um paliativo real e de baixo custo usado amplamente na época (no mesmo contexto do ImageTragick) é remover ou desabilitar, na política do consumidor de imagens (por exemplo policy.xml do ImageMagick), o suporte a coders PS, EPS e PDF que acionam o Ghostscript internamente, além de evitar que arquivos enviados por usuários sejam processados por essas rotinas sem sandboxing (chroot, contêiner isolado, seccomp) restringindo acesso a shell e sistema de arquivos do processo que roda o gs.

How to detect

Buscar em arquivos PostScript/EPS recebidos ou armazenados pela ocorrência simultânea das strings ".rsdparams" (ou ".eqproc") com "/OutputFile" e "%pipe%" — essa combinação é o indicador mais direto de tentativa de exploração, já presente na própria descrição da CVE. Também vale monitorar processos filhos inesperados spawnados a partir do processo gs (via auditd/EDR), já que a exploração bem-sucedida resulta em execução de shell a partir do interpretador. Não há assinatura de rede confiável, porque a entrega do arquivo malicioso pode ocorrer por qualquer canal (upload HTTP, e-mail, compartilhamento de arquivo) e o processamento é local ao host que roda o Ghostscript.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
Artifex Ghostscript through 2017-04-26 allows -dSAFER bypass and remote command execution via .rsdparams type confusion with a "/OutputFile (%pipe%" substring in a crafted .eps document that is an input to the gs program, as exploited in the wild in April 2017.
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Affected products
n/a · n/a
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.