v3.5.168
meituan-longcat/LongCat-Videov3.5.168Oct 17, 2026by UNITRONIX
Upgrading?
AI Summary
A comprehensive stable update (~380 commits) focusing on security hardening (CodeQL, SSRF, path injection), the adoption of UX 3.5 as the primary console shell, and enhancements to authentication (OIDC, TOTP) and Docker support.
Key Highlights
- Security hardening: 0 open CodeQL alerts, SSRF restrictions, and path injection prevention.
- UX 3.5 adoption: Light/dark topbar, sticky settings, and self-hosted Material Symbols.
- Auth upgrades: OIDC SSO, TOTP 2FA, and new JWT claims requirements (aud/iss/nbf).
- Docker and installer fixes: Admin bootstrap, PUID/PGID, and native install diagnostics.
Breaking Changes
- JWT tokens without 'aud', 'iss', or 'nbf' claims are rejected, requiring re-login after upgrade.
- CSP strictness on `/remote` (removed 'unsafe-inline' and 'unsafe-eval') - emergency rollback via environment variable.
New Features
- Generic agent releases with QR activation.
- Org credential vault using AES-GCM encryption.
- Scheduled full-instance backups with validation.
- Console UX 3.5 with light/dark mode and denser mobile chrome.
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,231
A collective list of free APIs
NousResearch/hermes-agent★ 256,109
The agent that grows with you
yt-dlp/yt-dlp★ 200,274
A feature-rich command-line audio/video downloader
microsoft/markitdown★ 191,568
Python tool for converting files and office documents to Markdown.
Significant-Gravitas/AutoGPT★ 187,700
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.