深入解析MS10-007漏洞:ShellExecute API的安全隐患与开发者防护指南

本文详细分析了MS10-007漏洞中ShellExecute API处理畸形URL时的安全风险,提供了针对开发者的URL验证建议和防御策略,强调允许列表验证和深度防御的重要性。

MS10-007:开发者的额外信息与建议

今天,我们发布MS10-007以解决一个通常适用于ShellExecute API的URL验证问题。

恶意用户如何利用此漏洞?

此问题涉及ShellExecute如何处理看似合法但格式错误以致导致任意代码执行的字符串。多种技术使用ShellExecute来启动浏览器导航。如果传递给ShellExecute的参数“看起来像URL”,则假定该操作是安全的。似乎有理由预期,如果一个字符串是有效的URL,它在由ShellExecute处理时不可能导致任意代码执行。

但虽然可以合理假设 ShellExecute(URL) 不会执行系统命令,但应理解ShellExecute API的核心目的是执行文件。此漏洞涉及使用看起来有效的URL,ShellExecute会将其作为系统命令运行。要遭受攻击,用户可能会点击浏览器上下文之外的链接,例如地址簿联系人。此时,远程可执行文件可能会在无提示的情况下运行。

对开发者的建议

我们建议希望使用ShellExecute进行基于URL的导航的应用程序开发者采取保守的验证方法。首先,开发者应遵循KB943552中的具体指导,因为它与此场景相关。此外,与其简单地验证URL格式为[scheme]://[FQDN]/[path]?[querystring],建议还验证URL方案是否属于特定允许列表中的URL方案之一,例如“http”或“https”。这与《Microsoft安全Web应用程序设计指南》第4章中提供的指导一致。

事实证明,许多常用代码路径实际上确实执行此级别的URL方案验证,因此即使存在ShellExecute错误,也不会提供可行的攻击向量。深度防御胜利!

致谢

感谢Chengyun Chu对此问题的见解和分析。

  • David Ross, MSRC Engineering

发布内容“按原样”提供,不提供任何保证,也不授予任何权利。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计