插件窝 干货文章 如何进行Ghostscript SAFER沙箱绕过漏洞的分析

如何进行Ghostscript SAFER沙箱绕过漏洞的分析

沙箱 操作符 PostScript 绕过 719    来源:    2025-04-23

Ghostscript SAFER沙箱绕过漏洞分析

漏洞概述

Ghostscript的SAFER沙箱机制旨在限制PostScript解释器的功能,防止恶意文档执行危险操作。然而,历史上存在多个绕过SAFER沙箱的漏洞,可能导致任意代码执行或文件系统访问。

漏洞分析要点

1. 理解SAFER沙箱机制

SAFER模式(通过-dSAFER参数启用)旨在: - 限制文件系统访问 - 禁用危险操作符 - 限制设备访问 - 防止特权提升

2. 常见绕过技术

a) 操作符滥用

  • 通过file操作符结合特殊路径(如%pipe%|)执行命令
  • 利用未正确限制的操作符如deletefilerenamefile

b) 类型混淆

  • 利用PostScript的类型系统缺陷绕过安全检查
  • 通过构造特殊对象绕过参数验证

c) 错误处理机制滥用

  • 通过触发和处理错误来改变执行流程
  • 利用错误处理期间的临时权限提升

d) 设备控制

  • 滥用%device%前缀访问受限设备
  • 通过输出设备如%stdout泄露信息

3. 分析方法

静态分析

  1. 检查gslib/目录下的.ps文件,特别是与安全相关的:

    • operators.ps - 操作符定义
    • save.ps - 安全状态管理
    • filedev.ps - 文件设备处理
  2. 查找SAFER相关条件判断:

    currentglobal true setglobal SAFER and
    

动态分析

  1. 使用调试版本运行Ghostscript:

    gs -dSAFER -Zdebug
    
  2. 跟踪操作符执行流程,特别注意:

    • 权限检查的绕过路径
    • 条件判断的不一致性

4. 漏洞利用示例

一个历史漏洞(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%执行命令

缓解措施

  1. 更新至最新Ghostscript版本
  2. 考虑禁用PostScript解释器(如使用-dNOSAFER但不处理不受信任文档)
  3. 实施应用沙箱(如使用seccomp, AppArmor等)
  4. 最小化Ghostscript的权限运行

分析工具建议

  1. Ghidra/IDA Pro - 用于二进制分析
  2. strace/ltrace - 跟踪系统调用和库调用
  3. GDB/LLDB - 用于运行时调试
  4. 自定义PostScript测试用例生成器

参考资源

  1. Ghostscript官方安全公告
  2. CVE数据库相关条目
  3. PostScript语言参考手册
  4. 历史漏洞分析文章(如Project Zero的博客)

如需分析特定漏洞或需要更详细的技术细节,请提供更多信息。