反序列化的委托¶
ID: cs/deserialized-delegate
Kind: problem
Security severity: 9.8
Severity: warning
Precision: high
Tags:
- security
- external/cwe/cwe-502
Query suites:
- csharp-code-scanning.qls
- csharp-security-extended.qls
- csharp-security-and-quality.qls
当攻击者可以控制序列化数据时,反序列化委托对象可能会导致远程代码执行。
建议¶
尽可能避免反序列化委托对象,或者确保攻击者无法控制序列化数据。
示例¶
在本例中,使用 BinaryFormatter
将文件流反序列化为 Func<int>
对象。文件流是公共方法的参数,因此根据对 InvokeSerialized
的调用,这可能会也可能不会造成安全问题。
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
class Bad
{
public static int InvokeSerialized(FileStream fs)
{
var formatter = new BinaryFormatter();
// BAD
var f = (Func<int>)formatter.Deserialize(fs);
return f();
}
}
参考¶
Microsoft:BinaryFormatter 类。
常见弱点枚举:CWE-502。