CodeQL 文档

反序列化的委托

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

点击查看 CodeQL 存储库中的查询

当攻击者可以控制序列化数据时,反序列化委托对象可能会导致远程代码执行。

建议

尽可能避免反序列化委托对象,或者确保攻击者无法控制序列化数据。

示例

在本例中,使用 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();
    }
}

参考

  • ©GitHub 公司
  • 条款
  • 隐私