Description
Improperly Controlled Modification of Dynamically-Determined Object Attributes vulnerability in ash-project ash allows a user to set the value of a private action argument on the bulk destroy and bulk update paths.

Action arguments declared with public?: false are meant to be set only by trusted server-side code (for example via Ash.Changeset.set_private_argument/3) and must not be settable from end-user input. CVE-2026-55736 fixed the non-bulk changeset path to strip private arguments from user-supplied parameter maps, but the bulk destroy and bulk update paths were not covered.

Ash.Actions.Destroy.Bulk.base_changeset/5 and Ash.Actions.Update.Bulk.base_changeset/5 match every key in the caller-supplied parameter map against all of the action's arguments with no public? check, then apply the matches to the base changeset. A caller who can submit parameters to a bulk destroy or bulk update action (for example through AshJsonApi, AshGraphql, or a controller that forwards request parameters to Ash.bulk_destroy/4 or Ash.bulk_update/4) can therefore set any private argument of that action, including one referenced by an arg(...) template in the action's changes or validations. Depending on how the application uses the argument (for example an acting_user_id driving authorization or record ownership, or audit metadata), this can lead to an integrity violation or privilege escalation.

The fix requires public? in the argument matching on both bulk paths; private arguments remain settable server-side via the :private_arguments option.

This issue affects ash: from 2.17.15 before 3.33.11.
Published: 2026-09-25
Score: 5.9 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Unauthorized modification of action arguments leading to potential privilege escalation and integrity violation
Action: Immediate Patch
AI Analysis

Impact

The vulnerability in Ash Project is an improperly controlled modification of dynamically‑determined object attributes that allows a user to set private action arguments in the bulk destroy and bulk update paths. These private arguments should only be set by trusted server‑side code. Because the bulk changeset functions apply every key from the caller‑supplied map without checking the public? flag, an attacker can supply values for arguments that are marked private, including arguments used in change logic or validations. This flaw can result in integrity violations or privilege escalation if the private argument controls authorization checks or audit metadata.

Affected Systems

This issue affects the Ash framework from version 2.17.15 up to but not including 3.33.11. The affected components are Ash.Actions.Destroy.Bulk.base_changeset/5 and Ash.Actions.Update.Bulk.base_changeset/5, as well as any API or controller that forwards parameters to Ash.bulk_destroy/4 or Ash.bulk_update/4. The vulnerability is identified as CWE-915, which represents an improper control of access to private information.

Risk and Exploitability

The CVSS score of 5.9 indicates a moderate severity. EPSS information is not available, and the vulnerability has not been listed in the CISA KEV catalog, suggesting limited known exploitation. The attack vector is inferred to be remote, via API endpoints such as AshJsonApi, AshGraphql, or custom controllers that expose bulk operations. An attacker with the ability to submit bulk parameters can set any private argument, potentially enabling unauthorized data manipulation. The risk level is moderate but should be mitigated promptly by applying the vendor provided fix and enforcing input validation for bulk paths.

Generated by OpenCVE AI on September 25, 2026 at 09:17 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Ash to version 3.33.11 or later to apply the vendor‑provided public? check fix for bulk changeset functions.
  • Restrict bulk destroy and bulk update endpoints to disallow unrestricted parameter passing; validate or whitelist accepted keys before forwarding to Ash.bulk_destroy/4 or Ash.bulk_update/4.
  • Refactor custom changesets or controllers so that private arguments are set only via Ash.Changeset.set_private_argument/3 and never from user input.
  • If upgrading is not immediately possible, apply a temporary patch to Ash.Actions.Destroy.Bulk.base_changeset/5 and Ash.Actions.Update.Bulk.base_changeset/5 to filter out private arguments from the caller‑supplied map or add a public? check before applying matches.

Generated by OpenCVE AI on September 25, 2026 at 09:17 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 25 Sep 2026 14:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Fri, 25 Sep 2026 07:15:00 +0000

Type Values Removed Values Added
Description Improperly Controlled Modification of Dynamically-Determined Object Attributes vulnerability in ash-project ash allows a user to set the value of a private action argument on the bulk destroy and bulk update paths. Action arguments declared with public?: false are meant to be set only by trusted server-side code (for example via Ash.Changeset.set_private_argument/3) and must not be settable from end-user input. CVE-2026-55736 fixed the non-bulk changeset path to strip private arguments from user-supplied parameter maps, but the bulk destroy and bulk update paths were not covered. Ash.Actions.Destroy.Bulk.base_changeset/5 and Ash.Actions.Update.Bulk.base_changeset/5 match every key in the caller-supplied parameter map against all of the action's arguments with no public? check, then apply the matches to the base changeset. A caller who can submit parameters to a bulk destroy or bulk update action (for example through AshJsonApi, AshGraphql, or a controller that forwards request parameters to Ash.bulk_destroy/4 or Ash.bulk_update/4) can therefore set any private argument of that action, including one referenced by an arg(...) template in the action's changes or validations. Depending on how the application uses the argument (for example an acting_user_id driving authorization or record ownership, or audit metadata), this can lead to an integrity violation or privilege escalation. The fix requires public? in the argument matching on both bulk paths; private arguments remain settable server-side via the :private_arguments option. This issue affects ash: from 2.17.15 before 3.33.11.
Title Private action arguments can be set by user input on the bulk destroy and bulk update paths in Ash
First Time appeared Ash-project
Ash-project ash
Weaknesses CWE-915
CPEs cpe:2.3:a:ash-project:ash:*:*:*:*:*:*:*:*
Vendors & Products Ash-project
Ash-project ash
References
Metrics cvssV4_0

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


cve-icon MITRE

Status: PUBLISHED

Assigner: EEF

Published:

Updated: 2026-09-25T13:26:42.369Z

Reserved: 2026-09-19T16:00:02.004Z

Link: CVE-2026-93477

cve-icon Vulnrichment

Updated: 2026-09-25T13:26:33.691Z

cve-icon NVD

Status : Deferred

Published: 2026-09-25T07:16:56.163

Modified: 2026-09-25T14:17:23.093

Link: CVE-2026-93477

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-25T10:15:06Z

Weaknesses
  • CWE-915

    Improperly Controlled Modification of Dynamically-Determined Object Attributes