暴露在公网的 Moltbot 们:一场正在发生的数据泄露

暴露在公网的 Moltbot 们:一场正在发生的数据泄露

有人用 Shodan 搜了一下"moltbot"。

找到了 347 个暴露在公网的实例。

他们能看到什么

Moltbot 默认开一个管理端口,18789。本来是给本地调试用的。

# 默认配置
{
  "gateway": {
    "port": 18789,
    "host": "0.0.0.0"  # 监听所有网络接口
  }
}

0.0.0.0 意味着这个端口对外开放。如果你的服务器没有防火墙规则,任何人都能访问。

访问 http://your-ip:18789/admin,能看到:

{
  "version": "2026.1.21",
  "uptime": "3d 14h 22m",
  "config": {
    "providers": {
      "anthropic": {
        "apiKey": "sk-ant-api03-xxxx..."
      },
      "openai": {
        "apiKey": "sk-xxxx..."
      }
    },
    "integrations": {
      "telegram": {
        "botToken": "123456:ABC-xxxx"
      },
      "gmail": {
        "oauth": {
          "accessToken": "ya29.xxxx",
          "refreshToken": "1//xxxx"
        }
      }
    }
  },
  "memory": {
    "entries": 1247,
    "lastUpdated": "2026-01-28T10:30:00Z"
  }
}

API key、OAuth token、Bot token,全在里面。

更糟糕的是,还能看到记忆文件的内容。

347 个实例

安全研究员在 1 月 27 日做了一次扫描:

| 类别 | 数量 | |------|------| | 暴露的实例 | 347 | | 泄露 API key | 289 | | 泄露 OAuth token | 156 | | 可访问记忆文件 | 203 |

其中 42 个实例的 Gmail OAuth token 还是有效的。意味着攻击者可以读取这些人的邮件。

23 个实例有 Telegram bot token。攻击者可以用这些 bot 发消息、读消息。

地理分布:

美国:127
德国:45
中国:38
日本:31
英国:28
其他:78

大部分跑在 VPS 上,DigitalOcean、AWS、Hetzner 都有。

为什么会这样

原因 1:默认配置不安全

Moltbot 的安装文档是这样写的:

npm install -g @moltbot/cli
moltbot gateway start

两行命令,开箱即用。

但没提防火墙。没提 host 配置。新手照着做,就暴露了。

原因 2:VPS 用户不懂网络

很多人租 VPS 是为了"24 小时跑 Moltbot",不是专业运维。

他们的思路:

1. 租个 VPS
2. 装 Moltbot
3. 跑起来了,搞定

不知道什么是防火墙规则,不知道端口暴露意味着什么。

原因 3:没有认证机制

管理端口没有密码保护。能访问就能看到一切。

# 这就是全部"认证"
curl http://your-ip:18789/admin
# 直接返回配置信息,不问密码

攻击者能干什么

场景 1:盗用 API 额度

你的 Claude API key 暴露了。攻击者拿去自己用,账单算你的。

有人发现月底账单多了 $800,才意识到 key 泄露了。

场景 2:读取邮件

Gmail OAuth token 暴露,攻击者可以:

import requests

headers = {'Authorization': 'Bearer ya29.xxxx'}  # 泄露的 token
response = requests.get(
    'https://gmail.googleapis.com/gmail/v1/users/me/messages',
    headers=headers
)

你的邮件、你的联系人、你的附件,全能看。

场景 3:冒充你发消息

Telegram bot token 暴露,攻击者可以用你的 bot 发消息:

curl "https://api.telegram.org/bot123456:ABC-xxxx/sendMessage" \
  -d "chat_id=USER_CHAT_ID" \
  -d "text=转账到这个地址..."

如果你的 bot 是给家人朋友用的,他们会信。

场景 4:挖记忆做社工

记忆文件里可能有:

## 关于我
- 住在上海,在 xxx 公司工作
- 妻子叫 xxx,女儿今年 5 岁
- 银行用的招商银行,理财顾问是 xxx

## 近期待办
- 3 月去日本旅游,已订好酒店
- 准备买学区房,预算 500 万

完美的钓鱼素材。

检查你的实例

步骤 1:看端口监听

# 在你的 VPS 上
netstat -tlnp | grep 18789

# 如果看到 0.0.0.0:18789,说明对外暴露了
# 如果看到 127.0.0.1:18789,只有本地能访问

步骤 2:外部测试

# 从你自己电脑
curl http://你的VPS-IP:18789/admin

# 如果有返回,说明暴露了
# 如果连接失败,说明防火墙生效了

步骤 3:检查 Shodan

去 shodan.io 搜你的 IP,看看有没有被扫到。

怎么修

方法 1:改配置

{
  "gateway": {
    "port": 18789,
    "host": "127.0.0.1"  # 只监听本地
  }
}

重启 Moltbot 生效。

方法 2:加防火墙

# Ubuntu/Debian
sudo ufw deny 18789
sudo ufw reload

# CentOS
sudo firewall-cmd --remove-port=18789/tcp --permanent
sudo firewall-cmd --reload

方法 3:加认证

Moltbot 目前没有内置认证。用 nginx 代理一下:

server {
    listen 18789;
    
    auth_basic "Moltbot Admin";
    auth_basic_user_file /etc/nginx/.htpasswd;
    
    location / {
        proxy_pass http://127.0.0.1:18790;
    }
}

Moltbot 监听 18790,nginx 监听 18789 加上密码验证。

方法 4:轮换凭证

假设所有暴露的凭证都已泄露:

  1. Anthropic API key:dashboard.anthropic.com 重新生成
  2. OpenAI API key:platform.openai.com 重新生成
  3. Gmail OAuth:revoke 然后重新授权
  4. Telegram bot:找 @BotFather 重新生成 token

换完再更新 Moltbot 配置。

官方的回应

这个问题被提交到 GitHub issue #2487。

官方回应:

"We're adding:

  1. Default host changed to 127.0.0.1 in next release
  2. Admin panel requires authentication
  3. Security warning during first-run setup

ETA: v2026.2.5"

下个版本会修。但在那之前,自己注意。

更深的问题

这不是 Moltbot 独有的问题。

Redis 默认无密码监听所有接口,多少数据库被勒索过?

MongoDB 同样,早年无认证默认配置,泄露了多少用户数据?

开发者工具的默认配置,总是优先"方便开发"而不是"默认安全"。

方便开发:0.0.0.0,无认证,所有功能打开
默认安全:127.0.0.1,强制认证,最小权限

两种思路。大多数开源项目选前者,把安全责任推给用户。

"文档里写了要配置防火墙"——但谁看文档?

"用户应该了解网络安全"——但用户只想跑起来。

这 347 个暴露的实例,就是这个思路的代价。


Moltbot 的 Telegram 群里有人问:"我的 bot 突然开始发垃圾消息,怎么回事?"

大概率 token 泄露了。


参考资料

  • Shodan 搜索结果快照
  • Moltbot GitHub issue #2487
  • Redis/MongoDB 历史安全事件
  • 网络安全默认配置最佳实践
← 返回博客列表