Replies: 1 comment
|
补充一个疑似真实案例:#2756 报告了 API key 在未使用的情况下于夜间被消耗。这与本讨论描述的无认证 Web GUI 场景一致:在共享/多用户主机上,任何本机账号可无需登录访问 dsh web,agent 以运行账号的权限执行命令并可读取其凭据。若该案例与本问题同源,说明此问题已造成实际损失,建议优先修复,并考虑发布安全公告。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Summary
dsh web(the browser UI / API server of DeepSeek Harness) listens on a loopback TCP port (127.0.0.1:3080with default settings) and serves its full API without any authentication. On shared, multi-user Linux hosts, loopback is host-wide rather than per-user: every local account can reach the port (e.g., via their ownssh -L 3080:127.0.0.1:3080tunnel, or by running a client directly on the host). A local user can then:dsh web(shell + file access).On a host shared by many users (common in labs and teams), the default loopback binding provides no isolation at all. We consider this a privilege-escalation and cross-user data-exposure issue for shared-host deployments.
Environment
@deepseek-ai/dsh0.1.0-rc.6/0.1.0-rc.7(dsh --profile web)--host/--port/--trusted-hostoverrides)What we observed
dsh webbinds to127.0.0.1:3080(loopback only), started from an ordinary, unprivileged account./apiis the "browser-trust" fence, whose own source comment says it "is not an auth layer" and only defends against DNS rebinding and cross-site requests. Non-browser clients pass the same fence via loopback, so the API is trivially scriptable withcurlfrom any local account.dsh web, so a caller effectively gains that account's command execution.Impact
dsh webowner (a full shell as that user).Suggested fixes (any of these would help substantially)
--token/--passwordoption checked on every request, or a one-time pairing token printed at startup.$XDG_RUNTIME_DIR, which is0700per user) instead of a TCP loopback port; expose TCP only when explicitly requested via--host.Note
This report intentionally contains no personal information, account names, or host identifiers.
All reactions