Artifex Ghostscript 10.05.1 之前版本中存在一个漏洞,导致用于保护 PDF 文件的明文密码被嵌入到输出中。该问题源于 gs_lib_ctx_stash_sanitized_arg(位于 base/gslibctx.c)中缺乏参数清理,特别是在处理 # 字符时。
当使用 -sUserPassword 或 -sOwnerPassword 等命令行参数生成受密码保护的 PDF 时,完整调用(包括密码)以明文形式存储在生成的 PDF 文件开头。任何有权访问该文件的人都可以使用简单的工具(Windows 上的 type 或 Linux/macOS 上的 cat)检索到密码。
安装 Ghostscript 10.05.0 或更早版本
https://github.com/ArtifexSoftware/ghostpdl-downloads
使用如下命令生成一个受密码保护的 PDF:
gswin64.exe -dDisplayFormat=198788 -dDisplayResolution=96 -dCompatibilityLevel#1.4 -sUserPassword#123456789 -sOwnerPassword#123456789 -q -P- -dSAFER -dNOPAUSE -dBATCH -sDEVICE#pdfwrite -sOutputFile#C:\Users\Admin\Downloads\test.pdf
检查生成的 PDF:
type C:\Users\Admin\Downloads\test.pdf
你将在文件开头看到完整的命令行字符串,其中包含明文密码。