key を無検証で受理
共通サーバーアクション apps/user/actions/s3/get-upload-url.ts は、
認証チェック(action() ラッパー)は行うが、クライアントから渡される key を一切検証せず、そのまま presigned PUT URL を発行している。
このため認証済みユーザーであれば、バケット内の任意のオブジェクトキーに対する書き込み用URLを取得でき、
他組織・他ユーザーの画像を含む任意オブジェクトを上書きし得る。
対象
apps/user/actions/s3/get-upload-url.ts(共通アクション).../solid-floor-plans/new/_components/solid-floor-plan-create-form、components/need-annotation-in-image-switch
補足:key は MD5(画像データ) によるコンテンツアドレスのため衝突は基本的に「同一内容=同一キー」で実害は出にくいが、
任意キーを指定できること自体が問題(接頭辞外への書き込み・上書きが原理上可能)。
need-annotation)を踏襲した範囲にとどめたため。solid-floor-plans/ に固定しており、悪用には認証済みアカウントと意図的な改変が必要。getUploadUrl を分け、クライアントは mimeType とハッシュのみ渡す)か、ErrorCode で失敗させる。中。即時の実害は限定的だが、認証済みユーザーによる任意キー書き込みを許す設計であり、 アップロード経路を増やす前にサーバー側のキー管理・検証へ寄せておきたい。