在用于JSON序列化和反序列化的Python的jsonpickle模块的documentation中,它声明了
从不受信任的来源加载JSON字符串代表了潜力 安全漏洞。 jsonpickle没有尝试消毒 输入
但我想知道攻击者如何通过JSON消息执行任意代码?
此外,如文档中所建议的那样,清理输入的最佳方法是什么?我的应用程序中的JSON数据不值得信任(它来自发送JSON消息的客户端)。
答案 0 :(得分:1)
jsonpickle
不是JSON。 jsonpickle
允许创建可能做有害事情的任意Python对象。清理意味着JSON对象只包含可由jsonpickle
解释的数据。通常错误的数据会导致异常,但可能会用于触发不需要的行为。
__reduce__
漏洞利用(例如,参见Into The Jar | Exploitation of jsonpickle)
jsonpickle.decode('{"py/object": "list", "py/reduce":[{"py/type": "subprocess.Popen"}, ["ls"], null, null, null]}')
只是执行任何命令的一种直接方式。更微妙的方式取决于您的实际代码。
所以简短的回答是,不要在不受信任的环境中使用jsonpickle
。使用普通的JSON并在使用之前检查输入。