🇰🇷 한글 설명
Snipe-IT의 사전 정의된 키트 체크아웃 경로에서 FMCS(Full Multiple Company Support) 테넌트 격리가 제대로 적용되지 않는 취약점입니다. 공격자는 권한이 있는 사용자를 통해 다른 회사의 자산을 자신의 회사 소속 사용자에게 할당함으로써 회사 간 격리 정책을 우회할 수 있습니다.
💡 쉬운 설명
여러 회사를 관리하는 시스템에서 회사 간의 벽이 허물어져, A 회사의 물건을 B 회사 직원에게 마음대로 넘겨줄 수 있는 보안 구멍이 발견되었습니다. 이로 인해 회사 간 자산 관리의 독립성이 깨질 수 있습니다.
🇺🇸 원문 (English)
Snipe-IT's predefined kit checkout path does not enforce Full Multiple Company Support (FMCS) tenant isolation on the checkout target. Unlike the single, bulk, API, accessory, license and consumable checkout paths, App\Services\PredefinedKitCheckoutService never calls $item->canCheckoutTo($target); it only performs the actor-vs-item policy check and an availability check before persisting the checkout. With FMCS enabled, a non-superuser who belongs to at least two companies and holds the assets.checkout permission can POST to /kits/{kit}/checkout with a user_id belonging only to company B and have a company-A asset (and likewise kit licenses, consumables and accessories) assigned to that user, bypassing the company-mismatch check that blocks the same operation on every other checkout path. The issue is fixed in Snipe-IT 8.7.2; it was runtime-verified on v8.6.3 and code-inspected on v8.7.1, and the affected service has lacked the check since 2019, so earlier FMCS deployments are likely also affected.
📍 영향받는 시스템
Snipe-IT 8.7.2 미만 버전 (2019년 이후 FMCS 활성화된 모든 버전 포함)
⚔️ 공격 벡터
권한이 있는 사용자가 /kits/{kit}/checkout API에 타사 소속 사용자의 ID를 포함하여 POST 요청을 전송
🛡️ 대응 방법
Snipe-IT를 최신 보안 패치가 적용된 v8.7.2 이상 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 버전 정보가 8.7.2 미만인 경우 해당 취약점에 노출된 상태입니다.
curl -s http://<target-ip>/api/v1/version | grep -E '"version": "(8\.[0-7]\.[0-2]|[8-9]\..*)"'