v1.5.4
This release syncs everything from upstream s-ui v1.5.0 through v1.5.2 into 2s-ui, on top of our own fixes. Full parity with upstream v1.5.2, plus a few corrections upstream doesn't have yet.
Security
- Panel passwords are now stored as bcrypt hashes instead of plaintext (upstream #1159). Existing databases are migrated automatically; passwords keep working unchanged.
s-ui admin -showno longer prints the password — uses-ui admin -username <user> -password <pass>to set a new one. - SQL injection fix in the changes-log query (upstream #1131).
- Unknown-SNI TLS handshakes are rejected when a panel/sub domain is configured with manual certificates. If you connect by raw IP over HTTPS, either use the domain or leave the domain setting empty.
- Dependency security updates: sing-box v1.13.14, golang.org/x/crypto and friends.
Features (from upstream v1.5.0–v1.5.2)
- External JSON subscriptions with connection timeout and optional default routing rules.
- Client enhancements: creation time and remark fields, improved bulk add.
- Reset all clients' traffic — manual API and scheduled (
globalResetcron setting); re-enables depleted clients and restarts the core. - TLS certificate hot reload for panel and subscription servers — renewed certificates are picked up without a restart.
- Automatic SHA256 pinning for self-signed certificates, applied to configs and share links (with back-fill migration).
- CLI backup command:
s-ui backup -output <file|-> [-exclude changes,stats]. - Configurable traffic sampling (
statsBucketSeconds) with deduplicated storage. getCertPingAPI returns the leaf certificate SPKI hash of a remote TLS endpoint.- Subscription improvements: Content-Disposition filename, Clash default groups only injected when referenced, TUIC
udp_relay_modeon links.
Fixes
- VLESS over plain TCP+TLS keeps
flow: xtls-rprx-visionin generated Clash/JSON configs (upstream #1156). - Share links carry the correct certificate pin: hex fingerprint under the standard
pinSHA256key. (Upstream v1.5.2 emits this under apcskey that clients don't recognize — we kept the standard name.) getCertPinghardening over upstream: no crash on CN-only certificates (no SANs), and the probe connection is closed properly.- External subscriptions with no outbounds now return a real error instead of silently succeeding with empty data.
- Traffic chart adapts its resolution to the stored bucket size, so raising the sampling interval can't blank the dashboard charts (upstream #1150).
- h3 ALPN in Clash subs, Clash sub headers, WARP connection timeout, stricter VLESS flow validation (upstream v1.5.0).
Upgrade notes
- Docker: migrations run automatically via the entrypoint. Nothing to do.
- Bare-metal (systemd): run
s-ui migrateonce after upgrading. Without it, plaintext passwords are still upgraded lazily on each successful login, but the self-signed-certificate pin back-fill only runs through the migration. - The stats table is deduplicated and gains a unique index on first start after the upgrade; on very large databases the first start may take a little longer.