
一份简要说明及示例,用于帮助理解 CVE-2023-43115。
[!WARNING] 我主要是为自己理解这个问题并学习网络安全而写的。因此可能存在错误。
为了使用 IJS 设备(改进的喷墨打印),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
本身来说,这并没有太大问题,因为该参数必须由用户提供。但是,也可以在 PostScript 脚本中设置此设备和 IJsServer 参数。
例如,参见 attack_example_*.ps(使用 gs FILENAME 执行)。这可能会允许攻击者在运行该脚本的机器上执行代码。但是,这个问题是已知的,并且已在官方文档中记录,可以通过将 LockSafetyParams 设置为 true 来阻止。
在启用 LockSafetyParams 的情况下利用此 CVE,攻击者需要能够修改 LockSafetyParams 的有效利用方式。但是,如果存在这样的利用方式,根据使用的版本,可能还存在许多其他潜在的攻击向量。
修复的作者 Ken Sharp 称上述的 LockSafetyParams 安全解决方案是一种 hacky 方式,因为它是在 PostScript 中实现的,因此易受 PostScript 代码的攻击。这导致了过去的一些安全问题,使得该参数可能被覆盖(参见 CVE-2018-19475 分析)。修复方法将防止设置 IjsServer 路径的保护机制从 LockSafetyParams 更改为新的 -dSAFER 参数,该参数不受 PostScript 代码影响。
[!NOTE] 易受攻击版本 9.55.0 的文档已经说明要使用 -dSAFER 参数,这似乎是一个文档错误。