Commit Graph
16 Commits
Author SHA1 Message Date
Andy Dixon 50c0104d57 feat(core): RDP client on IronRDP
clients::rdp connects over any caller-dialled TCP stream (direct, proxy
or SSH tunnel), upgrades to TLS and logs on with NLA (CredSSP/NTLM),
optionally falling back to TLS-only logon for servers without NLA such
as xrdp (credentials are passed so they log straight in). The server
certificate is pinned through a caller check on its SHA256 fingerprint
before any credentials are sent. The desktop decodes into the VNC
client's RGBA framebuffer; input (IronRDP's scancode/Unicode/mouse
operations), Display Control resizes and the deactivation-reactivation
sequence run on the session thread.

IronRDP's releases need three vendored patches (vendor/README.md):
picky and sspi with their RustCrypto release-candidate pins relaxed so
they share russh's stable versions (their own suites, 402 tests, pass
against them), and ironrdp-session with two unreleased upstream bitmap
fixes (#1486 stride, #1524 RDP6 orientation) without which xrdp desktops
render sheared.

Verified live against xrdp (scottyhardy/docker-remote-desktop): logon,
full desktop rendering, keyboard and mouse input.
2026-10-12 10:50:24 +01:00
Andy Dixon 0d0b3a7c75 fix: wipe long-lived credential copies from memory
Session-only credentials (kept for a whole session so reconnects don't
re-prompt), credentials pending until a connection succeeds, and the
credential prompt's text buffer are now Zeroizing and wiped when
dropped, including when a prompt is cancelled or abandoned
(SEC-20261012-007, partial).

Still open: the values handed to the protocol clients are plain Strings
for the duration of authentication, egui keeps its own copies of typed
text, and no mlock/PR_SET_DUMPABLE is applied.
2026-10-12 09:37:23 +01:00
Andy Dixon f09300fd95 fix: a panic on one thread no longer takes the whole app down
Every shared lock was std::sync::Mutex with lock().unwrap() (~150 sites),
so a panic in any session's reader or callback poisoned the lock and the
next UI frame panicked too, dropping every open session. Locks are now
parking_lot::Mutex (no poisoning; already in the dependency tree), and a
panic hook reports worker panics as an error toast instead of the session
silently stopping (F3, F4).
2026-10-12 09:07:32 +01:00
Andy Dixon 9cf221779b fix: purge keychain credentials on profile delete, atomic owner-only secret writes, zeroize derived keys
- Secrets::delete_profile removes every profile credential kind from the OS
  keychain as well as the vault (previously only the vault was purged, so
  keychain passwords/tokens outlived the profile).
- write_private writes to a sibling temp file and renames it into place, so a
  crash mid-write cannot truncate the vault or an export, and a pre-existing
  world-readable file is replaced rather than reused.
- Argon2-derived vault/export keys are Zeroizing and wiped on drop.
- Recordings (which capture typed input), JSON exports and --data-dir
  directories are created owner-only.
2026-10-12 07:20:11 +01:00
Andy Dixon 43acc57c51 rust: Nexus Terminal app shell (title bar, sidebar, tabs, split panes, terminal view, palette, prompts, dialogs, toasts, status bar) 2026-10-11 16:48:33 +01:00
Andy Dixon 81360cc4c2 rust: native VNC (RFB) client 2026-10-11 16:36:32 +01:00
Andy Dixon 03bb1db936 Merge GitHub and IRC clients, IRC formatting 2026-10-11 16:23:31 +01:00
Andy Dixon d20d16e8c8 rust: port GitHub and IRC clients, IRC formatting 2026-10-11 16:21:08 +01:00
Andy Dixon 1a42f65af1 Merge telnet, raw and serial clients 2026-10-11 16:20:27 +01:00
Andy Dixon 0b846e90d0 Merge utility ports (recording, sshconfig, terminalenv, validation, updater, keyfiles) 2026-10-11 16:19:14 +01:00
Andy Dixon 4674c7cb3f rust: app crate scaffolding, terminal colour schemes 2026-10-11 16:18:15 +01:00
Andy Dixon fb3e49a2a8 rust: port telnet and raw clients; add serial client 2026-10-11 16:18:04 +01:00
Andy Dixon fd54c988b6 rust: port recording, sshconfig, terminalenv, validation, updater, keyfiles 2026-10-11 16:17:03 +01:00
Andy Dixon 5ffee4a7c4 rust: local shell client on portable-pty 2026-10-11 16:15:58 +01:00
Andy Dixon 026f27add6 rust: SSH client on russh (auth chain, TOTP, jump hosts, proxies, forwards, agent forwarding) and SFTP, with sshd integration tests 2026-10-11 16:14:55 +01:00
Andy Dixon e03298de11 rust: nexus-core storage, vault, keychain, export/import, data-dir migration 2026-10-11 16:05:13 +01:00