You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Track RUSTSEC-2026-0258 (h2 0.3 via libsql remote) and its temporary audit exception #349
The nightly cargo audit reports RUSTSEC-2026-0258 in h2 0.3.27. Nothing upstream fixes it yet, so I'm tracking it here alongside a temporary audit exception.
Where it comes from
libsql 0.9.30's remote feature (Hrana over HTTP) depends on hyper 0.14 with http2 enabled, which pulls in h2 0.3.x.
Our own hyper 0.14 dependency doesn't enable http2, so libsql's remote feature is the only reason h2 0.3 is in the tree. The h2 0.4 copy that comes through hyper 1, reqwest and axum isn't affected.
We can't drop remote, because it's the remote database path in src/db.rs.
Why the risk is negligible for us
The advisory is a low-severity way to crash or exhaust memory by flooding an h2 connection with empty DATA frames.
We only use h2 as a client, and only toward the database server the operator configured.
src/remote_https.rs offers only http/1.1 during the TLS handshake, and a test covers that. libsql never forces HTTP/2, so the h2 code is built but never runs. We also confirmed that our hosted database endpoint works fully over HTTP/1.1.
Upstream status
libsql 0.10.0 (2026-10-13) still uses hyper ^0.14.
Add a narrow audit ignore for RUSTSEC-2026-0258 only, with a written reason, plus an expiry date check in scripts/ci-preflight.sh (about 90 days out) so it can't be forgotten.
Keep the HTTP/1.1-only connector test, since it's what makes the exception safe.
When libsql ships a release whose remote path uses hyper 1 / h2 0.4, bump libsql, remove the ignore and close this issue.
If the exception expires with no upstream movement, scope replacing the remote client (Hrana over hyper 1 or reqwest, keeping libsql core for local) as a separate backlog item.
The rustls advisories (RUSTSEC-2026-0346 to 0349) are fixed by a separate lockfile bump, not here.
Candidate 1 is Turso's newer remote client, turso_serverless. It uses reqwest on hyper 1 and accepts libsql:// URLs with a token. The open questions: it's young (0.1.x), it targets Turso's new engine so it hasn't been proven against our hosted libSQL database, and it may not cover everything we use (transactions, batches, retry handling).
Candidate 2, the fallback, is a small in-house client that speaks the Hrana protocol over plain HTTP, using hyper 1 or reqwest with rustls, so the remote side drops libsql entirely.
Before choosing, do a short spike: run queries and a transaction against a test database with candidate 1, map our remote database code onto its API, and estimate the size of the swap.
I'll revisit this if libsql moves to hyper 1 or turso_serverless matures, whichever comes first.
Addendum from the public bunny.net docs (checked 2026-10-17):
The only protocol Bunny Database documents is Hrana over HTTP at POST /v2/pipeline, and that API is marked beta (SQL API).
The only Rust client Bunny documents is the libsql crate with Builder::new_remote (Rust page).
WebSocket access isn't documented, and neither is the turso sync protocol. turso_serverless hasn't been verified against Bunny.
Bunny runs its own fork of libSQL and makes no long-term feature-parity commitment (launch post).
This makes the in-house /v2/pipeline client the most likely replacement, if we ever need one. It's essentially what Bunny's own TypeScript client does. The trade-offs are that we'd have to handle value encoding ourselves (integers as strings, blobs as base64), and we'd use batch/sequence requests instead of interactive transactions.
This is a watch item only, with no code work until upstream ships a fix. The only allowed change is a dependency bump that removes h2 0.3, along with removing the audit exception. That should be a small PR with no refactoring.
Activity
jatmn commentedon Oct 17, 2026
Backlog note: options for replacing the libsql remote client. These are deferred for now; the audit exception stays in place.
libsql://URLs with a token. The open questions: it's young (0.1.x), it targets Turso's new engine so it hasn't been proven against our hosted libSQL database, and it may not cover everything we use (transactions, batches, retry handling).I'll revisit this if libsql moves to hyper 1 or turso_serverless matures, whichever comes first.
jatmn commentedon Oct 17, 2026
Addendum from the public bunny.net docs (checked 2026-10-17):
POST /v2/pipeline, and that API is marked beta (SQL API).libsqlcrate withBuilder::new_remote(Rust page).tursosync protocol.turso_serverlesshasn't been verified against Bunny.This makes the in-house
/v2/pipelineclient the most likely replacement, if we ever need one. It's essentially what Bunny's own TypeScript client does. The trade-offs are that we'd have to handle value encoding ourselves (integers as strings, blobs as base64), and we'd use batch/sequence requests instead of interactive transactions.fix(ci): bump rustls to 0.23.46 and expire the h2 audit exception (#350)
jatmn commentedon Oct 28, 2026
Work guideline
This is a watch item only, with no code work until upstream ships a fix. The only allowed change is a dependency bump that removes h2 0.3, along with removing the audit exception. That should be a small PR with no refactoring.