Skip to content

fix 攻击入侵 #2799

@ZZYhho

Description

@ZZYhho

阿里云告警发现 /tmp 出现可疑 node 子进程,经排查确认为 YApi Mock 沙盒绕过导致 RCE,MongoDB 仅被当作恶意脚本仓库。

!!!仅供参考,我是先升级了yapiPRO,后面发现备份的mongodb文件被阿里云报错了,后面清洗了下

4.3 升级 YApi → YApiPro(解决 RCE)

镜像 说明
yapipro/yapi:latest 官方修复版,Mock 沙盒改用 VM2
# 1. 停旧服务
docker stop yapi && docker rm yapi

# 2. 保留配置文件
cp "$CONFIG_DIR/config.json" "$CONFIG_DIR/config.json.bak.$NOW"

# 3. 启动新版本(host 网络,复用 3000 端口)
docker run -d \
  --name yapi \
  --restart always \
  --net host \
  -v "$CONFIG_DIR/config.json:/yapi/config.json" \
  yapipro/yapi \
  server/app.js

# 4. 验证
curl -s http://127.0.0.1:3000/api/user/status | jq -r '.message'
# 预期输出:success

4.4 升级 MongoDB(解决 CVE-2025-14847

源版本 目标版本 原因
4.4.27 4.4.30 修复 Zlib 堆内存泄漏
# 1. 配置 4.4 仓库
sudo tee /etc/yum.repos.d/mongodb-org-4.4.repo <<'EOF'
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
EOF

# 2. 原地升级(二进制替换,数据文件兼容)
sudo yum install -y mongodb-org-4.4.30 mongodb-org-server-4.4.30 \
                    mongodb-org-shell-4.4.30 mongodb-org-tools-4.4.30

# 3. 确认版本
mongod --version | head -n1
# db version v4.4.30

# 4. 滚动重启
sudo systemctl restart mongod
sudo systemctl is-active mongod

4.5 清洗污染数据

思路:新建临时实例 → 清洗 → 导出 → 覆盖生产库,避免直接在生产库执行 updateMany 造成锁表。

4.5.1 搭建临时 MongoDB(Docker 单节点)

docker run -d --name mongo-clean -p 37017:27017 mongo:4.4.30

# 导入备份数据
mongorestore -h 127.0.0.1:37017 -d yapi "$BACKUP_DIR/yapi"

4.5.2 执行清洗脚本

cat > /tmp/clean.js <<'EOF'
use yapi;

// 1. 干跑确认
var dirty = db.adv_mock.find({
  mock_script: {$regex: /(curl|wget).*http/i}
}, {interface_id: 1, mock_script: 1});

print("Dirty count:", dirty.count());

// 2. 清洗
db.adv_mock.updateMany(
  {mock_script: {$regex: /(curl|wget).*http/i}},
  {$set: {mock_script: "/* Security: malicious script removed */"}}
);

// 3. 验证
print("After clean:", db.adv_mock.find({
  mock_script: {$regex: /(curl|wget).*http/i}
}).count());
EOF

mongo 127.0.0.1:37017 /tmp/clean.js

4.5.3 覆盖生产库

# 1. 再次全量导出(已清洗)
mongodump -h 127.0.0.1:37017 -d yapi -o "$BACKUP_DIR/clean"

# 2. 停业务(30s 内完成)
docker stop yapi

# 3. 删库 & 导入
mongo --eval 'db.getSiblingDB("yapi").dropDatabase()'
mongorestore -h 127.0.0.1:27017 -d yapi "$BACKUP_DIR/clean/yapi"

# 4. 启业务
docker start yapi

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions