XSLT(Extensible Stylesheet Language Transformations) 是一种可以将 XML 文档转换为其他格式(如 HTML)的标记语言,而 Xalan-J 是 Apache 开源项目下的一个 XSLT 处理器的 Java 实现
漏洞成因:class 字节码规范中限制了常量池计数器的大小为 u2 类型(两个无符号字节大小),所以 Xalan-J 在写入大于 0xffff 数量的常量时会进行截断处理,限制计数器的值的大小。但 Xalan-J 仍然会将所有常量写入 class 字节码中,这就导致后续的类访问标识、类索引等表结构可以被覆盖
poc: https://gist.github.com/thanatoskira/07dd6124f7d8197b48bc9e2ce900937f