Real Player 'external::Import()' 任意文件下载、目录遍历漏洞导致远程代码执行
视频演示:https://youtu.be/CONlijEgDLc
Real Player 使用 Microsoft Internet Explorer 的功能,并通过一种应用程序特定的特殊方式暴露属性和方法:
'external' 对象暴露了多个自定义方法和属性。
'Import()' 方法在处理 'Copy to My Music' 参数时采用了不安全的方式,从而允许下载任意文件类型;这可能是不安全的,因为只有音频/图像/视频类型应被允许下载到用户磁盘。此外,它没有正确清理文件路径,从而允许在任意位置植入任意文件。即使它会因无法渲染下载的文件而显示错误,该文件也会一直保留到用户关闭对话框。此外,在打开新窗口时,Real Player 会查找一个旧的、已过时的 IE 库(shdoclc.dll),该库同样可能被滥用来自动执行代码,而无需等待重启(当文件被植入 'startup' 文件夹时尤其如此)。
攻击者需要在 SMB 或 WebDav 共享中托管要复制/下载的文件。目录 'appdata' 必须放置在共享的根目录中。
此外,'external.PreloadURL()' 中的拒绝服务(DoS)条件有助于使 Real Player 不删除这些文件。
该 PoC 会将 'shdoclc.dll'(包含在 'DllMain()' 中运行 'cmd.exe' 的简单代码,用于演示目的)放入用户的 'windowsapps' 文件夹,并将 'write.exe' 放入 'startup' 文件夹,因此它通用适用于(至少从 XP 到 11 的任何 Windows 版本)。
已在 RP ver. 16.00.282, 16.0.3.51, Cloud 17.0.9.17, v.20.0.7.309 上测试。