🇰🇷 한글 설명
ash-project의 ash 라이브러리에서 대량 삭제(bulk destroy) 및 대량 업데이트(bulk update) 경로 시 동적으로 결정되는 객체 속성을 부적절하게 제어하는 취약점이 발견되었습니다. 공격자는 사용자 입력값을 통해 서버 측에서만 설정되어야 하는 비공개(private) 액션 인자를 조작할 수 있습니다. 이는 권한 상승이나 데이터 무결성 침해로 이어질 수 있습니다.
💡 쉬운 설명
관리자만 건드릴 수 있는 비밀 설정값을 일반 사용자가 몰래 바꿔치기할 수 있는 보안 구멍이 발견되었습니다. 이를 통해 사용자가 자신의 권한을 높이거나 다른 사람의 데이터를 마음대로 수정할 위험이 있습니다.
🇺🇸 원문 (English)
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.
📍 영향받는 시스템
ash: 2.17.15 버전부터 3.33.11 미만 버전
⚔️ 공격 벡터
AshJsonApi, AshGraphql 또는 컨트롤러를 통해 대량 삭제/업데이트 요청 시 비공개 인자를 포함한 파라미터를 전송
🛡️ 대응 방법
ash 라이브러리를 3.33.11 이상의 최신 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 ash의 버전이 3.33.11 미만인지 확인하십시오.
mix deps info ash | grep -E 'ash \([0-9.]+'
💻 영향받는 소프트웨어
IBM WebSphere Application Server