CVE-2026-118391 Crecimiento ilimitado de la caché de consultas en Ecto por rutas JSON y splice
Una vulnerabilidad de asignación de recursos sin límites ni control en ecto de elixir-ecto permite a un atacante remoto no autenticado agotar la memoria de la aplicación y del servidor de base de datos enviando solicitudes con claves JSON o longitudes de lista distintas que la aplicación interpola en json_extract_path/2, field[^key] o splice/1. Ecto cachea consultas preparadas por repositorio en una tabla ETS sin límite de tamaño ni expulsión, y con ecto_sql cada entrada es además una sentencia preparada nueva en…
CVSS 4.0
- Probabilidad de explotación · EPSS del 09/110,5 % · percentil 42
- Explotada activamenteNo confirmada
- Exploit públicoNo conocido
Afectados
elixir-ecto ecto
desde 3.4.0 hasta antes de 3.14.3
elixir-ecto ecto
desde cb2f03964dac324a9771f84f5088e395326e6de8 hasta antes de eef014ad090d27d1a5b69c0e32a50eabd44ab3bb
Qué hacer
- Verificá si usás ecto 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 · 8.9 ALTA
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:H
- Vector de ataqueRed
- Complejidad del ataqueBaja
- Requisitos del ataquePresentes
- Privilegios requeridosNinguno
- Interacción del usuarioNinguna
- Confidencialidad (sistema vulnerable)Ninguna
- Integridad (sistema vulnerable)Ninguna
- Disponibilidad (sistema vulnerable)Alta
- Confidencialidad (sistemas posteriores)Ninguna
- Integridad (sistemas posteriores)Ninguna
- Disponibilidad (sistemas posteriores)Alta
Descripción original
Allocation of Resources Without Limits or Throttling vulnerability in elixir-ecto ecto allows an unauthenticated remote attacker to exhaust memory in the application and in the database server by sending requests with distinct JSON keys or list lengths where the application interpolates them into json_extract_path/2, field[^key] or splice/1. Ecto caches prepared queries per repository in an ETS table with no size limit and no eviction. Interpolated JSON path elements become part of the query expression instead of its parameters, and splice/1 expands into one placeholder per element, so every distinct key or list length creates a new cache entry. With ecto_sql each entry is also a new prepared statement on the database connection that runs it. None of this memory is released until the processes restart.
This issue affects ecto: from 3.4.0 before 3.14.3.
Referencias (11)
- github.com/elixir-ecto/ecto/security/advisories/GHSA-cxjx-vmm2-qr8r
- cna.erlef.org/cves/CVE-2026-118391.html
- osv.dev/vulnerability/EEF-CVE-2026-118391
- github.com/elixir-ecto/ecto/commit/d0e97d8a6e274c81c25fbf08087da8d8b9bae0ea
- ecto.hexdocs.pm/Ecto.Query.API.html#json_extract_path/2
- ecto.hexdocs.pm/Ecto.Query.API.html#splice/1
- github.com/elixir-ecto/ecto/commit/eb03f45b999e2bf67ffae92811233eb6e56dba55
- github.com/elixir-ecto/ecto/issues/4470
- github.com/elixir-ecto/ecto/issues/1031
- github.com/elixir-ecto/ecto/commit/cb2f03964dac324a9771f84f5088e395326e6de8
- github.com/elixir-ecto/ecto/commit/eef014ad090d27d1a5b69c0e32a50eabd44ab3bb
Resumen traducido automáticamente de la descripción original. Fuente: Nureq Monitor. Cómo funciona.