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
发布内容“按原样”提供,不提供任何保证,也不授予任何权利。