请帮忙点点下面链接
https://mp.weixin.qq.com/s/4EqINgdR9KEVHyB0Uw1uKQ
一、技术根源
在 Black Hat Asia 2026 上,安全研究员 Zhihui Chen(1ue)与安全研究员 Xinyu Bai(浅蓝)发表了题为《Cast Attack: A New Threat Posed by Ghost Bits in Java》的研究成果。该研究成果揭示了该缺陷并非某个具体组件的实现错误,而是源于 Java 语言中 char 与 byte 类型之间窄化转换的静默截断行为。
Java 中 char 为 16 位无符号整数(范围 0x0000 ~ 0xFFFF),而 byte 仅为 8 位有符号整数(-128 ~ 127)。当代码显式执行 (byte) ch、ch & 0xFF、ByteArrayOutputStream.write(ch) 或 DataOutputStream.writeBytes(String) 时,JVM 会无警告地丢弃 char 的高 8 位,仅保留低 8 位。
以汉字「阮」(U+962E)为例:
- 二进制:
1001 0110 0010 1110 - 高 8 位
0x96被丢弃 - 低 8 位
0x2E被保留,对应 ASCII 字符.(点号)
攻击者利用这一机制,可以精心挑选一个高位任意、低 8 位等于目标危险 ASCII 的 Unicode 字符。常见映射如下:
| 真实 ASCII | Ghost Bits 字符 | Unicode | 低 8 位 |
|---|---|---|---|
. |
阮 | U+962E | 0x2E |
/ |
丯 | U+4E2F | 0x2F |
j |
陪 | U+966A | 0x6A |
@ |
乀 | U+4E40 | 0x40 |
\r |
瘍 | U+760D | 0x0D |
\n |
瘊 | U+760A | 0x0A |
% |
严 | U+4E25 | 0x25 |
0 |
丰 | U+4E30 | 0x30 |
u |
灵 | U+7075 | 0x75 |
2 |
甲 | U+7532 | 0x32 |
在攻击链路中,WAF/IDS 基于字符串模式匹配,看到的是"无害"的 Unicode 字符序列(如 阮、陪、乀),判定为安全并放行;而后端 Java 应用在执行 char→byte 窄化转换时,会恢复出原始攻击载荷(如 .、j、@),从而触发路径穿越、文件上传、反序列化 RCE 等漏洞。
以具体的 Ghost Bits 变形为例:
- 字符序列
阮严灵丰丰甲来(分别为 U+962E、U+4E25、U+7075、U+4E30、U+4E30、U+7532、U+6765)经过低 8 位折叠后,依次得到字节0x2E、0x25、0x75、0x30、0x30、0x32、0x65,即字符串.%u002e。在支持%u解码的容器(如 Jetty)中,%u002e会被进一步解析为.,与前一个.组合成..,从而实现路径穿越。 - 字符序列
瘍瘊(U+760D、U+760A)的低 8 位分别为0x0D(CR)和0x0A(LF),直接折叠为\r\n,可注入 SMTP 协议或 HTTP 头部,触发 CRLF 注入攻击。
这就是 Ghost Bits 既能用于路径穿越,也能用于 CRLF 注入的根本原因:攻击者只需选择低 8 位对目标字节的高位字符序列,即可将任意 ASCII 控制字符"隐身"在 Unicode 字符串中,待后端截断后还原生效。
二、典型不安全代码模式:
以下 Java 代码写法均存在将 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">char</font> 静默截断为 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">byte</font> 的风险,攻击者可利用 Ghost Bits 绕过安全检测:
plain
(byte) ch
ch & 0xff
ch & 255
0xff & ch
baos.write(ch)
DataOutputStream.writeBytes(String s)
OutputStream.write(int)
StringBufferInputStream.read
String.getBytes(int, int, byte[], int)
RandomAccessFile.writeBytes
URLDecoder.decode
上述 内容 均将字符(16 位)当作字节(8 位)处理 ,或仅保留低 8 位而丢弃高 8 位。开发者在使用时往往默认输入仅为 ASCII 字符,忽略了高位 Unicode 字符可能被攻击者利用。
三、 自查工具的使用
该工具已经集成了上述不安全代码模式检测,具体检测结果还需专业技术人员辅助分析进行验证。
功能特性
🔍 GitHub 代码搜索
- 通过 GitHub Code Search API 远程搜索可能存在 Ghost Bits 漏洞的 Java 代码,辅助标记可能存在该漏洞的开源项目,提前做好防范措施。

- 支持 11 种漏洞代码模式筛选

- 支持关键词搜索(如 Jackson、Tomcat、Spring、fastjson 等)
- 搜索结果展示文件名、仓库、路径等信息

🔬 SAST 路径扫描
- 指定本地目录路径,递归扫描所有 Java 源码文件
- 静态应用安全测试(SAST)+ 污点源追踪
- 可选 AI 分析,利用大语言模型评估漏洞可利用性

🤖 AI 智能分析
- 集成大语言模型(LLM)进行漏洞可利用性评估
- 分析代码上下文,判断漏洞是否可被实际利用
- 提供修复建议和风险评级
使用说明
- 首次使用:
- 双击 "启动.bat" 或 "GhostBitsScanner.exe" 启动程序

- 浏览器访问 [http://127.0.0.1:5000](http://127.0.0.1:5000),可以看到如下页面后,点击配置按钮

- 在 "配置" 页面设置 LLM API 和 GitHub Token

获取 GitHub Classic Token 通过 Settings -> Developer settings -> Personal access tokens -> Tokens (classic) 这个路径进行创建。

四、临时缓解方案
- [优先] 应用层输入校验: 排查 API 网关或全局 Filter 中的"输入验证"逻辑(针对低 8 位的黑名单检查),作为虚拟补丁。
- [优先] 业务代码排查与修复: 使用静态代码分析工具(SAST)或通过
grep扫描工程中的writeBytes、(byte)等关键字,根据实际业务场景进行替换为 UTF-8 安全编码方法。 - [常规] 升级依赖组件: 跟踪各大中间件(如 Spring, Tomcat, Jetty)的安全公告,及时升级版本。
- [常规] WAF 特征沉淀: 将捕获到的已知恶意 Ghost 字符沉淀到 WAF 规则库中。
参考
参考资料:
- Black Hat Asia 2026 原议题
Cast Attack: A New Threat Posed by Ghost Bits in Java作者:Xinyu Bai(@b1u3r / @iSafeBlue)、Zhihui Chen(@1ue1166323)、贡献者 Zongzheng Zheng(@chun_springX)