安全决策报告
lock-me-in
该技能为合法浏览器登录工具,通过云隧道让用户远程登录网站并持久化 session,核心功能与文档一致。存在轻微阴影功能(未声明的 /eval 端点)和代理 URL 解析风险,但风险可控。
为什么得出这个结论
1/4 个维度触发 通过
声明与实际能力
声明资源与推断能力基本一致。
阻止
隐藏执行与外联
提取到 1 个高危 IOC 或外联信号。
通过
攻击链与高危发现
没有形成明确的恶意路径。
通过
依赖与供应链卫生
依赖结构存在,但暂未看到明显高危告警。
风险分是怎么被拉高的
未声明的 /eval 端点 +10
代码提供 page.evaluate() 能力但 SKILL.md 未提及
代理 URL 解析逻辑 +5
OPENCLAW_PROXY_URL 解析可能存在边界情况
Web UI 网络暴露 +5
监听 0.0.0.0 并创建公共隧道,需用户自行保护
最关键的证据
低危 文档欺骗
未声明的 /eval 端点
HTTP 服务器提供 /eval 端点允许执行任意 JavaScript,但 SKILL.md 未提及此能力
scripts/browser-login.mjs:262 如非必要则移除,或在文档中明确声明此能力的用途和风险
低危 敏感访问
代理认证信息解析
解析 OPENCLAW_PROXY_URL 环境变量提取用户名密码,如环境变量被污染可能解析错误内容
scripts/browser-login.mjs:194 增加输入验证,确保 URL 格式符合预期
提示 代码执行
公共隧道 URL 生成
cloudflared 创建的公共 URL 无认证保护,文档已声明风险
scripts/browser-login.mjs:280 确保只将隧道 URL 分享给可信用户,15分钟超时设计合理
声明能力 vs 实际能力
文件系统 通过
声明 WRITE
→ 推断 WRITE
SKILL.md 声明 session 存储,代码写入 /data/home/.browser-sessions/ 网络访问 通过
声明 READ
→ 推断 WRITE
启动 cloudflared 隧道(spawn),文档说明用于隧道访问 命令执行 通过
声明 NONE
→ 推断 READ
spawn cloudflared 执行外部程序,文档未明确说明 浏览器 通过
声明 WRITE
→ 推断 WRITE
启动 Chromium 并控制页面,文档声明 可疑产物与外联
高危 IP 地址
131.0.0.0 scripts/browser-login.mjs:262
中危 外部 URL
https://linkedin.com/login SKILL.md:26
中危 外部 URL
https://mail.google.com SKILL.md:28
中危 外部 URL
https://linkedin.com/feed SKILL.md:52
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| playwright-core | not locked | require('/app/node_modules/playwright-core') | 否 | 使用绝对路径引用本地安装版本 |
文件构成
2 个文件 · 565 行
JavaScript 1 个文件 · 468 行Markdown 1 个文件 · 97 行
需关注文件 · 2
scripts/browser-login.mjs 未声明的 /eval 端点 · 代理认证信息解析 · 公共隧道 URL 生成 · 131.0.0.0
SKILL.md https://linkedin.com/login · https://mail.google.com · https://linkedin.com/feed
安全亮点
核心功能与 SKILL.md 文档高度一致
Session 数据本地存储,不外传
15 分钟自动超时关闭设计合理
无硬编码凭证或敏感数据外泄
使用 Playwright 官方 API,依赖可信
安全注释清晰说明 session 数据敏感性