暴露在公网的 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:轮换凭证
假设所有暴露的凭证都已泄露:
- Anthropic API key:dashboard.anthropic.com 重新生成
- OpenAI API key:platform.openai.com 重新生成
- Gmail OAuth:revoke 然后重新授权
- Telegram bot:找 @BotFather 重新生成 token
换完再更新 Moltbot 配置。
官方的回应
这个问题被提交到 GitHub issue #2487。
官方回应:
"We're adding:
- Default host changed to 127.0.0.1 in next release
- Admin panel requires authentication
- 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 历史安全事件
- 网络安全默认配置最佳实践