17 Commits

Author SHA1 Message Date
dependabot[bot] 4791056067 build(deps): bump russh from 0.62.4 to 0.62.5 in /fuzz (#194)
Bumps [russh](https://github.com/warp-tech/russh) from 0.62.4 to 0.62.5.
- [Release notes](https://github.com/warp-tech/russh/releases)
- [Commits](https://github.com/warp-tech/russh/compare/v0.62.4...v0.62.5)

---
updated-dependencies:
- dependency-name: russh
  dependency-version: 0.62.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-10 20:42:15 +10:00
Dave Kempe 86cee24e63 fix(fuzz): bump russh 0.62.2 -> 0.62.4 in the fuzz lockfile
Clears Dependabot alerts GHSA-g9hv-x236-4qp3, GHSA-cqjc-rmpq-xprq,
GHSA-5xvq-cp9x-6p6r (russh pre/post-auth panics, patched in 0.62.4). Only the
fuzz harness's lockfile was affected; the shipped binary already uses russh
0.62.4 via the main lockfile, so v1.9.0 is not vulnerable.
2026-07-26 08:32:01 +10:00
Dave Kempe 0d4eb24994 deps: batch bump for 1.8.1
- quinn-proto 0.11.14 -> 0.11.16 (RUSTSEC-2026-0185, remote memory
  exhaustion via reqwest; unblocks CI cargo-audit)
- russh 0.61 -> 0.62 (also drops the yanked crypto-bigint 0.7.3)
- tower-http 0.6 -> 0.7
- rustls 0.23.42, uuid 1.24.0, socket2 0.6.5, serde_with 3.21.0,
  rand 0.10.2, webpki-roots 1.0.9, toml 1.1.3, cmov 0.5.4
- fuzz lockfile synced (russh, serde_with, cmov)

Clears the open dependabot queue (#164-#180).
2026-07-20 11:03:43 +10:00
Dave Kempe 718010b2c0 deps: bump rusqlite 0.40.1, russh 0.61.2, uuid 1.23.3
russh also synced in /fuzz. Closes #160, #161, #162.
2026-06-17 21:18:27 +10:00
Dave Kempe 5cb7804346 deps: bump russh in /fuzz to 0.61.1 (matches main tree)
Closes #155.
2026-06-04 11:46:42 +10:00
Dave Kempe 2095c7f2fb deps: batch bump pulldown-cmark 0.13.4, tower-http 0.6.11, serde_json 1.0.150, cbc 0.2.1, russh 0.60.3
Closes dependabot #146, #143, #142, #145, #141, #140.

All patch/minor bumps within existing Cargo.toml constraints; no source
changes. russh held at the 0.60.x patch line (0.60.3); the 0.61.0 minor
(#144) was declined for now to avoid absorbing its new-API churn without
a reason to. fuzz/Cargo.lock russh bumped to match (#140).

229 tests pass, clippy and fmt clean.
2026-05-28 06:29:06 +10:00
dependabot[bot] 71ee3bdbb6 Bump rustls-webpki from 0.103.12 to 0.103.13 in /fuzz (#116)
Bumps [rustls-webpki](https://github.com/rustls/webpki) from 0.103.12 to 0.103.13.
- [Release notes](https://github.com/rustls/webpki/releases)
- [Commits](https://github.com/rustls/webpki/compare/v/0.103.12...v/0.103.13)

---
updated-dependencies:
- dependency-name: rustls-webpki
  dependency-version: 0.103.13
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-25 15:38:13 +10:00
dependabot[bot] 18f1fdffe5 Bump russh from 0.60.0 to 0.60.1 in /fuzz (#114)
Bumps [russh](https://github.com/warp-tech/russh) from 0.60.0 to 0.60.1.
- [Release notes](https://github.com/warp-tech/russh/releases)
- [Commits](https://github.com/warp-tech/russh/compare/v0.60.0...v0.60.1)

---
updated-dependencies:
- dependency-name: russh
  dependency-version: 0.60.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-25 15:37:40 +10:00
Dave Kempe c21131b1e1 release: split Docker build to native runners + refresh locks
Docker pipeline
- Multi-arch build on ubuntu-latest with QEMU was the long pole of
  the release pipeline (arm64 took 30–60 min vs ~5 min for the
  native-arm .deb job). Split into three jobs:
  - build-docker-amd64 on ubuntu-latest
  - build-docker-arm64 on ubuntu-24.04-arm (same native runner the
    arm64 .deb build uses)
  - build-docker-manifest combines them with
    `docker buildx imagetools create` into the consumer-facing
    `sol1/rustguac:VER` and `:latest` multi-arch manifest lists.
- Consumer-facing tags are unchanged — `docker pull
  sol1/rustguac:latest` still auto-picks the right arch. The per-arch
  intermediate tags (`:VER-amd64`, `:VER-arm64`) appear as byproducts
  on Docker Hub but aren't required.
- The release job now depends on build-docker-manifest instead of
  the removed build-docker.

Dependency refresh (closes 5 low-severity Dependabot alerts)
- `cargo update` at root and in fuzz/:
  - rustls-webpki: fuzz/ was 0.103.x < 0.103.12 → now 0.103.12
    (main lock was already there from v1.5.5)
  - rand 0.9.x: < 0.9.3 → 0.9.4 (GHSA-cq8v-f236-94qc: unsound with
    a custom logger inside rand::rng())
  - rand 0.10.0 → 0.10.1 (same GHSA)
- We don't hook loggers into rand so the unsoundness never triggered
  in practice, but getting to clean alerts is worth a lockfile bump.
2026-04-18 22:21:47 +10:00
Dave Kempe b2892e404f v0.9.2: Dependency updates
- sha2 0.11.0-rc.5 → 0.11.0 (stable release)
- rusqlite 0.38.0 → 0.39.0 (bundled SQLite 3.51.3)
- clap 4.5.60 → 4.6.0
- toml 1.0.4 → 1.1.0
- libc 0.2.182 → 0.2.183
- pulldown-cmark 0.13.1 → 0.13.3
- tracing-subscriber 0.3.22 → 0.3.23
- uuid 1.22.0 → 1.23.0
2026-03-28 12:27:42 +11:00
Dave Kempe e07af6fdb1 Fix rustls-webpki in fuzz/Cargo.lock (RUSTSEC-2026-0049) 2026-03-22 09:42:15 +11:00
Dave Kempe a729ce0900 v0.8.1: Security fixes, dependency updates, onboarding wizard
Security:
- aws-lc-sys 0.38.0 → 0.39.0 (RUSTSEC-2026-0044, RUSTSEC-2026-0048)
- rustls-webpki 0.103.9 → 0.103.10 (RUSTSEC-2026-0049)
- Fixed fuzz/Cargo.lock with same aws-lc-sys update

Dependencies:
- rusqlite 0.38.0 → 0.39.0 (bundled SQLite 3.51.3)
- russh 0.57.1 → 0.58.0 (21% throughput improvement)
- clap 4.5.60 → 4.6.0
- toml 1.0.4 → 1.0.7
- tracing-subscriber 0.3.22 → 0.3.23
- libc 0.2.182 → 0.2.183

Features:
- Onboarding wizard for new users (role-scoped, dismissable)
- Settings menu label (was just a cog icon)
- Clipboard diagnostic logging in WebSocket proxy
2026-03-21 16:58:10 +11:00
dependabot[bot] 99b482a994 Bump quinn-proto from 0.11.13 to 0.11.14 in /fuzz
Bumps [quinn-proto](https://github.com/quinn-rs/quinn) from 0.11.13 to 0.11.14.
- [Release notes](https://github.com/quinn-rs/quinn/releases)
- [Commits](https://github.com/quinn-rs/quinn/compare/quinn-proto-0.11.13...quinn-proto-0.11.14)

---
updated-dependencies:
- dependency-name: quinn-proto
  dependency-version: 0.11.14
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 00:18:47 +00:00
Dave Kempe 4c11d40eec Update aws-lc-rs to 1.16.1 (fixes Dependabot security alert)
Bumps aws-lc-sys from 0.37.1 to 0.38.0 via aws-lc-rs 1.16.1,
resolving the security_update_not_possible failures in Dependabot.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 17:17:02 +11:00
Dave Kempe 54c1d5be17 Security hardening: open redirect, cookie flags, constant-time auth, fuzz targets
- Fix open redirect via protocol-relative URLs (//evil.com) in OIDC next parameter
- Add Secure flag to all cookie-clearing Set-Cookie headers
- Add single-quote escaping to html_escape() (defence-in-depth)
- Cross-check OIDC state cookie against state query parameter in callback
- Switch API key and user token validation to constant-time hash comparison (subtle)
- Add 3 new fuzz targets: api_input, vault_response, websocket_message
- Bump version to 0.3.3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 08:42:33 +11:00
Dave Kempe a2bbce73ee Add guacd parser fuzz harness and document fuzzing findings
libFuzzer+ASan+UBSan harness for guac_parser_append() — the C state
machine that parses all Guacamole wire-format input in guacd. 3.2M
iterations found no memory corruption; one non-exploitable signed
integer overflow (UBSan) in the length prefix accumulator noted in
FINDINGS.md.

Also adds FINDINGS.md for the Rust protocol parser fuzzer documenting
the UTF-8 boundary panic fix from v0.1.3.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:17:42 +11:00
Dave Kempe 1922bd9987 Add fuzz testing infrastructure and fix UTF-8 boundary panic
Add cargo-fuzz targets for the Guacamole protocol parser:
- protocol_parse: single instruction parsing
- protocol_stream: streaming parser with chunked input

Fix panic in Instruction::parse when a length prefix splits a multi-byte
UTF-8 character (found by fuzzer within seconds). Now returns
ParseError::Truncated instead of panicking on invalid char boundary.

Run with: cargo +nightly fuzz run protocol_parse
          cargo +nightly fuzz run protocol_stream

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:39:16 +11:00