杰克逊的 JSON 注入修复
Posted
技术标签:
【中文标题】杰克逊的 JSON 注入修复【英文标题】:JSON Injection fix for jackson 【发布时间】:2018-04-03 08:15:20 【问题描述】:我的静态扫描给出了一个漏洞,提示我正在将未经验证的输入写入 JSON。它建议对 JSON 的所有序列化都使用安全的序列化函数执行,该函数在单引号或双引号内分隔不受信任的数据并转义任何特殊字符。
知道如何最好地做到这一点吗?我已经检查了常用的 ESAPI 类和 StringUtils 方法,但对于 Json 来说没什么。 http 响应来自公司内部 BTW。我什至找不到关于这个话题的讨论或解决方案。
HttpEntity entity = response.getEntity();
objectMapper.readValue(entity.getContent(), MyObj.class);
【问题讨论】:
杰克逊 json 注入的任何解决方案? 【参考方案1】:这可能是担心粘贴到 JSON 中的不受信任的数据会跳出其值上下文并继续添加或隐藏对象的其他属性。
https://vulncat.fortify.com/en/weakness?kingdom=Input+Validation+and+Representation&q=json%20injection
最近使用 Jackson 反序列化不受信任的 JSON 对象的漏洞可能会通过将意外的类名注入 JSON(我自己的未经测试的想法)来滥用潜在的 Jackson 消费者(进一步降低数据流),
https://github.com/FasterXML/jackson-databind/issues/2389
如果将 JSON 输出作为 javascript 对象文字进一步粘贴到 html/javascript 中,当然,为对象和恶意 javascript 注入结束标记会产生奇迹。
如果将 JSON 输出作为字符串文字粘贴到 HTML 中,则可以通过插入结束脚本标记 </script>
来转义上下文并欺骗简单的编码器。浏览器在看到开始标签之后的任何地方的结束标签时都需要退出脚本标签上下文,即使在字符串文字内也是如此。
【讨论】:
以上是关于杰克逊的 JSON 注入修复的主要内容,如果未能解决你的问题,请参考以下文章