Description
Ash.Reactor change step fails open, skipping a change when its where guard raises
Summary
Not Failing Securely (Failing Open) vulnerability in ash-project ash skips an Ash.Reactor change when the guard controlling it raises, so a change meant to run does not.
An Ash.Reactor change step can be gated by where validations that decide whether the change runs. Ash.Reactor.ChangeStep (lib/ash/reactor/steps/change_step.ex) evaluated those guards in apply_where_clauses/3, and apply_validation rescued any exception into {:error, error}. The reduce treated that identically to a guard whose condition was simply not met and bypassed the change. So when a guard raises (for example on attacker-influenced input), a change that enforces a security-relevant modification is skipped rather than failing the step. The fix distinguishes a raised exception (now {:raised, error}) and halts the step with an error, failing closed.
This issue affects ash: from 3.0.0-rc.17 before 3.32.2.
Mitigation
Minimal update. May introduce new vulnerabilities or breaking changes.
|
 hex | | =3.0.0 || =3.0.0-rc.17 || =3.0.0-rc.18 || =3.0.0-rc.19 || =3.0.0-rc.20 || =3.0.0-rc.21 || =3.0.0-rc.22 || =3.0.0-rc.23 || =3.0.0-rc.24 || =3.0.0-rc.25 || =3.0.0-rc.26 || =3.0.0-rc.27 || =3.0.0-rc.28 || =3.0.0-rc.29 || =3.0.0-rc.31 || =3.0.0-rc.32 || =3.0.0-rc.33 || =3.0.0-rc.34 || =3.0.0-rc.35 || =3.0.0-rc.36 || =3.0.0-rc.37 || =3.0.0-rc.38 || =3.0.0-rc.39 || =3.0.0-rc.40 || =3.0.0-rc.41 || =3.0.0-rc.42 || =3.0.0-rc.43 || =3.0.0-rc.44 || =3.0.0-rc.45 || =3.0.0-rc.46 || =3.0.1 || =3.0.10 || =3.0.11 || =3.0.12 || =3.0.13 || =3.0.14 || =3.0.15 || =3.0.16 || =3.0.2 || =3.0.3 || =3.0.4 || =3.0.5 || =3.0.6 || =3.0.7 || =3.0.8 || =3.0.9 || =3.1.0 || =3.1.1 || =3.1.2 || =3.1.3 || =3.1.4 || =3.1.5 || =3.1.6 || =3.1.7 || =3.1.8 || =3.10.0 || =3.10.1 || =3.11.0 || =3.11.1 || =3.11.2 || =3.11.3 || =3.12.0 || =3.13.0 || =3.13.1 || =3.13.2 || =3.14.0 || =3.14.1 || =3.15.0 || =3.16.0 || =3.17.0 || =3.17.1 || =3.18.0 || =3.19.0 || =3.19.1 || =3.19.2 || =3.19.3 || =3.2.0 || =3.2.1 || =3.2.2 || =3.2.3 || =3.2.4 || =3.2.5 || =3.2.6 || =3.20.0 || =3.21.0 || =3.21.1 || =3.21.2 || =3.21.3 || =3.22.0 || =3.22.1 || =3.22.2 || =3.23.0 || =3.23.1 || =3.24.0 || =3.24.1 || =3.24.2 || =3.24.3 || =3.24.4 || =3.24.5 || =3.24.6 || =3.24.7 || =3.25.0 || =3.25.1 || =3.25.2 || =3.26.0 || =3.27.0 || =3.27.1 || =3.27.2 || =3.27.3 || =3.27.4 || =3.27.5 || =3.27.6 || =3.27.7 || =3.27.8 || =3.28.0 || =3.29.0 || =3.29.1 || =3.29.2 || =3.29.3 || =3.3.0 || =3.3.1 || =3.3.2 || =3.3.3 || =3.30.0 || =3.30.1 || =3.31.0 || =3.31.1 || =3.31.2 || =3.31.3 || =3.32.0 || =3.32.1 || =3.4.0 || =3.4.1 || =3.4.10 || =3.4.11 || =3.4.12 || =3.4.13 || =3.4.14 || =3.4.15 || =3.4.16 || =3.4.17 || =3.4.18 || =3.4.19 || =3.4.2 || =3.4.20 || =3.4.21 || =3.4.22 || =3.4.23 || =3.4.24 || =3.4.25 || =3.4.26 || =3.4.27 || =3.4.28 || =3.4.29 || =3.4.3 || =3.4.30 || =3.4.31 || =3.4.32 || =3.4.33 || =3.4.34 || =3.4.35 || =3.4.36 || =3.4.37 || =3.4.38 || =3.4.39 || =3.4.4 || =3.4.40 || =3.4.41 || =3.4.42 || =3.4.43 || =3.4.44 || =3.4.45 || =3.4.46 || =3.4.47 || =3.4.48 || =3.4.49 || =3.4.5 || =3.4.50 || =3.4.51 || =3.4.52 || =3.4.53 || =3.4.54 || =3.4.55 || =3.4.56 || =3.4.57 || =3.4.58 || =3.4.59 || =3.4.6 || =3.4.60 || =3.4.61 || =3.4.62 || =3.4.63 || =3.4.64 || =3.4.65 || =3.4.66 || =3.4.67 || =3.4.68 || =3.4.69 || =3.4.7 || =3.4.70 || =3.4.71 || =3.4.72 || =3.4.73 || =3.4.74 || =3.4.8 || =3.4.9 || =3.5.0 || =3.5.1 || =3.5.10 || =3.5.11 || =3.5.12 || =3.5.13 || =3.5.14 || =3.5.15 || =3.5.16 || =3.5.17 || =3.5.18 || =3.5.19 || =3.5.2 || =3.5.20 || =3.5.21 || =3.5.22 || =3.5.23 || =3.5.24 || =3.5.25 || =3.5.26 || =3.5.27 || =3.5.28 || =3.5.29 || =3.5.3 || =3.5.30 || =3.5.31 || =3.5.32 || =3.5.33 || =3.5.34 || =3.5.35 || =3.5.36 || =3.5.37 || =3.5.38 || =3.5.39 || =3.5.4 || =3.5.40 || =3.5.41 || =3.5.42 || =3.5.43 || =3.5.5 || =3.5.6 || =3.5.7 || =3.5.8 || =3.5.9 || =3.6.0 || =3.6.1 || =3.6.2 || =3.6.3 || =3.7.0 || =3.7.1 || =3.7.2 || =3.7.3 || =3.7.4 || =3.7.5 || =3.7.6 || =3.8.0 || =3.9.0 || >=3.0.0-rc.17 <3.32.2 | 3.32.2 |