Black Hat Asia 2026 上,演讲者浅蓝公开了一种名为 Ghost Bits 的新型攻击手法,其利用思路确实相当“逆天”。核心原理并不复杂:Java 的不少基础组件在处理 byte 时,会将其通过某种算法或直接由 char 强转而来。这样一来,攻击者就可以用一个非常大的 char(比如某些特殊 Unicode 字符)来代替正常的 byte 值,从而在数据流中制造出“幽灵位”,让 WAF 的检测逻辑与后端服务的实际解析结果产生不一致。
完整的演讲材料已公开在 Black Hat 官网,值得深入研读:
https://i.blackhat.com/Asia-26/Presentations/Asia-26-Bai-Cast-Attack-Ghost-Bits-4.23.pdf
原文中列举了大量可以利用的 Java 基础组件场景,例如 Fastjson、Socket 通信、文件上传等环节都可能因这种字符/字节转换的差异而被绕过。从 渗透测试 的角度看,Ghost Bits 并不需要挖掘新的反序列化链或 0day,仅仅是利用已有组件的编码特性,就能构造出完全“合法”的流量。
如果你正在做 Java 应用的安全审计或 WAF 规则设计,建议重点关注以下几点:
- 审查输入中的高码点字符:WAF 在归一化时不能简单信任
char -> byte 的隐式转换,需要还原真实的字节序列。
- 关注框架的底层编码逻辑:特别是 JSON 解析、模板引擎、数据库驱动等地方,是否依赖了不安全的
byte 截断。
- 测试案例拓展:Ghost Bits 的 payload 可以嵌入 SQL、JNDI、SpEL 等注入点,实际攻击面远比已有的演示丰富。
文中给出的效果示意(原帖包含 IDE 与命令行截图)展示了通过构造包含超大 char 的 payload,最终在 Fastjson 等环境下解析出正常的 java.awt.Rectangle 对象,证明绕过已经非常简单。虽然此处不便直接展示带水印的原始截图,但强烈建议读者下载上方 PDF,对照里面的代码示例和实际控制台输出,亲手复现一下。
Ghost Bits 的发现再次提醒我们:即使是成熟的 技术文档 和官方 API,在编码细节上也可能埋藏着能够扭曲整个安全模型的“幽灵”。保持对底层实现的敏感,才是高阶攻防的决胜点。
|