🇰🇷 한글 설명
Snipe-IT 8.6.3 이하 버전에서 REST API를 통해 사용자 레코드를 저장할 때 회사 할당 권한을 적절히 검증하지 않는 취약점이 발견되었습니다. 공격자가 권한이 없는 회사의 ID를 포함하여 요청을 보낼 경우, 데이터베이스에 사용자 정보가 저장된 후 필터링이 이루어져 사용자가 권한 범위를 벗어난 회사에 소속되거나 'floater' 상태로 생성될 수 있습니다.
💡 쉬운 설명
관리자 권한이 부족한 사용자가 시스템의 규칙을 어기고 다른 회사 소속의 사용자를 마음대로 만들거나 옮길 수 있는 보안 결함입니다. 이로 인해 회사 간의 데이터 경계가 무너지고 보안 관리에 구멍이 생길 수 있습니다.
🇺🇸 원문 (English)
Snipe-IT versions <= 8.6.3 (fixed in 8.7.0) do not validate company assignment authorization before persisting user records via the REST API. In Api\UsersController::store() and ::update(), the user record is filled from the request and saved before the requested company_id / company_ids[] values are filtered against the actor's permitted companies (Company::getIdsForCurrentUser()). On installs using Full Multiple Companies Support (FMCS), a non-superuser holding users.create (or users.edit on a target user) can submit company identifiers for companies outside their scope — including a mix of permitted and foreign ids — causing the account row to be committed to the database before authorization is checked. Where null_company_is_floater=1 is set, the post-hoc filter leaves an empty company pivot and the account is persisted as a "floater" with cross-company visibility, allowing creation or relocation of user accounts across tenant boundaries.
📍 영향받는 시스템
Snipe-IT versions <= 8.6.3
⚔️ 공격 벡터
REST API의 UsersController를 통해 권한이 없는 company_id를 포함한 요청을 전송
🛡️ 대응 방법
Snipe-IT를 최신 보안 패치가 적용된 버전인 8.7.0 이상으로 업데이트하십시오.
🔧 검증 코드
설치된 Snipe-IT의 버전을 확인하여 8.7.0 미만인 경우 취약한 상태입니다.
php artisan --version 2>/dev/null || echo 'Check Snipe-IT version via application UI or composer.json'