Hacky Message Factory Wrapper
基本信息
pl.asie.foamfix.HackyMessageFactoryWrapper implements MessageFactory ——
修复 Log4j 格式串漏洞(CVE-2021-44228 的利用面之一:
MessageFormat 风格参数注入)的消息工厂包装。
类名即警告
类名 Hacky* 是作者的自我标注:它用反射直接改写 Log4j 内部私有字段。
关键方法
| 方法 | 行 | 说明 |
|---|---|---|
构造器 HackyMessageFactoryWrapper(MessageFactory delegate) |
13 | 包装委托 |
static Logger fixLogger(Logger logger) |
17 | 反射入口 |
newMessage(Object) / newMessage(String) / newMessage(String, Object...) |
38 / 46 / 54 | 覆写接口方法 |
test() |
33 | 自检 |
反射实现
Field f = org.apache.logging.log4j.spi.AbstractLogger.class
.getDeclaredField("messageFactory");
直接取 log4j 内部类 AbstractLogger 的私有字段 messageFactory,
替换为包装后的实例。
⚠️ 脆弱性
- 依赖 log4j 内部私有字段名
messageFactory,log4j 升级即可能NoSuchFieldException; - 未在该方法外层看到对 log4j 版本的存在性探测。
与字节码补丁 Log4JExploitFix 是两条互补路径:
后者针对 JndiLookup 的 JNDI 查找注入,本类针对消息格式化。
相关条目
源码
src/main/java/pl/asie/foamfix/HackyMessageFactoryWrapper.java