CVE-2026-93477: CWE-915 Improperly Controlled Modification of Dynamically-Determined Object Attributes in ash-project ash
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.
AI Analysis
Technical Summary
This vulnerability arises because the bulk destroy and bulk update functions in ash-project ash do not check the public? attribute of action arguments when matching user-supplied parameters. As a result, private arguments (marked with public?: false) can be set by end-users through these bulk operations, bypassing intended access controls. This can affect authorization or audit metadata if such private arguments control acting user IDs or ownership. The flaw was previously fixed for non-bulk changeset paths (CVE-2026-55736), but the bulk paths remained vulnerable until fixed in versions 3.33.11 and later.
Potential Impact
An attacker able to submit parameters to bulk destroy or bulk update actions can set private arguments that should only be modifiable by server-side code. This can lead to integrity violations or privilege escalation, such as unauthorized modification of acting user IDs or audit metadata. The vulnerability has a medium severity with a CVSS 4.0 score of 5.9, reflecting local attack vector with low complexity but potential high impact on integrity.
Mitigation Recommendations
A fix is available in ash versions 3.33.11 and later, which enforces the public? attribute check on argument matching in bulk destroy and bulk update paths. Users should upgrade to version 3.33.11 or later to remediate this vulnerability. Until then, avoid exposing bulk destroy or bulk update actions to untrusted input or implement additional access controls to prevent unauthorized parameter submission.
CVE-2026-93477: CWE-915 Improperly Controlled Modification of Dynamically-Determined Object Attributes in ash-project ash
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.
CVSS v4.0
Score 5.9medium
Affected software
ash-project
ash
ash-project
ash
cpe:2.3:a:ash-project:ash:*:*:*:*:*:*:*:*Run on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.
Weaknesses
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
This vulnerability arises because the bulk destroy and bulk update functions in ash-project ash do not check the public? attribute of action arguments when matching user-supplied parameters. As a result, private arguments (marked with public?: false) can be set by end-users through these bulk operations, bypassing intended access controls. This can affect authorization or audit metadata if such private arguments control acting user IDs or ownership. The flaw was previously fixed for non-bulk changeset paths (CVE-2026-55736), but the bulk paths remained vulnerable until fixed in versions 3.33.11 and later.
Potential Impact
An attacker able to submit parameters to bulk destroy or bulk update actions can set private arguments that should only be modifiable by server-side code. This can lead to integrity violations or privilege escalation, such as unauthorized modification of acting user IDs or audit metadata. The vulnerability has a medium severity with a CVSS 4.0 score of 5.9, reflecting local attack vector with low complexity but potential high impact on integrity.
Mitigation Recommendations
A fix is available in ash versions 3.33.11 and later, which enforces the public? attribute check on argument matching in bulk destroy and bulk update paths. Users should upgrade to version 3.33.11 or later to remediate this vulnerability. Until then, avoid exposing bulk destroy or bulk update actions to untrusted input or implement additional access controls to prevent unauthorized parameter submission.
Technical Details
- Data Version
- 5.2
- Assigner Short Name
- EEF
- Date Reserved
- 2026-09-19T16:00:02.004Z
- Cvss Version
- 4.0
- State
- PUBLISHED
Threat ID: 6ab62039f7a7c541067abf27
Added to database: 09/25/2026, 07:18:17 UTC
Last enriched: 09/25/2026, 07:32:57 UTC
Last updated: 09/26/2026, 02:48:05 UTC
Views: 22
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.