v3.5.168
mukul975/cve-mcp-serverv3.5.168Oct 17, 2026by UNITRONIX
Upgrading?
AI Summary
BetterDesk 3.5.168 is a stable rollup of roughly 380 commits from 3.5.4, focused on security hardening, the UX 3.5 console, authentication, generator/support agent work, Docker/installers, relay behavior, and Web Remote. It closes CodeQL alerts, tightens OIDC/JWT/CSP behavior, and adds TOTP, scheduled backups, and generic agent releases.
Key Highlights
- Security hardening across Multer path handling, SSRF allowlists, local builder spawn restrictions, OIDC race fixes, JWT claim validation, CSP tightening, and SQL identifier checks.
- UX 3.5 becomes the only supported console shell, with light/dark topbar, sticky settings tabs, self-hosted Material Symbols, onboarding improvements, and device tag editing.
- Authentication additions include TOTP 2FA, OIDC SSO-first login with role mapping, and stricter JWT requirements for aud/iss/nbf.
- New operational features include scheduled full-instance backups, coordinated service restarts, generic agent releases with QR activation, and an org credential vault.
- Docker/installer fixes cover split Compose admin bootstrap, PUID/PGID, bind mounts, GHCR tag sync, and safer agent uninstall.
Breaking Changes
- JWT tokens now require aud, iss, and nbf claims; users must sign out and sign in again after upgrading.
- UX 3.5 is the only supported console shell; the classic shell and beta switch have been removed.
- CSP on /remote no longer allows script-src-attr unsafe-inline or default unsafe-eval; emergency rollback is available via CSP_RELAX_REMOTE=true.
New Features
- TOTP two-factor authentication for panel accounts
- OIDC SSO-first login and role-mapping administration
- Scheduled full-instance backups with retention and SMB/path targets
- Generic agent releases with QR activation
- Support Agent with Wails UI, multi-codec support, and HTTP/WS profiles
- Web Remote to WebSocket Mode bridge on the relay
- Organization credential vault using AES-GCM
- Client branding for desktop remotes and public download portal labels
- Registration notifications in UX 3.5
Full Release Notes
# BetterDesk 3.5.168 (stable)
Comprehensive stable update from **3.5.4** (~August 2026 → October 2026): **~380 commits** from the Development branch (`dev`), including security fixes, UX 3.5, Generator / Support Agent, Docker/installers, OIDC/TOTP, relay, and Web Remote.
Tag: `v3.5.168` · commit: `0b176a2f` · PR: [#454](https://github.com/UNITRONIX/BetterDesk/pull/454)
**Not included in this release:** Dependabot [#453](https://github.com/UNITRONIX/BetterDesk/pull/453) (Express 5 / bcrypt 6 / ejs 7 and other majors) — deferred to a dedicated migration; that PR’s CI fails (35 failed suites).
---
## Security
### CodeQL, paths, and SSRF
- **Multer:** upload cleanup only after reconstructing paths under `tmpdir` / `dataDir` (safe path segments) — closes path-injection alerts (#358/#361).
- **Generator:** local archive cleanup uses the same confined path.
- **Support Generator (SSRF):** GitHub fetches restricted to HTTPS and an allowlisted host set (`api.github.com`, `github.com`, `objects.githubusercontent.com`, `release-assets.githubusercontent.com`) via `https.get({ hostname, path })`.
- **Local Client Builder:** `spawn` limited to an allowlisted toolchain basename set (cargo, flutter, dpkg-deb, …).
- **Public generic-agent download:** rate-limited (`fileAccessLimiter`).
- **scheduledBackupService / updateService / generator.routes:** path-injection findings treated as false positives on admin-validated paths; filtered in CodeQL config and dismissed in the Security UI.
- After scan: **0 open CodeQL alerts** on the security tip.
### Auth / OIDC / JWT / CSP
- **OIDC discovery:** fixed data race (atomic retry interval + goroutine `Close()`) — green `go test -race`.
- **OIDC:** SSO-first login, role overrides, scoped private endpoints, discovery retry when the IdP comes up after API start.
- **JWT (Go):** requires `aud` / `iss` / `nbf` (`betterdesk-server` / `betterdesk-api`). **Re-login required after upgrade** (tokens without these claims are rejected).
- **CSP:** removed `script-src-attr 'unsafe-inline'` and default `unsafe-eval` on `/remote` (RdClient: static protobuf bundle); emergency rollback via `CSP_RELAX_REMOTE=true`.
- **SQL:** `assertSafeSqlIdent` for dynamic table names (stats / dump / restore).
- **TOTP:** management under Authentication settings; OTP verification on client paths.
- Security Test Suite **v1.2.0** (`npm run test:security` / `scripts/run-security-suite.*`).
### Dependencies (security — shipped)
- Node: `axios` ≥1.20, `multer` ≥2.4, overrides including `brace-expansion`, `proxy-addr`, `tar`, `path-to-regexp` (Express **4** line).
- Go: toolchain **1.26.9**, `golang.org/x/text` **v0.41.0** (govulncheck clean on called paths).
- Go pins in `betterdesk.sh` / `betterdesk.ps1` / `updateService.js` aligned with `go.mod`.
---
## UI and new features
### Console (UX 3.5)
- **UX 3.5 is the only supported console shell** (classic shell / beta switch removed).
- Light/dark topbar, sticky Settings tabs, denser mobile chrome, Material icon a11y.
- Self-hosted **Material Symbols** (no Google Fonts CDN on the critical path).
- **Help** panel with supporters / links instead of guided tours.
- Onboarding: generator → QR/config → registration.
- Device tag editing; background devices-table refresh; drag-and-drop with auto-scroll.
- Client Branding for desktop remotes; custom product label on the public download portal.
- Registration notifications (badge + center) in UX 3.5.
### Auth and accounts
- **TOTP** (2FA) for panel accounts.
- **OIDC SSO-first** login and role-mapping administration.
- Stock RustDesk outbound options: require initiator login, Admin/Operator-only, controller-only mode (opt-in under Settings → Connection).
### Generator / agents / remote
- **Generic agent releases** + QR activation.
- Local Linux package formats in the builder; Support Agent (Wails UI, multi-codec, HTTP/WS profiles).
- RdClient: static protobuf under CSP; PunchHole/OFFLINE/connection-policy parity; Web Remote ↔ WebSocket Mode (TCP↔WS bridge on the relay).
- Guest access: scoped lifecycle.
- Attestation: configurable server badge labels.
- Desktop connection mode (normal / incoming-only) queued per device.
- Org **credential vault** (AES-GCM) for the address book.
- FPS modes in web sessions; gated RDP/VNC dependency updates.
### Backup and operations
- **Scheduled full-instance backups** (retention, local / path / SMB, validation).
- Coordinated service restarts and login metadata in the console.
- Simplified appearance / branding; appearance profile duplication without overwriting the active profile.
### Docker and installers
- Admin bootstrap / shared SQLite DB fixes for split Compose (#385).
- PUID/PGID, harder startup on bind mounts, connection strategy in split Docker.
- GHCR `:dev` / `:latest` kept in sync with the version tip (#387, #401).
- Native install: Go download diagnostics, IPv6 handling, module deadlines (#371).
- Installers: preflight, verification protocol, safer agent uninstall.
---
## Bug fixes (selected, since 3.5.4)
**Connections / relay / enrollment**
- Shared-NAT / CGNAT punch and RelayResponse (#399); empty `socket_addr` → OFFLINE (#405).
- MASK/CIDR in LAN detection (#404); mixed TCP/WS transports.
- Enrollment: display name on approve; managed enrollment for viewer-only mobile (#375).
- Peer grants / strategy scope — grants persist and errors surface instead of silent no-ops (#380).
- Signal: peer-key hydration; transport retained after approve.
**Docker / credentials / Node**
- Admin password vs credentials-file mismatch; atomic bootstrap password.
- Stale `auth.db` after partial volume wipe.
- Console SIGABRT on Node 24 → production images pin Node **22.23.2** (#377).
- Missing Support Agent sources in generator images (#391).
**UI**
- Mobile: Devices taps (#410), sticky overlapping, Settings tabs (#396).
- Leftover `/d/:slug` pages hidden after generator migration (#412).
- Notification badge at zero; theme-toggle audit noise.
**Other**
- User save crash when assigning a strategy (#384).
- Config QR warnings for localhost / `.local` (#368).
- Registrations and badge in UX 3.5.
---
## Dependencies (notable, in this release)
| Area | Change |
|------|--------|
| Go toolchain | → **1.26.9** (installer + panel update pins) |
| `golang.org/x/text` | → **v0.41.0** |
| npm prod | `axios` 1.20, `multer` 2.4, hardening overrides |
| Express | **stays on 4.x** (no Express 5 migration) |
---
## Verify / update
- **Stable (`main`)** channel → Settings → Updates (or `betterdesk.sh` / `.ps1` / Docker update).
- After upgrading from JWTs issued before `aud`/`iss`/`nbf`: **sign out and sign in again**.
- Optional: `npm run test:security` / security suite on the console after deploy.
---
## Thanks
Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow); muopc (@muopc)
Related Repositories
public-apis/public-apis★ 491,314
A collective list of free APIs
NousResearch/hermes-agent★ 256,162
The agent that grows with you
yt-dlp/yt-dlp★ 200,364
A feature-rich command-line audio/video downloader
microsoft/markitdown★ 191,619
Python tool for converting files and office documents to Markdown.
Significant-Gravitas/AutoGPT★ 187,709
AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.