Skip to content

release: 1.9.9 - #108

Merged
kwhorne merged 1 commit into
mainfrom
release/1.9.9
Aug 21, 2026
Merged

release: 1.9.9#108
kwhorne merged 1 commit into
mainfrom
release/1.9.9

Conversation

@kwhorne

@kwhorne kwhorne commented Aug 21, 2026

Copy link
Copy Markdown
Owner

Summary

A security release. Three independent holes in the replication surface
(#107, superseding #103#105), all reachable in 1.9.8.

The first needs no credentials and no handshake: connecting to the replication
port returned a full copy of the database. Reproduced against 1.9.8 — zero bytes
sent, 560 bytes back with the canary row in them. The guard only covered
non-loopback binds, so --replication-listen 127.0.0.1:... without a cluster
secret was readable by any local process.

The upgrade note is a danger block, not a warning

Because the fixes are deliberately breaking and the exposure is real:

  • a primary with --replication-listen and a replica both now require
    ELYRASQL_CLUSTER_SECRET
  • primary and replica must be upgraded together — the handshake gained a
    step, so a 1.9.9 replica will not accept a 1.9.8 primary
  • a replica now needs accounts (--user/--password/--auth)
  • a refused endpoint keeps the server running, so replication endpoint stopped in the log is the only signal that replication is not happening —
    the note says to watch for it rather than assume
  • anyone who ran an exposed endpoint should rotate what the data would have
    revealed: the port left no access log

ELYRASQL_ALLOW_OPEN_AUTH=1 opts out of all four, described as the honest way to
say "this port is on a network I control" rather than as a convenience.

The three things the release workflow does not validate

Per CONTRIBUTING.md: SERVER_VERSION8.0.12-ElyraSQL-1.9.9 (confirmed with
elyrasql version), testbench/sql-dump/Cargo.lock refreshed with
cargo metadata --locked green in both workspaces, and the version strings in
README, installation, deployment and mysql-compatibility. The
Upgrading to 1.9.8 block keeps its title, and the 1.9.8 changelog section is
byte-identical (verified by digest).

Testing

  • cargo fmt --all --check
  • cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
  • cargo nextest run --workspace --locked — 448/448
  • cargo metadata --locked in both workspaces
  • Verified against a MySQL client

The fix itself was verified both ways before merging: without a secret the
endpoint refuses to start and its port does not listen; with one, an
unauthenticated peer receives the 16-byte challenge and no data.

Checklist

  • Docs updated under docs/
  • No internal engine/dependency names leak into SQL, errors, CLI, or the wire handshake
  • Limitations documented honestly
  • Scoped to a single logical change

A security release: three holes in the replication surface, all reachable in
1.9.8. The first needs no credentials and no handshake -- connecting to the
replication port returned a full copy of the database.

docs/installation.md gets a danger-level upgrade note rather than the usual
warning. It says plainly that the fixes are breaking (a primary and a replica
both need ELYRASQL_CLUSTER_SECRET, and they must be upgraded together because
the handshake gained a step), that a refused endpoint keeps the server running
so the log is the only signal, and that anyone who ran an exposed endpoint
should rotate what the data would have revealed -- the port left no access log.

Bumps the three things the release workflow does not validate: SERVER_VERSION,
the testbench lockfile, and the version strings in README and the docs.
@kwhorne
kwhorne merged commit 26bf826 into main Aug 21, 2026
13 checks passed
@kwhorne
kwhorne deleted the release/1.9.9 branch August 21, 2026 16:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant