🇰🇷 한글 설명
ash-project의 ash_postgres 라이브러리에서 발생하는 체크되지 않은 반환 값 취약점입니다. 테넌트 이름을 변경할 때 기존 테넌트의 스키마 이름과 충돌하더라도 오류를 감지하지 못해, 공격자가 다른 테넌트의 데이터에 접근할 수 있는 권한을 획득할 수 있습니다.
💡 쉬운 설명
이름 변경 작업이 실패했음에도 시스템이 성공했다고 착각하여 발생하는 문제입니다. 이로 인해 사용자가 다른 사람의 데이터 저장 공간에 연결되어 남의 정보를 볼 수 있게 됩니다.
🇺🇸 원문 (English)
Unchecked Return Value vulnerability in ash-project ash_postgres allows a user who can drive a tenant rename to a name that collides with an existing tenant's schema to have their tenant record repointed at that other tenant's live schema, gaining access to its data.
AshPostgres.MultiTenancy.rename_tenant/3 issues the ALTER SCHEMA ... RENAME TO ... with the non-raising Ecto.Adapters.SQL.query/2, discards its {:ok, _} | {:error, _} result, and unconditionally returns :ok. PostgreSQL rejects the rename when the target schema already exists (and on insufficient privilege or lock timeout), but that failure never reaches the caller. The calling manage_tenant update action therefore sees success and commits the tenant row with the new name, which is the schema of a different existing tenant, so subsequent reads and writes for that tenant run against the other tenant's data.
This issue affects ash_postgres: from 0.25.0 before 2.13.0.
📍 영향받는 시스템
ash_postgres: 0.25.0 버전부터 2.13.0 미만 버전
⚔️ 공격 벡터
기존 테넌트의 스키마 이름과 동일한 이름으로 자신의 테넌트 이름을 변경 시도
🛡️ 대응 방법
ash_postgres 라이브러리를 2.13.0 이상의 최신 버전으로 업데이트
🔧 검증 코드
출력된 버전이 0.25.0보다 낮거나 2.13.0보다 낮은지 확인
mix deps info ash_postgres | grep -E 'ash_postgres \([0-9]+\.[0-9]+\.[0-9]+\)'