【发布时间】:2018-08-08 20:01:28
【问题描述】:
我正在运营一个小型网站,用户可以在其中上传以 JSON 定义的自定义“对象”。最近我了解到使用带有自动类型反序列化的 JSON 的可能威胁:JSON problem。我想我理解这些问题,但我必须要确定。如果我只反序列化具有给定特定类型(此处为 MyObject)JsonConvert.DeserializeObject<MyObject>(json, settings); 的传入 JSON,并且 MyObject 内没有类型,并且 MyObject 的任何成员的子类型都没有类型 System.Object 或 dynamic,则有没有什么会变坏的,对吧?
settings 的TypeNameHandling 设置为TypeNameHandling.Auto(我们不要质疑它可能与None 一起使用的这个决定,但我想了解它设置为Auto 的问题。)
编辑: 更多信息:我已经从前面提到的网站测试了 JSON:
{
"obj": {
"$type": "System.IO.FileInfo, System.IO.FileSystem",
"fileName": "rce-test.txt",
"IsReadOnly": true
}
}
如果MyObject 有System.Object 或dynamic 类型字段obj 我可以重现威胁。但我想知道的是:即使 MyObject 是一个非常复杂的对象,有很多(派生的)子对象,但没有一个是或有 System.Object 或动态字段(也不像List<Object>)?例如。我可以想象 Json.NET 会因为 $type 信息而创建对象,即使在 MyObject 中找不到相应的字段。
【问题讨论】:
-
请提供minimal reproducible example(即向我们展示您的代码)。
-
在博文中,它有一个恶意负载示例。您是否使用该恶意负载进行了测试?
-
谢谢,我已经添加了更多信息
-
But what I want to know: I'm on the safe side with bad prepared user-json even if MyObject is a very complex Object with lots of (derived) sub objects but NONE of them is or has a System.Object or a dynamic field (also not something like List<Object>)?你尝试的时候发生了什么? -
如果没有对象或动态字段,我无法复制它。但我不确定我是否想到了所有可能的攻击媒介。