【问题标题】:How can I execute arbitrary code via JSON and how to sanitize the input如何通过 JSON 执行任意代码以及如何清理输入
【发布时间】:2016-12-13 05:15:48
【问题描述】:

在用于 JSON 序列化和反序列化的 Python jsonpickle 模块的 documentation 中声明

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

但我想知道攻击者怎么可能通过 JSON 消息执行任意代码?

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

【问题讨论】:

标签: python json security jsonpickle


【解决方案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 并在使用前检查输入。

【讨论】:

  • “jsonpickle 允许创建可能会造成有害事物的任意 Python 对象”——这怎么可能?假设我使用jsonpickle.decode 反序列化传入的 JSON 数据。攻击者可以在这些 JSON 数据中放入什么来执行任意代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 2014-12-10
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多