Security1 distinct publisher2 min readPublished
The Erlang Ecosystem Foundation's CNA published the entry on August 30, 2026, and ash_sqlite 0.2.18 escapes the path segments. Exposure comes down to whether your callers get to name the JSON field.
The Watch · Security desk

Compiled by The WatchSomething wrong?How this is made
Malformed input is useful before any successful traversal. An unbalanced bracket or a bare $ in a field-selection parameter makes SQLite throw JSON path errors, and those errors describe the structure the caller was never shown [10]. An attacker can enumerate with the same parameter used to extract [10].
The proof of concept ran AshSqlite 0.2.17 [8]. The advisory range starts at 0.1.2-rc.0 and stops just short of 0.2.18 [3], which puts the demonstration on the last affected release rather than an old one [15]. The patch is small: 0.2.18 drops the join and encodes each key, escaping backslashes and quotes and handling numeric array indexes separately [11].
Reachability decides exposure here. The traversal happens only when untrusted input reaches get_path/2, through a public calculation, a filter, or an API that lets callers pick which JSON field they want [16]. The Cyber Express notes that internal applications without untrusted callers face lower exposure, while public search, filtering and field-selection APIs need validation and access controls [14].
If the upgrade has to wait, the interim control is an allowlist. Restrict dynamic get_path/2 calls to predefined names, reject periods and brackets in the input, and stop handing out arbitrary JSON paths [12]. After upgrading, the work is unglamorous: dependency locks and deployment images checked for older ash_sqlite, logs read for unusual dots, brackets and JSONPath symbols in field-selection requests [13]. Those log hits do not prove exploitation, they only tell you where to look [13].
The GitHub advisory files this as "JSONPath injection in AshSqlite.SqlImplementation get_path", and says an attacker controlling one path segment can traverse nested JSON and disclose private fields [6]. In your own code the thing worth grepping for is the concatenation itself: a caller-named segment joined into a string that something downstream will parse as a grammar [4]. SQLite's JSON path is one such grammar. Parameter binding does not cover it, because the binding protects the SQL layer and the parsing happens after [7].
Ranked by verification strength, evidence, and original report placement.
CVE-2026-77846 is a vulnerability in AshSqlite, the SQLite data layer used by the Ash Framework, that can allow attackers to access hidden or sensitive fields stored inside JSON and map columns when applications pass untrusted input to AshSqlite's get_path/2 functionality.
The Erlang Ecosystem Foundation's CNA issued the vulnerability entry for CVE-2026-77846 on August 30, 2026.
The affected package is ash_sqlite, with versions 0.1.2-rc.0 through before 0.2.18 affected and 0.2.18 listed as the patched release.
In affected releases AshSqlite generated JSON paths with the expression path = "$." <> Enum.join(right, "."), and the individual path segments were neither escaped nor quoted.
A key intended to represent the literal name private.secret could instead be interpreted as two JSON levels, and characters such as period, opening bracket, closing bracket and dollar sign could similarly alter JSONPath interpretation.
The GitHub advisory describes the flaw as "JSONPath injection in AshSqlite.SqlImplementation get_path", stating that an attacker controlling a get_path/2 segment can traverse nested JSON and disclose private fields.
Distinct publishers with included, body-backed reporting in this cluster.
1 article · August 31, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
Fabricated SQLite CVEs cleared NVD, CISA ADP and Red Hat before anyone ran the code1 distinct publisher
product
AWS buys the DuckDB company: what to price into an embedded dependency1 distinct publisher
build
Once the question needs a cube, you own the parser1 distinct publisher
product
AI writes the Dockerfile, and the pipeline is still checking the app code1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One retelling of very checkable artifacts
Everything reaches readers through The Cyber Express, but what it relays is unusually falsifiable: a dated CNA entry, a quoted advisory title, a version boundary at 0.2.18, the offending line of path construction, and a proof of concept whose captured SQL shows json_extract bound to $.private.secret. Any Elixir developer with the package can reproduce the shape of this in an afternoon. What's missing is evidence that anyone independent already did.
Patch exists; nobody counted the exposed
In a disclosure, adoption means two numbers: how much software carries the flaw and how much has moved off it. Our coverage supplies neither. What is concrete is the paperwork and the patch — a CNA entry on August 30 and 0.2.18 available to upgrade to. No download figures, no affected-deployment estimate, not one named application, and no claim that anyone has been exploited.
Drier than the flaw deserves
The Cyber Express declines both of the usual temptations of CVE coverage. It refuses the phrase SQL injection and explains why the distinction holds, and it volunteers that odd dots and brackets in logs "do not prove exploitation" — a caveat that costs the story its scariest sentence. Closing on the point that internal apps without untrusted callers are largely fine is not how hype is written. If anything, a working leak of a nested API key is being described more flatly than it warrants.
Traffic-shaped selection, clean claims
A security outlet gets reliable readership from CVE walkthroughs, and that shapes which flaws get written up more than what the write-up asserts. The parties behind the disclosure — the Erlang Ecosystem Foundation's CNA and the Ash maintainers — benefit from a fix that landed before the entry did, which is the healthy configuration of this incentive. Nobody in the story is selling a scanner, naming a research brand, or talking up a severity score.
Coherent story, single narrator
The mechanism, the version boundary and the leaked value interlock tightly enough that a retraction would be surprising — the proof of concept even runs on 0.2.17, the last vulnerable release, rather than something conveniently ancient. The reservation is structural rather than substantive: one narrator, no independent replication, and no severity or blast-radius figure against which to sanity-check the framing.