CVE-2026-115635 Autorización incorrecta en AshPostgres con upsert omitido y return_skipped_upsert?
Cuando un upsert con return_skipped_upsert?: true se omite, AshPostgres.DataLayer relee la fila existente por la identidad del upsert en do_bulk_create/3 y upsert/4 sin aplicar la multitenencia por atributo del recurso. En un recurso con estrategia :attribute puede coincidir y devolver la fila de otro tenant con los mismos valores de identidad, exponiendo sus campos. Afecta a ash_postgres desde 2.6.22 hasta antes de 2.15.2.
CVSS 4.0
- Probabilidad de explotación · EPSS del 09/110,2 % · percentil 15
- Explotada activamenteNo confirmada
- Exploit públicoNo conocido
Afectados
ash-project ash_postgres
desde 2.6.22 hasta antes de 2.15.2
ash-project ash_postgres
desde af0903f1380468bbe1b61fe65acb33772b5e24a5 hasta antes de 8aa81220c401cae412d21078d11b3519ea25d3a9
Qué hacer
- Verificá si usás ash_postgres y en qué versión.
- Actualizá a la versión corregida que indique el fabricante en su aviso o aplicá su mitigación.
- Revisá registros y accesos de los sistemas expuestos para descartar un uso previo.
Calculadora CVSS
CVSS 4.0 · 6.0 MEDIA
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
- Vector de ataqueRed
- Complejidad del ataqueBaja
- Requisitos del ataquePresentes
- Privilegios requeridosBajos
- Interacción del usuarioNinguna
- Confidencialidad (sistema vulnerable)Alta
- Integridad (sistema vulnerable)Ninguna
- Disponibilidad (sistema vulnerable)Ninguna
- Confidencialidad (sistemas posteriores)Ninguna
- Integridad (sistemas posteriores)Ninguna
- Disponibilidad (sistemas posteriores)Ninguna
Descripción original
Incorrect Authorization vulnerability in ash-project ash_postgres allows a user to read another tenant's record through a skipped upsert.
When Ash.bulk_create/4 or a single create runs as an upsert with return_skipped_upsert?: true and the upsert is skipped (for example because its upsert_condition does not hold), AshPostgres.DataLayer reads the existing row back by the upsert identity in do_bulk_create/3 and upsert/4. That lookup did not apply the resource's attribute multitenancy, so on a resource using strategy :attribute it could match and return the row of another tenant with the same identity values, exposing its fields to the caller.
This issue affects ash_postgres: from 2.6.22 before 2.15.2.
Referencias (5)
- github.com/ash-project/ash/security/advisories/GHSA-36hg-wwp2-fg8w
- cna.erlef.org/cves/CVE-2026-115635.html
- osv.dev/vulnerability/EEF-CVE-2026-115635
- github.com/ash-project/ash_postgres/commit/af0903f1380468bbe1b61fe65acb33772b5e24a5
- github.com/ash-project/ash_postgres/commit/8aa81220c401cae412d21078d11b3519ea25d3a9
Resumen traducido automáticamente de la descripción original. Fuente: Nureq Monitor. Cómo funciona.