
Um pequeno artigo com exemplos para entender CVE-2023-43115
Um pequeno artigo com exemplos para ajudar a entender o CVE-2023-43115.
[!WARNING] Escrevi isto principalmente para mim mesmo, a fim de entender o problema e aprender sobre cibersegurança. Portanto, pode conter erros.
Para utilizar o dispositivo IJS (Improved Inkjet Printing), o Ghostscript precisa iniciar um servidor IJS. Isso é feito usando o caminho especificado no parâmetro IjsServer. O parâmetro IjsServer pode ser configurado para referenciar qualquer arquivo desejado no sistema de arquivos, e o Ghostscript subsequentemente executa esse arquivo designado. Aqui é fácil ver como isso poderia ser mal utilizado, por exemplo, você poderia executar o seguinte comando do ghostscript para imprimir hello world.
❯ gs -sDEVICE=ijs -sIjsServer="bash -c 'echo Hello World>&2'"
GPL Ghostscript 9.55.0 (2021-09-27)
Copyright (C) 2021 Artifex Software, Inc. All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Hello World
Por si só, isso não é tão problemático, já que esse parâmetro precisa ser fornecido pelo usuário. No entanto, também é possível definir este dispositivo e o parâmetro IJsServer dentro de um script postscript.
Veja, por exemplo, attack_example_*.ps (execute com gs FILENAME). Isso, por sua vez, poderia permitir que um ataque executasse código na máquina que está executando este script. Mas, este problema é conhecido e oficialmente e poderia ser como true.
Para aproveitar este CVE enquanto LockSafetyParams está ativado, um atacante precisaria de um exploit funcional para alterar LockSafetyParams. No entanto, se tal exploit estiver disponível, pode haver vários outros vetores de ataque possíveis, dependendo da versão utilizada.
O autor da correção, Ken Sharp, chamou a mencionada solução de segurança LockSafetyParams de "hacky" porque é implementada em postscript e, portanto, é vulnerável a código postscript. Isso levou a vários problemas de segurança no passado, onde era possível sobrescrever este parâmetro (para um exemplo, veja o artigo sobre o CVE-2018-19475 ). A correção altera o mecanismo de proteção que impedia a definição do caminho IjsServer a partir do LockSaftyParams para o novo parâmetro -dSAFER, que não pode ser afetado por código postscript.
[!NOTE] A Documentação da versão vulnerável 9.55.0 já afirma para usar o parâmetro -dSAFER, o que parece ser um erro na documentação.