Commit Graph
48 Commits
Author SHA1 Message Date
naibaandcloudcode e8dabf5bc6 feat(auth): add PAT auth, scoped REST/MCP access, CSRF, and tenant isolation
Introduce Personal Access Tokens (nzp_*) as a stateless auth path alongside
JWT, gated per-endpoint by a scope middleware (nezha:{resource}:{verb}) with
fail-closed empty-scope defaults and a server-id whitelist. Self-management
endpoints (profile, api-tokens, oauth2 bind, refresh-token) explicitly reject
PATs to block privilege-escalation chains. A revoke registry tears down active
long-lived connections (terminal, fm, ws, transfer, mcp) the moment a PAT is
deleted, with a tombstone closing the revoke->register race.

Add an MCP endpoint that proxies tool calls (exec, fs read/write/delete,
transfer) to agents over gRPC, guarded by origin/DNS-rebinding checks, a
per-token rate limiter, audit logging, and a kill switch. Serialize all
sends through the IOStream wrapper to honour grpc-go's concurrency contract.

Add CSRF double-submit protection on unsafe cookie-authenticated methods,
exempting authenticated PAT requests by context identity (not a forgeable
Authorization header). Apply visibility/whitelist filtering consistently
across list, get-by-id, and mutate paths to enforce tenant isolation.

Migrate legacy mcp:* scopes: rewrite read/exec to nezha:* equivalents and
drop dangerous write/delete/wildcard grants.

Co-authored-by: cloudcode <cloudcode@users.noreply.github.com>
2026-05-30 15:56:44 +00:00
naiba 6b88cdb012 feat: server transfer rotation 2026-05-25 10:17:34 +00:00
naibaandnaiba/CloudCode 0f7af0bcb2 fix(rpc): bind io streams to target agents
Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
2026-05-21 02:01:54 +00:00
naibaandnaiba/CloudCode 36297699f5 fix(rpc): bind io_stream sessions to creator to prevent terminal/fm hijack
createTerminal and createFM correctly check server ownership before
issuing a stream UUID, but terminalStream and fmStream only verified
that the UUID existed. Any authenticated user holding a valid stream
UUID could attach to it, gaining the original creator's live shell or
file-manager session — and the UUID is exposed via URL path (referer
leaks, access logs, browser history, frontend error reporters).

Bind the creator user ID into ioStreamContext at CreateStream time,
expose StreamOwnership and IsStreamAuthorizedForUser, and check
ownership in terminalStream/fmStream before the WebSocket upgrade so a
rejected attempt does not tear down the legitimate stream via defer.

NAT streams are also routed through CreateStream(_, 0); they are not
reachable from /ws/terminal or /ws/file so a sentinel user ID is fine.

Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
2026-05-18 15:16:40 +00:00
UUBulb 010ae7ef51 fix: member-created services shouldn't be applied to admin resources (#1113) 2025-08-28 22:37:44 +08:00
TomyJan 42c128995b feat: separate real ip header of frontend/agent (#1057)
* test(deps): use self admin-frontend

* feat: separate real ip header of frontend/agent

* test(ci): test

* Revert "test(ci): test"

This reverts commit 1634c7e7d7bca2873c13955abb582ea88645844f.

* test(ci): test

* test(ci): test

* test(ci): test

* Revert "test(ci): test"

This reverts commit 8fce20a07e5a9503f665937337050d4373ca7e78.

* Revert "test(ci): test"

This reverts commit 3267cccbfb81776a711e8cb34e676536f0852d1c.

* Revert "test(ci): test"

This reverts commit 566660c0c6a9875864aa46537bcc6788769337eb.

* Revert "test(deps): use self admin-frontend"

This reverts commit 16a838b374ff040800b2c1c5f8e5ede577645669.
2025-04-13 18:41:28 +08:00
UUBulb 043d6c4097 feat: update to go1.24 & support listening https (#1002)
* feat: support listening https

* refactor

* modernize

* support snake case in config

* more precise control of config fields

* update goreleaser config

* remove kubeyaml

* fix: expose agent_secret

* chore
2025-02-28 22:02:54 +08:00
UUBulb 54ca4ca0b6 fix: ConfigCache not copied affer server updates (#1008)
* fix: ConfigCache not copied affer server updates

* fix: server list not updated when dispatching tasks

* improve

* reuse logic
2025-02-26 20:48:54 +08:00
UUBulb ea068d4db1 refactor: simplify server & service manipulation (#993)
* refactor: simplify server & service manipulation

* update

* fix

* update for nat, ddns & notification

* chore

* update cron

* update dependencies

* use of function iterators

* update default dns servers
2025-02-21 23:08:12 +08:00
UUBulb dc0132c9aa feat: user roles (#852)
* [WIP] feat: user roles

* update

* update

* admin handler

* update

* feat: user-specific connection secret

* simplify some logics

* cleanup

* update waf

* update user api error handling

* update waf api

* fix codeql

* update waf table

* fix several problems

* add pagination for waf api

* update permission checks

* switch to runtime check

* 1

* cover?

* some changes
2024-12-22 00:05:41 +08:00
naiba c9056eaa44 refactor: fallback agent ip to connecting ip 2024-12-19 23:21:31 +08:00
naiba 29d0d2eb3c feat: 优化 GeoIP 更新逻辑 2024-12-07 11:06:42 +08:00
naiba 4861b3e013 feat: refactor grpc keepalive 2024-12-05 00:11:34 +08:00
naiba b59094fd19 Revert "feat: grpc keepalive"
This reverts commit b484fe53f0.
2024-12-04 22:46:02 +08:00
naiba 30df69d72d feat: grpc keepalive 2024-12-04 21:08:28 +08:00
naiba cb2ed77747 fix: dashboard waf page 2024-11-30 21:33:18 +08:00
naiba a7e4fe0909 rename repo 2024-11-28 19:38:54 +08:00
UUBulb e465134c11 update profile api (#16)
* update profile api

* rename

* fix realip assertion

* add waf api
2024-11-23 16:22:22 +08:00
naiba 6db1a4b19d improve: use stream reduce auth check time 2024-11-23 12:43:02 +08:00
naiba 336d8d4fc3 fix: waf condition 2024-11-23 10:21:01 +08:00
naiba 293391a695 refactor code 2024-11-23 00:02:57 +08:00
naiba 909cd92e9a feat: waf 🤡 2024-11-22 23:57:25 +08:00
naiba f5776c7464 feat: grpc / web get real ip 2024-11-22 00:19:36 +08:00
naiba 868c242eb3 refactor: rename monitor -> service 2024-10-25 00:13:45 +08:00
naiba fa14043cbe refactor nat 2024-10-23 20:37:29 +08:00
UUBulb 1eaf70782a add path check for multiplexer (#451) 2024-10-23 12:55:10 +08:00
naiba c5bacf3e84 fix agent connect 2024-10-22 23:44:50 +08:00
naiba 542f06551e refactor: remove pages, combine grpc http port 2024-10-20 11:47:45 +08:00
naiba 2a35a6f0e5 feat: 去除 webTerminal 的 websocket 依赖 2024-07-14 12:47:36 +08:00
Ko no dioandLvGJ 7ab36d4e11 feat: add network monitor hitory (#316) · 三网ping
* feat: add network monitor hitory

* fix: revert proto change and add indexStore

* fix: update monitor delete unuse monitor history

* fix: delete unuse monitor type

---------

Co-authored-by: LvGJ <lvgj1998@gmail.com>
2024-02-12 14:16:04 +08:00
naiba 5bdfc0e052 theme-mdui by @MikoyChinese 2022-01-09 11:54:14 +08:00
Lemoe 2874157c2e 反向代理 gRPC 端口(支持 Cloudflare CDN) 2021-11-11 14:09:42 +08:00
Lemoe a8cb14b270 反向代理 gRPC 端口(支持 Cloudflare CDN) 2021-11-11 12:52:37 +08:00
naiba 1e0ad3f23f 🐛 任务调度中,服务器长度缩短导致的问题 2021-10-10 23:52:25 +08:00
naiba c6cb6b8a93 🐛 dashboard: 修复服务监控任务调度 2021-09-03 08:52:45 +08:00
naiba 3e8bb5bbfd dashboard: 服务监控请求时间间隔 2021-09-02 23:45:21 +08:00
naiba a9c7281af8 优化忽略规则配置和 Agent 获取 IP 2021-06-21 21:30:42 +08:00
naiba 814c371fe7 🚸 可以使指定服务器不参与服务监控 2021-04-22 21:53:31 +08:00
naiba ef3b3a4979 dash: HTTP等服务监控的故障/恢复报警 2021-04-17 23:36:37 +08:00
naiba 0513887375 ️ refactor: 将排序的服务器列表的锁拆分出来 2021-01-17 22:18:36 +08:00
naiba ba75954e40 ️ improve: 服务监控相关优化 2021-01-16 18:04:47 +08:00
naiba 27fcfbf76a 🚸 release: v0.2.1 2021-01-16 14:11:51 +08:00
naiba 8cc5d1c32b 💥 v2.0 必须更新面板,新增服务监控 2021-01-16 00:45:49 +08:00
naiba a4611beaec 🚚 from p14yground to naiba 2020-11-11 10:07:45 +08:00
奶爸 6f92e6ea05 优化 Websocket 连接 2019-12-10 18:05:02 +08:00
奶爸 db364099fb 展示服务器列表 2019-12-09 18:14:31 +08:00
奶爸 f7d7e9ef49 客户端授权验证 2019-12-09 16:02:49 +08:00
奶爸 f2f840de4a Web 服务 2019-12-08 16:59:58 +08:00