🇰🇷 한글 설명
Linux 커널의 kobject 서브시스템에서 kset_register() 함수가 kset->kobj.ktype이 NULL인지 검사하지 않아, ktype을 초기화하지 않은 kset을 등록하면 NULL 포인터 역참조가 발생합니다. 이번 수정은 등록 전에 ktype 값을 확인하는 방어 로직을 추가합니다.
💡 쉬운 설명
커널 드라이버가 올바르지 않게 초기화된 객체를 등록하면 시스템이 충돌할 수 있는 문제입니다. 커널 쪽에 입력값 검사를 추가해 잘못된 등록을 미리 막도록 고쳐졌습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
kobject: Add sanity check for kset->kobj.ktype in kset_register()
When I register a kset in the following way:
static struct kset my_kset;
kobject_set_name(&my_kset.kobj, "my_kset");
ret = kset_register(&my_kset);
A null pointer dereference exception is occurred:
[ 4453.568337] Unable to handle kernel NULL pointer dereference at \
virtual address 0000000000000028
... ...
[ 4453.810361] Call trace:
[ 4453.813062] kobject_get_ownership+0xc/0x34
[ 4453.817493] kobject_add_internal+0x98/0x274
[ 4453.822005] kset_register+0x5c/0xb4
[ 4453.825820] my_kobj_init+0x44/0x1000 [my_kset]
... ...
Because I didn't initialize my_kset.kobj.ktype.
According to the description in Documentation/core-api/kobject.rst:
- A ktype is the type of object that embeds a kobject. Every structure
that embeds a kobject needs a corresponding ktype.
So add sanity check to make sure kset->kobj.ktype is not NULL.
📍 영향받는 시스템
ktype을 초기화하지 않은 kset을 등록하는 Linux 커널 모듈이 있는 수정 이전 Linux 커널 버전
⚔️ 공격 벡터
일반 사용자 공격이라기보다 잘못 작성된 커널 모듈이 kset을 등록할 때 발생하는 커널 패닉/서비스 거부 형태이며, 로컬에서 악성 또는 결함 모듈을 적재할 수 있는 경우에 해당합니다.
🛡️ 대응 방법
배포판 제공 최신 커널 패키지로 업데이트하여 수정된 커널을 적용하고 재부팅합니다.
🔧 검증 코드
출력된 커널 버전이 배포판의 수정 패치가 포함된 최신 보안 업데이트 버전인지 배포판 보안 공지와 비교하여 확인하며, 해당 버전 이전이면 업데이트가 필요합니다.