RUSTSEC-2026-0454

Source
https://rustsec.org/advisories/RUSTSEC-2026-0454
Import Source
https://github.com/rustsec/advisory-db/blob/osv/crates/RUSTSEC-2026-0454.json
JSON Data
https://api.osv.dev/v1/vulns/RUSTSEC-2026-0454
Aliases
  • GHSA-m9qr-4rcq-3jhc
Published
2026-11-03T12:00:00Z
Modified
2026-11-06T15:45:02Z
Severity
  • 7.8 (High) CVSS_V3 - CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H CVSS Calculator
Summary
Data race and double free via unsound `Send`/`Sync` in `reblessive`
Details

dbs::Executor drives every SurrealQL statement through reblessive::tree::TreeStack. In reblessive 0.4.3 the runtime types unconditionally assert Send/Sync (unsafe impl Send/Sync for Stack, TreeStack and Runner), while the public entry points accept any future without a Send bound and store it type-erased in a bump allocator.

Two safe-code consequences follow. First, Runner::step_async/finish_async return driver futures tied to the stack borrow rather than to &mut self, so a driver future can be duplicated; because Stack is Sync those futures are Send, and polling two copies on different threads runs drive_top_task concurrently — racy Cell/UnsafeCell access, double pop_task()/pop_dealloc() (double drop / double free) and a non-atomic Option::take. Second, TreeStack: Send lets safe code move a driver whose type-erased future captures !Send state (Rc, RefCell) to another thread while the creating thread keeps an alias of that state.

No unsafe is needed at the call site. surrealdb-core's own query futures are Send only because of the unsound unsafe impl Send for TreeStack, while the captured &mut tree::Stk is deliberately !Send.

The unsound dependency was removed in 4.0.0 and the parser now uses plain recursion (commit 75407c4bcc).

Database specific
{
    "license": "CC0-1.0"
}
References

Affected packages

crates.io / surrealdb-core

Package

Name
surrealdb-core
View open source insights on deps.dev
Purl
pkg:cargo/surrealdb-core

Affected ranges

Type
SEMVER
Events
Introduced
0.0.0-0
Fixed
4.0.0

Ecosystem specific

{
    "affected_functions": null,
    "affects": {
        "arch": [],
        "functions": [],
        "os": []
    }
}

Database specific

categories
[
    "thread-safety",
    "memory-corruption"
]
cvss
"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H"
informational
null
source
"https://github.com/rustsec/advisory-db/blob/osv/crates/RUSTSEC-2026-0454.json"