🇰🇷 한글 설명
리눅스 커널의 md(Multiple Device) 드라이버에서 mddev_init 함수 호출 시 bioset이 초기화되지 않아 발생하는 NULL 포인터 역참조 취약점입니다. sysfs를 통해 메타데이터를 업데이트하는 과정에서 I/O 작업이 필요할 때, 초기화되지 않은 bioset을 참조하여 커널 패닉이 발생할 수 있습니다.
💡 쉬운 설명
리눅스 시스템에서 저장 장치를 관리하는 기능 중 특정 설정을 변경할 때 시스템이 갑자기 멈추거나 꺼질 수 있는 오류입니다. 시스템 관리자가 특정 명령을 내릴 때 커널이 잘못된 메모리 주소를 참조하여 발생하는 문제입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
md: init bioset in mddev_init
IO operations may be needed before md_run(), such as updating metadata
after writing sysfs. Without bioset, this triggers a NULL pointer
dereference as below:
BUG: kernel NULL pointer dereference, address: 0000000000000020
Call Trace:
md_update_sb+0x658/0xe00
new_level_store+0xc5/0x120
md_attr_store+0xc9/0x1e0
sysfs_kf_write+0x6f/0xa0
kernfs_fop_write_iter+0x141/0x2a0
vfs_write+0x1fc/0x5a0
ksys_write+0x79/0x180
__x64_sys_write+0x1d/0x30
x64_sys_call+0x2818/0x2880
do_syscall_64+0xa9/0x580
entry_SYSCALL_64_after_hwframe+0x4b/0x53
Reproducer
```
mdadm -CR /dev/md0 -l1 -n2 /dev/sd[cd]
echo inactive > /sys/block/md0/md/array_state
echo 10 > /sys/block/md0/md/new_level
```
mddev_init() can only be called once per mddev, no need to test if bioset
has been initialized anymore.
📍 영향받는 시스템
Linux Kernel (md driver 관련 버전)
⚔️ 공격 벡터
로컬 사용자가 sysfs 인터페이스를 통해 특정 md 장치의 속성(예: new_level)을 조작하여 커널 패닉 유도
🛡️ 대응 방법
해당 취약점이 수정된 최신 버전의 리눅스 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 취약점이 패치된 최신 보안 업데이트 버전인지 확인