SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板

作者 akihi(白帽攻防录讲师),某甲方网络安全工程师,合合 SRC 年度第一、腾讯 SRC 连续三年前十,单漏洞赏金 4w+,擅长 Web/App/PC 客户端漏洞挖掘。专注 Windows 内核安全、打印服务攻击面与企业内网渗透研究。本文基于公开 CVE 信息与技术原理深度复盘,供安全研究与防护参考。

一、漏洞时间线

2026 年 10 月 13 日,微软发布了 10 月 Patch Tuesday------有史以来最大规模的月度安全更新,共修复 1414 个漏洞。在这堆漏洞中,有一组特别值得内网安全研究者关注:Microsoft PostScript Printer Driver 同时存在两个 RCE 漏洞,全部都是 CVSS 9.8,全部不需要认证,全部不需要用户交互,攻击者只要能访问打印服务器的网络端口,发送一个特制打印任务就能在 SYSTEM 权限下执行代码。

时间 事件 影响
2026-10-13 微软 10 月 Patch Tuesday 发布 修复 1414 个漏洞,历史最大
2026-10-13 CVE-2026-70147 公开披露 PostScript 打印机驱动堆缓冲区溢出 RCE,CVSS 9.8
2026-10-13 CVE-2026-70153 公开披露 PostScript 打印机驱动堆缓冲区溢出 RCE,CVSS 9.8
2026-10-13 CrowdStrike 发布技术分析 指出打印服务器是横向移动关键枢纽
2026-10-14 Qualys 发布详细分析报告 确认两个 PostScript 漏洞影响范围

为什么说这组漏洞危险?因为打印服务器是企业内网的"隐形枢纽"------它连接着多个网段,被客户端工作站信任,而且运行在 SYSTEM 权限下。历史上 PrintNightmare(CVE-2021-34527)曾经震惊整个安全圈,因为它实现了"网络可达 + 无需认证 + SYSTEM 权限 RCE"的完美攻击链。这次的 PostScript 打印机驱动漏洞,本质上是同一个攻击面的新变种------攻击者不需要用户做任何事,只要能网络访问打印服务,就能拿下 SYSTEM 权限。

二、攻击链全景

让我们先还原完整的攻击路径:

复制代码
攻击者准备特制 PostScript 打印任务
        │
        ▼
第一步:构造恶意打印任务
        │  攻击者做什么?
        │  - 构造特殊格式的 PostScript 打印数据
        │  - 在打印任务中放入恶意载荷
        │  - 触发 PostScript 解析器中的堆缓冲区溢出
        │
        │  为什么能触发?
        │  - PostScript 是一种图灵完备的编程语言
        │  - 打印驱动需要解析复杂的 PostScript 代码
        │  - 解析过程中存在边界检查缺陷
        ▼
第二步:发送到打印服务器
        │  攻击者做什么?
        │  - 通过网络连接打印服务器的打印端口
        │  - 发送特制的打印任务
        │  - 模拟正常的打印请求
        │
        │  为什么能送达?
        │  - 打印服务监听在标准端口
        │  - 为了支持客户端打印,通常开放给整个内网
        │  - 传统防护难以区分恶意打印任务
        ▼
第三步:Spooler 服务接收任务
        │  攻击者做什么?
        │  - Print Spooler 服务接收打印任务
        │  - 将任务交给 PostScript 驱动处理
        │  - 驱动在 SYSTEM 上下文中运行
        │
        │  为什么权限高?
        │  - Print Spooler 服务默认以 SYSTEM 权限运行
        │  - 打印驱动也在 SYSTEM 上下文中加载
        │  - 漏洞直接获得最高系统权限
        ▼
第四步:PostScript 解析触发漏洞
        │  攻击者做什么?
        │  - PostScript 解析器处理恶意打印数据
        │  - 堆缓冲区溢出破坏内存
        │  - 攻击者控制溢出数据
        │
        │  为什么能控制?
        │  - 攻击者完全控制 PostScript 代码
        │  - 可以精确控制溢出长度和内容
        │  - 内存布局可预测
        ▼
第五步:SYSTEM 权限代码执行
        │  攻击者做什么?
        │  - 在打印服务器上以 SYSTEM 权限执行任意代码
        │  - 窃取凭证、安装后门
        │  - 利用打印服务器作为枢纽横向移动
        │
        │  为什么影响大?
        │  - 打印服务器通常连接多个网段
        │  - 被大量客户端工作站信任
        │  - 是横向移动的完美跳板
        ▼
攻击者获得企业内网 SYSTEM 立足点
        │
        ├─ 窃取打印服务器上的所有凭证
        ├─ 利用打印服务器的多网段连接横向移动
        ├─ 部署持久化后门
        └─ 作为跳板攻击域控制器

**关键结论:**CrowdStrike 在分析中特别指出:"打印服务器经常保持与多个网段的连接,并与客户端工作站维持提升的信任关系,这使得它们成为横向移动的宝贵枢纽。"这句话点出了打印服务器在企业内网中的特殊地位------它不仅仅是一个打印服务,更是一个连接内网各个区域的"信任节点"。历史上 PrintNightmare 之所以被评为最危险的漏洞之一,就是因为它同时满足三个条件:网络可达(不需要先进入内网)、无需认证(匿名就能打)、SYSTEM 权限(拿下就是最高权限)。这次的 PostScript 打印机驱动漏洞,再次印证了 Windows 打印服务这个攻击面的长期性------每隔几年就会出新的漏洞,因为这个子系统太复杂、权限太高、部署太广。在 SRC 内网渗透测试中,打印服务一直是高价值目标------它往往被安全团队忽略,但一旦被利用,直接拿下 SYSTEM 权限。

三、PostScript 与打印机驱动原理

3.1 PostScript 是什么

特性 说明
PostScript 一种页面描述语言,用于描述打印输出
设计方 Adobe Systems,1984 年发布
特点 图灵完备------可以执行任意计算
用途 激光打印机、专业印刷系统
解析方式 打印机驱动解析 PostScript 代码生成位图
风险 解析复杂代码容易出内存漏洞

3.2 为什么 PostScript 容易出漏洞

复制代码
// PostScript 为什么容易出内存问题?

// 原因一:图灵完备的语言
// - PostScript 不只是简单的打印指令
// - 它是一种完整的编程语言
// - 支持变量、循环、条件判断
// - 解析器需要处理各种复杂逻辑
// - 逻辑复杂就容易出 bug

// 原因二:历史包袱重
// - PostScript 已经有 40 多年历史
// - 很多解析代码是几十年前写的
// - 为了兼容性保留了旧功能
// - 旧代码中积累了大量内存问题

// 原因三:解析器复杂度高
// - PostScript 有上千个操作符
// - 支持各种数据类型和编码
// - 需要处理嵌套结构和错误恢复
// - 任何一个解析路径都可能出问题

// 原因四:网络可达
// - 打印任务可以通过网络发送
// - 攻击者不需要物理接触打印机
// - 远程就能触发解析器漏洞
// - 攻击面从本地扩展到全网

// 原因五:SYSTEM 权限
// - 打印机驱动在 SYSTEM 上下文中运行
// - 一个内存漏洞直接获得最高权限
// - 不需要提权,一步到位

3.3 两个漏洞的区别

复制代码
// CVE-2026-70147 / 70153

// 共同点:
// - 都是 Microsoft PostScript Printer Driver
// - 都是远程代码执行
// - 都是 CVSS 9.8
// - 都是堆缓冲区溢出(CWE-122)
// - 都不需要认证
// - 都不需要用户交互
// - 都可以通过网络触发

// 不同点:
// - 可能是不同的 PostScript 操作符
// - 或者不同的解析路径
// - 或者不同的内存分配模式
// - 但本质上是同一类问题

// 为什么微软一次修复了两个?
// - 说明 PostScript 解析器
// - 存在系统性的内存安全问题
// - 不是一个孤立的 bug
// - 而是一类架构设计缺陷
// - 两个 CVE 只是冰山一角

四、漏洞深度分析

4.1 CVE-2026-70147 技术细节

复制代码
// CVE-2026-70147 漏洞分析

// 基本信息:
// - 漏洞类型:Heap-based Buffer Overflow(CWE-122)
// - 影响组件:Microsoft PostScript Printer Driver
// - CVSS:9.8(Critical)
// - 攻击向量:Network(网络)
// - 攻击复杂度:Low(低)
// - 所需权限:None(无需认证)
// - 用户交互:None(不需要用户操作)
// - 机密性:High
// - 完整性:High
// - 可用性:High

// CVSS 向量:
// CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

// 什么场景下会触发?
// - 攻击者发送特制打印任务到打印服务器
// - Print Spooler 服务接收任务
// - 交给 PostScript 驱动处理
// - 驱动解析 PostScript 代码时触发堆溢出
// - 攻击者控制溢出数据执行代码

4.2 CVE-2026-70153 技术细节

复制代码
// CVE-2026-70153 漏洞分析

// 基本信息:
// - 漏洞类型:Heap-based Buffer Overflow(CWE-122)
// - 影响组件:Microsoft PostScript Printer Driver
// - CVSS:9.8(Critical)
// - 攻击向量:Network(网络)
// - 攻击复杂度:Low(低)
// - 所需权限:None(无需认证)
// - 用户交互:None(不需要用户操作)

// 与 CVE-2026-70147 的区别:
// - 可能是不同的 PostScript 操作符
// - 或者不同的解析路径
// - 但本质上都是堆缓冲区溢出
// - 都是网络可达 + 无需认证 + SYSTEM 权限

4.3 影响范围

项目 说明
漏洞类型 堆缓冲区溢出
影响组件 Microsoft PostScript Printer Driver
攻击向量 网络(发送打印任务)
认证要求 不需要
用户交互 不需要
CVSS 评分 9.8(Critical)
运行权限 SYSTEM(最高权限)
部署位置 打印服务器、工作站

4.4 哪些系统受影响

复制代码
// 哪些系统在用 PostScript Printer Driver?

// 1. 企业打印服务器
//    - 很多企业有专门的打印服务器
//    - 集中管理所有打印机
//    - 运行 Print Spooler 服务
//    - 攻击面最大

// 2. 终端服务器
//    - RDS 终端服务器也安装打印驱动
//    - 多个用户共享打印服务
//    - 一个漏洞影响所有用户

// 3. 域控制器
//    - 有些域控制器也安装打印服务
//    - 一旦被利用直接控制整个域
//    - 影响最大

// 4. 普通工作站
//    - 每台 Windows 电脑都有打印服务
//    - 但通常不开放网络打印
//    - 本地攻击面为主

4.5 为什么这两个漏洞对 SRC 特别重要

原因 说明
SYSTEM 权限 直接获得最高系统权限,不需要提权
无需认证 匿名就能打,不需要任何凭证
网络可达 远程就能触发,不需要物理接触
内网枢纽 打印服务器连接多个网段,是横向移动跳板
历史验证 PrintNightmare 证明了这类漏洞的巨大危害

五、修复方案分析

微软在 10 月 Patch Tuesday 中修复了这两个 PostScript Printer Driver RCE 漏洞。修复方式是在 PostScript 解析器中完善了边界检查,修复了堆缓冲区溢出问题。

CVE 编号 漏洞类型 修复方式
CVE-2026-70147 堆缓冲区溢出 修复 PostScript 解析中的边界检查
CVE-2026-70153 堆缓冲区溢出 修复 PostScript 解析中的内存管理

5.1 临时缓解措施

复制代码
// 临时缓解措施(不需要打补丁)

// 1. 关闭 Print Spooler 服务
//    - 在不需要打印的服务器上关闭 Spooler
//    - 路径:services.msc > Print Spooler > 禁用
//    - 这样攻击面完全消失
//    - 但会影响打印功能

// 2. 限制网络打印访问
//    - 只允许特定 IP 连接打印端口
//    - 通过防火墙限制 9100/515 等端口
//    - 减少暴露面

// 3. 移除 PostScript 驱动
//    - 如果不需要 PostScript 打印
//    - 可以卸载 PostScript 打印机驱动
//    - 只保留必要的打印驱动

// 4. 启用打印安全策略
//    - 配置打印机访问控制
//    - 限制谁可以提交打印任务
//    - 减少未授权访问风险

5.2 暴露面分级

暴露级别 情况 风险
严重 打印服务器未打补丁 + 开放网络打印 网络可达 SYSTEM RCE,直接沦陷
高 工作站未打补丁 + 本地打印服务开启 本地提权风险
中 已打补丁 + 打印服务开放 风险可控
低 关闭 Print Spooler 服务 不受影响

六、SRC 审计启示录

6.1 打印服务暴露面测绘

在 SRC 内网渗透测试中,打印服务是经常被忽略但极其危险的攻击面------很多企业花巨资建设防火墙和入侵检测,但打印服务器上一个漏洞就把所有防护击穿了。

# 检查项 检测方法
1 打印服务器识别 扫描内网 9100/515/631 端口,识别打印服务
2 打印机驱动审计 检查安装了哪些打印机驱动,是否有 PostScript 驱动
3 补丁级别检查 检查打印服务器的 Windows Update 补丁级别
4 网络访问控制 检查打印服务是否对整个内网开放
5 Spooler 服务状态 检查哪些服务器运行了 Print Spooler 服务

6.2 Windows 服务漏洞审计要点

复制代码
// Windows 服务漏洞审计要点

// 1. 高权限服务识别
//    - 识别哪些服务运行在 SYSTEM 权限下
//    - 这些服务一个漏洞就是最高权限
//    - 打印、终端、域控服务都是重点

// 2. 网络可达性审计
//    - 识别哪些服务监听在网络端口上
//    - 网络可达 = 远程攻击面
//    - 比本地服务危险得多

// 3. 历史漏洞模式
//    - 同一个服务反复出同类漏洞
//    - 说明架构有系统性问题
//    - 是漏洞挖掘的重点方向

// 4. 默认配置审计
//    - 服务默认是否开启
//    - 默认配置是否安全
//    - 用户会不会改变默认配置

// 5. 补丁覆盖率
//    - 企业中服务器的补丁覆盖率
//    - 很多企业只更新关键服务器
//    - 打印服务器往往被忽略

6.3 内网服务安全检查清单

复制代码
// 内网服务安全检查清单

// 1. 打印服务
//    - 打印服务器是否及时打补丁
//    - 打印端口是否对整个内网开放
//    - 是否安装了不必要的打印机驱动

// 2. 终端服务
//    - RDP 服务是否暴露
//    - 是否启用了网络级别认证
//    - 终端服务器补丁是否及时

// 3. 文件服务
//    - SMB 服务版本是否最新
//    - 是否启用了 SMB 签名
//    - 共享权限是否最小化

// 4. 域服务
//    - 域控制器补丁是否及时
//    - AD 服务是否暴露
//    - 是否有不必要的域服务

// 5. 服务治理
//    - 有没有服务资产清单
//    - 定期检查不必要的服务
//    - 关闭不用的服务减少攻击面

七、防护建议

  1. 立即打补丁:安装 10 月 Windows Update,修复两个 PostScript RCE 漏洞
  2. 关闭不必要打印服务:在不需要打印的服务器上关闭 Print Spooler 服务
  3. 限制网络打印访问:通过防火墙限制打印端口的访问范围
  4. 移除不必要驱动:卸载不需要的 PostScript 打印机驱动
  5. 定期安全审计:定期审计内网服务暴露面,关闭不必要的服务
  6. 应急响应准备:制定打印服务安全事件响应流程

八、总结

CVE-2026-70147 和 CVE-2026-70153 这两个 PostScript Printer Driver RCE 漏洞,是 2026 年 10 月 Patch Tuesday 中最典型的"内网枢纽型"漏洞。它们不需要用户做任何事,只要能网络访问打印服务,就能在 SYSTEM 权限下执行代码------这是内网渗透测试中最理想的漏洞类型。这个案例告诉我们几件重要的事:第一,Windows 打印服务是长期高危攻击面------从 PrintNightmare 到这次的 PostScript 漏洞,每隔几年就会出新的问题,因为这个子系统太复杂、权限太高、部署太广;第二,打印服务器是内网的隐形枢纽------它连接多个网段,被大量客户端信任,一旦被利用就是横向移动的完美跳板;第三,企业安全不能只看边界------很多企业把防火墙做得很好,但内网服务的安全审计往往被忽略。在实战中,我越来越重视内网服务暴露面的测绘。很多时候,边界防护做得再好,内网一个未打补丁的打印服务器就能让所有防护形同虚设。做内网安全,要记住:不是只有域控制器才值得关注,那些"不起眼"的基础设施服务,往往才是攻击者真正想进的门。这个漏洞也提醒所有企业:定期做内网服务暴露面审计,关闭不必要的服务,及时打补丁------这些基础工作,比什么高级威胁检测都管用。


相关推荐
十年Java程序媛1 小时前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
2603_965148112 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
土豆.exe2 小时前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存
xixiaoyunya3 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
学逆向的3 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
小坏讲微服务3 小时前
刚发布一个月的JDK 27,为什么我建议你立刻升级?
java·开发语言·spring boot·spring·架构·求职招聘·springboot4
打工仔折腾 AI5 小时前
用 Dashlet 把极空间 NAS 服务入口整理成统一导航首页的实践
java·开发语言·人工智能·后端·python·rpc·ai agent 实战
MATLAB代码顾问5 小时前
Simulink PI 参数扫描与批量仿真完整 MATLAB 代码
开发语言·matlab
Want5955 小时前
Python跳动的爱心②
开发语言·python·数学建模