Description
Loop with Unreachable Exit Condition (Infinite Loop) vulnerability in ash-project ash_ai allows an attacker who can influence a model's output to hang the tool loop and drive unbounded, repeated model requests.

AshAi.ToolLoop classifies a model response of :tool_calls, then filters the calls through normalize_tool_calls/2 and unprocessed_tool_calls/2. Both can empty the list: a call missing a valid name, or one reusing a tool_call_id that already has a result in history, is dropped. With an empty list the loop appended nothing and recursed with a byte-identical message list, so the conversation never advanced and the same request was re-sent every iteration. Under the supported max_iterations: :infinity this never terminated; otherwise it exhausted the full budget. Prompt-injected content can make the model re-emit a spent tool_call_id. The fix treats an empty post-filter list as terminal.

This issue affects ash_ai: from 0.6.0 before 1.0.0.
Published: 2026-08-31
Score: 6 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

A flaw in the AshAi.ToolLoop component causes an infinite loop when all proposed tool calls are filtered out, resulting in continuous, identical requests being sent to the model and no progress in the conversation. The weakness is an infinite loop (CWE-835). An attacker who can influence the model's output, such as through prompt injection that produces missing or duplicate tool_call_ids, can trigger the loop. The consequence is a denial of service that consumes computational resources and can block further processing, affecting the availability of the application but not confidentiality or integrity.

Affected Systems

The vulnerability affects the AshProject Ash_ai library, versions 0.6.0 through 0.9.x. Upgrading to 1.0.0 or later removes the flaw.

Risk and Exploitability

The CVSS score of 6.0 signals a medium‑severity risk. EPSS data is not available, and the vulnerability is not listed in the CISA KEV catalog. The attack requires the attacker to control or influence the model’s output to produce invalid or duplicate tool calls. While this does not readily lend itself to arbitrary code execution, the resulting denial of service can disrupt services that rely on Ash_ai and could be exploited in environments where the model output can be injected. The absence of an exploit probability metric suggests uncertainty, but the existence of an exploitable infinite loop warrants attention.

Generated by OpenCVE AI on August 31, 2026 at 02:22 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade the Ash_ai library to version 1.0.0 or newer, which handles empty post‑filter tool‑call lists as a terminating condition.
  • If an immediate upgrade is not possible, set a finite max_iterations value for the tool loop (e.g., 50) so that the loop exits after a bounded number of iterations.
  • Add defensive validation to ensure that each tool call supplied to the loop contains a valid name and a unique tool_call_id before filtering, thereby preventing an empty list that could trigger the loop.
  • Monitor logs for repeated identical messages or excessive model requests; trigger an alert or safe state if such a pattern is detected.

Generated by OpenCVE AI on August 31, 2026 at 02:22 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 31 Aug 2026 01:45:00 +0000

Type Values Removed Values Added
Description Loop with Unreachable Exit Condition (Infinite Loop) vulnerability in ash-project ash_ai allows an attacker who can influence a model's output to hang the tool loop and drive unbounded, repeated model requests. AshAi.ToolLoop classifies a model response of :tool_calls, then filters the calls through normalize_tool_calls/2 and unprocessed_tool_calls/2. Both can empty the list: a call missing a valid name, or one reusing a tool_call_id that already has a result in history, is dropped. With an empty list the loop appended nothing and recursed with a byte-identical message list, so the conversation never advanced and the same request was re-sent every iteration. Under the supported max_iterations: :infinity this never terminated; otherwise it exhausted the full budget. Prompt-injected content can make the model re-emit a spent tool_call_id. The fix treats an empty post-filter list as terminal. This issue affects ash_ai: from 0.6.0 before 1.0.0.
Title AshAi tool loop never terminates when all tool calls are filtered out, enabling denial of service
First Time appeared Ash-project
Ash-project ash Ai
Weaknesses CWE-835
CPEs cpe:2.3:a:ash-project:ash_ai:*:*:*:*:*:*:*:*
Vendors & Products Ash-project
Ash-project ash Ai
References
Metrics cvssV4_0

{'score': 6, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N'}


Subscriptions

Ash-project Ash Ai
cve-icon MITRE

Status: PUBLISHED

Assigner: EEF

Published:

Updated: 2026-08-31T01:07:49.185Z

Reserved: 2026-08-30T20:00:01.852Z

Link: CVE-2026-82579

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-31T02:17:02.270

Modified: 2026-08-31T02:17:02.270

Link: CVE-2026-82579

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-31T02:30:18Z

Weaknesses
  • CWE-835

    Loop with Unreachable Exit Condition ('Infinite Loop')