🔍 CVE-2024-56631

7.8
CVSS Score
HIGH
2024-12-27
2026-10-15 01:19
✅ 완료

🇰🇷 한글 설명

Linux kernel의 SCSI sg 드라이버에서 sg_release() 함수의 use-after-free 취약점입니다. kref_put() 호출로 sfp 객체가 해제된 후 mutex 언락 시 이미 해제된 메모리를 참조하여 권한 상승이나 시스템 안정성 문제를 야기합니다. 함수 내 작업 순서를 변경하여 수정됩니다.

💡 쉬운 설명

SCSI 드라이버가 메모리를 해제한 후 그 메모리를 다시 사용하려고 할 때 발생하는 버그입니다. 순서를 바꿔서 메모리가 해제되기 전에 모든 참조를 마치도록 수정했습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: scsi: sg: Fix slab-use-after-free read in sg_release() Fix a use-after-free bug in sg_release(), detected by syzbot with KASAN: BUG: KASAN: slab-use-after-free in lock_release+0x151/0xa30 kernel/locking/lockdep.c:5838 __mutex_unlock_slowpath+0xe2/0x750 kernel/locking/mutex.c:912 sg_release+0x1f4/0x2e0 drivers/scsi/sg.c:407 In sg_release(), the function kref_put(&sfp->f_ref, sg_remove_sfp) is called before releasing the open_rel_lock mutex. The kref_put() call may decrement the reference count of sfp to zero, triggering its cleanup through sg_remove_sfp(). This cleanup includes scheduling deferred work via sg_remove_sfp_usercontext(), which ultimately frees sfp. After kref_put(), sg_release() continues to unlock open_rel_lock and may reference sfp or sdp. If sfp has already been freed, this results in a slab-use-after-free error. Move the kref_put(&sfp->f_ref, sg_remove_sfp) call after unlocking the open_rel_lock mutex. This ensures: - No references to sfp or sdp occur after the reference count is decremented. - Cleanup functions such as sg_remove_sfp() and sg_remove_sfp_usercontext() can safely execute without impacting the mutex handling in sg_release(). The fix has been tested and validated by syzbot. This patch closes the bug reported at the following syzkaller link and ensures proper sequencing of resource cleanup and mutex operations, eliminating the risk of use-after-free errors in sg_release().

📍 영향받는 시스템

Linux kernel 6.13 이전 버전 (6.1~6.12 LTS 버전 포함)

⚔️ 공격 벡터

로컬 공격자가 SCSI 장치 파일을 열었다가 특정 조건에서 닫을 때 권한 상승 또는 DoS 가능

🛡️ 대응 방법

Linux kernel을 6.13 이상 버전으로 업데이트하거나 배포판 보안 패치 적용

🔧 검증 코드

커널 버전이 6.13 이상이면 'Safe', 그 이하면 'Check update'를 출력합니다. LTS 버전의 경우 배포판 보안 업데이트 상태를 별도 확인하세요.

Shell / Script
uname -r | awk -F. '{if($1>6 || ($1==6 && $2>=13)) print "Safe"; else print "Check update"}'

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel