CVE-2026-54619
NoneCVSS
—
EPSS
0.1%
Published
Jul 28, 2026
CISA due date
—
Cloudanix analysis
A Ruby database library bug can let someone who already has limited control inside an application crash it or potentially tamper with its memory, so affected software should be updated.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- High
- Impact
- Data Tampering
- Component
- Library
- Class
- Use After Free
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The sqlite3 Ruby bindings in version 2.9.4 and earlier contain a use-after-free condition when a SQLite user-defined function is redefined with a different arity. The extension can free the previously registered Ruby function handler while the underlying SQLite engine may still hold and later use a reference to it. In a process where an attacker can execute Ruby code or influence SQLite function registration, this can cause memory corruption, process crashes, and potentially unintended reads or writes within the affected process. The CVSS vector indicates local exploitation, high attack complexity, and required low privileges, with limited confidentiality, integrity, and availability impact.
Why it matters to the business
For most organizations this is a low-urgency dependency risk rather than an internet-facing emergency: successful exploitation generally requires the attacker to already have some ability to run code or influence database function registration inside a Ruby application. The most likely operational consequence is application instability or denial of service through crashes; in more advanced scenarios, memory corruption could contribute to privilege escalation within the application process or compromise of data handled by that process. EPSS is very low at 0.00107, the vulnerability is not in CISA KEV, is not known to be used in ransomware campaigns, and has no reported exploit maturity, but affected dependencies should still be upgraded during normal patch cycles.
How an attack unfolds
An attacker first needs access to a context where Ruby code using the sqlite3 gem can register or redefine SQLite functions, such as a plugin system, scripting interface, compromised low-privilege account, malicious dependency, or other application feature that permits controlled use of SQLite function definitions. The attacker registers a SQLite function, then redefines a function with the same name but a different number of arguments. In vulnerable versions, this causes the previous Ruby handler to be freed even though SQLite may still retain a reference to it. The attacker then triggers SQLite execution paths that call or interact with the stale handler reference. Depending on memory layout, garbage collection timing, allocator behavior, and process hardening, this may result in a crash or controlled memory corruption. Because exploitation is local, high-complexity, and requires privileges, broad remote exploitation is unlikely without being chained with another flaw that provides code execution or function-registration control.
How to fix it
Upgrade the Ruby sqlite3 gem to version 2.9.5 or later wherever it is used. Update dependency manifests and lockfiles, rebuild application images or packages, and redeploy affected services. If immediate upgrade is not possible, reduce exposure by disabling or restricting untrusted Ruby execution, plugin systems, scripting interfaces, or any application feature that allows users to register or redefine SQLite functions. Run affected Ruby applications with least privilege, isolate workloads, and ensure standard memory-hardening and process supervision are enabled so crashes do not cause broader service impact.
How to confirm the fix worked
Confirm that all deployed Ruby applications and build artifacts use sqlite3 gem version 2.9.5 or later. Check Gemfile.lock, gemspec files, software composition analysis results, container images, and runtime gem inventories. Commands such as `bundle list | grep sqlite3`, `bundle info sqlite3`, or `ruby -e 'require "sqlite3"; puts SQLite3::VERSION'` can help validate runtime versions, though the exact command may vary by application packaging. Rebuild and redeploy rather than only updating source manifests. Regression-test any application code that registers custom SQLite functions, especially code that redefines functions with different argument counts, and verify that no crashes occur under those paths.
Typical attack path
- Gain local or application-level ability to execute Ruby code or otherwise control sqlite3 function registration.
- Identify that the application is using the vulnerable sqlite3 Ruby gem version 2.9.4 or earlier.
- Register a SQLite user-defined function through the Ruby sqlite3 bindings.
- Redefine the same SQLite function name using a different arity.
- Trigger SQLite operations that cause SQLite to reference the previously freed function handler.
- Attempt to convert the resulting use-after-free into a process crash, data corruption, or limited memory access within the affected process.
How to detect it
There are no public, reliable exploitation-specific indicators for this vulnerability. Detection should focus on exposure identification and suspicious runtime behavior. Review dependency inventories, Gemfile.lock files, SBOMs, container image scans, and runtime gem listings for sqlite3 gem versions 2.9.4 and earlier. For possible prior exploitation, inspect application logs, process supervisor logs, system journals, container restart history, crash dumps, and core files for unexplained Ruby process crashes involving sqlite3, SQLite function registration, native extension faults, segmentation faults, aborts, or memory corruption messages. If the application supports plugins or scripting, correlate crashes with recent plugin installation, user-submitted scripts, administrative changes, or SQL function registration activity. Forensic review should include core dumps and native stack traces looking for sqlite3 Ruby extension frames and SQLite user-defined function callback paths.
What your security team should do
- Inventory Ruby applications, containers, and packages that include the sqlite3 gem version 2.9.4 or earlier.
- Prioritize upgrade to sqlite3 gem 2.9.5 or later in normal dependency patch cycles; accelerate if the application allows user-controlled scripts, plugins, or custom SQL function registration.
- Update Gemfile.lock and rebuild deployment artifacts to ensure the fixed version is actually present at runtime.
- Add software composition analysis checks to block vulnerable sqlite3 gem versions from new builds.
- Review application features that allow untrusted Ruby execution or custom SQLite function creation, and restrict them where possible.
- Monitor for unexplained crashes in Ruby processes using sqlite3, especially after function registration or plugin execution paths.
- Because there is no KEV listing, no known ransomware use, very low EPSS, and no public exploit maturity, treat this as a controlled patching issue unless local code execution exposure exists.
The record
sqlite3 provides Ruby bindings for the SQLite3 embedded database. In version 2.9.4 and earlier, redefining a SQLite function with a different arity frees the previously registered function handler while SQLite may still reference it, resulting in a use-after-free. This issue is fixed in version 2.9.5.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|
Related vulnerabilities
- CVE-2026-119338 Tesseract is an open source OCR engine. CWE-416
- CVE-2026-119332 Ladybird is a truly independent web browser. CWE-416
- CVE-2026-119116 A use-after-free and double-free issue in the SetClient command handler of the… CWE-416
- CVE-2026-119378 SQLite before 3.54.0 contains a use-after-free vulnerability in the R-Tree extension that… CWE-416
- CVE-2026-119372 SQLite before 3.54.0 built with FTS3/FTS4 and SQLITE_ENABLE_FTS3_PARENTHESIS contains a… CWE-416
- CVE-2026-65586 Software installed and run as a non-privileged user may conduct improper GPU system calls… CWE-416
- CVE-2026-15466 Software installed and run as a non-privileged user may conduct improper GPU system calls… CWE-416
- CVE-2026-76031 Use after free in Input in Google Chrome prior to 156.0.8078.79 allowed a remote attacker… CWE-416