lock-me-in
The skill is a legitimate browser-login tool but contains undeclared functionality: an undocumented environment variable (OPENCLAW_PROXY_URL) for proxy injection, an undeclared /eval endpoint allowing arbitrary JS execution in the browser page, and extensive stealth/anti-detection scripts that modify browser fingerprinting signals — none of which are mentioned in SKILL.md.
为什么得出这个结论
2/4 个维度触发发现 2 项声明之外的能力或越权行为。
提取到 1 个高危 IOC 或外联信号。
没有形成明确的恶意路径。
发现 1 项需要关注的依赖或供应链线索。
风险分是怎么被拉高的
50+ lines of browser fingerprint spoofing (webdriver hide, WebGL spoof, hardwareConcurrency spoof, etc.) injected on every page — not declared in SKILL.md
HTTP endpoint /eval executes arbitrary JavaScript in the authenticated browser page; not documented in SKILL.md; accessible to anyone with the tunnel URL
Supports proxy injection with embedded credentials via undocumented env var; proxy username/password parsed and passed to browser launch — not in SKILL.md
No authentication on the tunnel; SKILL.md mentions 'No authentication on the tunnel by default' but the 15-min auto-close is the only protection
最关键的证据
Undeclared stealth/anti-detection browser scripts
50+ lines of stealth evasion code inject JavaScript to hide navigator.webdriver, spoof WebGL vendor/renderer, fake hardwareConcurrency (8), deviceMemory (8), platform (Win32), navigator.plugins, and more. These modify the browser's fingerprint on every page load and are not mentioned in SKILL.md.
scripts/browser-login.mjs:35 Undeclared /eval HTTP endpoint allows arbitrary JS execution in authenticated browser
The HTTP server exposes a /eval endpoint that executes arbitrary JavaScript via page.evaluate() on the authenticated browser page. While the endpoint is within the HTTP server, it is not declared in SKILL.md, and its output is visible in the web UI. Anyone with the tunnel URL can send requests to /eval during the active session.
scripts/browser-login.mjs:248 Undeclared OPENCLAW_PROXY_URL environment variable
The script reads OPENCLAW_PROXY_URL from the environment, parses embedded credentials (username:password@host:port), and passes them as browser proxy authentication. This undocumented mechanism allows proxy injection with credentials, which is not mentioned in SKILL.md's configuration section.
scripts/browser-login.mjs:18 Cloudflared binary spawned via shell subprocess
The cloudflared tunnel binary is spawned as a child process via spawn(). While this is functionally necessary for the skill to work, the shell:WRITE capability is not declared in SKILL.md's allowed-tools section.
scripts/browser-login.mjs:404 cloudflared installation command does not pin version
SKILL.md's installation command for cloudflared fetches the 'latest' release without a version pin: `curl -sL https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64`
SKILL.md:74 声明能力 vs 实际能力
Playwright Chromium launch + page interaction throughout browser-login.mjs Cloudflared spawns external tunnel (line 404-405); proxy injection via OPENCLAW_PROXY_URL (line 283-287); HTTP server binds 0.0.0.0 (line 413) Session storageState read/write (line 302, saveSession function) spawn() used for cloudflared binary (line 404) — shell:WRITE, not declared 可疑产物与外联
131.0.0.0 scripts/browser-login.mjs:262
https://linkedin.com/login SKILL.md:26
https://mail.google.com SKILL.md:28
https://linkedin.com/feed SKILL.md:52
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| playwright-core | unknown (imported from /app/node_modules) | npm | 否 | No package.json found; playwright-core is a transitive dep |
| cloudflared | latest (unpinned) | github releases | 否 | Installation command in SKILL.md fetches latest without version pin |
文件构成
scripts/browser-login.mjs SKILL.md