🇰🇷 한글 설명
Snipe-IT 8.6.3 이하 버전에서 이미지 업로드 시 저장 작업의 성공 여부를 확인하지 않아 발생하는 문제입니다. 저장 실패 시에도 기존 이미지를 삭제하고 데이터베이스 정보를 갱신하여, 기존 이미지가 손실되고 데이터베이스와 실제 파일 간의 불일치가 발생합니다.
💡 쉬운 설명
이미지를 올릴 때 저장 공간에 문제가 생기면, 새 이미지는 저장되지 않으면서 기존에 있던 이미지까지 지워버리는 오류입니다. 이로 인해 데이터베이스에는 파일 정보가 남아있지만 실제 파일은 없는 상태가 되어 데이터가 손상될 수 있습니다.
🇺🇸 원문 (English)
Snipe-IT versions <= 8.6.3 (fixed in 8.7.0) do not check the return value of storage write operations in ImageUploadRequest::handleImages(). Because Laravel's default disk mode does not throw on failure, a silently failed Storage::disk('public')->put(...) call still caused the application to delete the previous image via deleteExistingImage() and to reassign and persist the model's image reference to the new filename, destroying the existing image and leaving the database row pointing at a file that was never written. A mirror problem existed in deleteExistingImage(), where a failed Storage::delete() still nulled the model's image field, orphaning the file on disk. The condition is not directly attacker-controlled: it is triggered when any legitimate authenticated user submits an image upload while the storage backend transiently fails (for example an S3 network error, a local filesystem permission problem, or quota exhaustion). The result is unrecoverable loss of the prior image and a durable inconsistency between the database and disk that requires manual reconciliation. All models whose controllers route through ImageUploadRequest::handleImages (assets, asset models, users, companies, manufacturers, locations, categories, suppliers, departments, and other image-carrying models) are affected.
📍 영향받는 시스템
Snipe-IT versions <= 8.6.3
⚔️ 공격 벡터
직접적인 공격은 어려우나, 저장소 네트워크 오류나 권한 문제 등 시스템 장애 발생 시 인증된 사용자의 업로드 동작에 의해 트리거됨
🛡️ 대응 방법
Snipe-IT를 8.7.0 이상의 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 버전이 8.6.3 이하인 경우 해당 취약점에 노출된 상태입니다.
php artisan snipeit:version 2>/dev/null | grep -E '8(\.([0-9]+))?'
📊 CVSS Vector String
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:H/A:L
💻 영향받는 소프트웨어
Cisco Crosswork Network Controller