6

在用于 JSON 序列化和反序列化的 Python 的 jsonpickle 模块的文档中,它指出

从不受信任的来源加载 JSON 字符串表示潜在的安全漏洞。jsonpickle 不尝试清理输入

但我想知道攻击者如何通过 JSON 消息执行任意代码?

此外,按照文档中的建议清理输入的最佳方法是什么?我的应用程序中的 JSON 数据不可信(它来自发送 JSON 消息的客户端)。

4

1 回答 1

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 并在使用前检查输入。

于 2016-08-07T08:14:02.803 回答