
Небольшая статья с примерами для понимания CVE-2023-43115
Небольшая заметка с примерами, помогающая разобраться в CVE-2023-43115.
[!WARNING] Я написал это в основном для себя, чтобы понять проблему и научиться кибербезопасности. Поэтому здесь могут быть ошибки.
Чтобы использовать устройство IJS (Improved Inkjet Printing), Ghostscript должен запустить IJS-сервер. Это делается с помощью пути, указанного в параметре IjsServer. Параметр IjsServer можно настроить так, чтобы он ссылался на любой файл в файловой системе, и Ghostscript затем выполняет указанный файл. Здесь легко увидеть, как этим можно злоупотребить: например, можно выполнить следующую команду ghostscript, чтобы вывести 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
Само по себе это не так уж проблематично, поскольку этот параметр должен быть указан пользователем. Однако также можно задать это устройство и параметр IjsServer внутри PostScript-скрипта.
Смотрите, например, attack_example_*.ps (выполняется с помощью gs FILENAME). Это, в свою очередь, может позволить атакующему выполнить код на машине, запускающей этот скрипт. Но эта проблема известна и официально документирована, и её можно предотвратить, установив LockSafetyParams в значение true.
Чтобы использовать эту CVE при включённом LockSafetyParams, атакующему понадобится рабочий эксплойт для изменения LockSafetyParams. Однако, если такой эксплойт доступен, в зависимости от версии может существовать ряд других возможных векторов атак.
Автор исправления Кен Шарп назвал упомянутое решение безопасности LockSafetyParams хакерским, поскольку оно реализовано в PostScript и, следовательно, уязвимо для PostScript-кода. Это привело к нескольким проблемам безопасности в прошлом, когда можно было перезаписать этот параметр (пример см. в описании CVE-2018-19475. Исправление меняет механизм защиты, который предотвращает установку пути IjsServer, с LockSaftyParams на новый параметр -dSAFER, на который PostScript-код повлиять не может.
[!NOTE] В документации уязвимой версии 9.55.0 уже указано использование параметра -dSAFER, что, по-видимому, является ошибкой документации.