🇰🇷 한글 설명
리눅스 커널의 driver core 클래스 API인 class_dev_iter_next()에서 와일드 포인터 역참조 취약점이 발견되었습니다. class_dev_iter_init() 함수가 오류 발생 시 출력 매개변수인 iter를 초기화하지 않아, 초기화되지 않은 포인터를 사용하는 과정에서 시스템 오류가 발생할 수 있습니다.
💡 쉬운 설명
컴퓨터가 장치 목록을 읽어오는 과정에서 잘못된 메모리 주소를 참조하여 시스템이 멈추거나 오류가 발생할 수 있는 문제입니다. 준비되지 않은 상태에서 잘못된 정보를 읽으려다 발생하는 실수라고 이해하면 됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
driver core: class: Fix wild pointer dereferences in API class_dev_iter_next()
There are a potential wild pointer dereferences issue regarding APIs
class_dev_iter_(init|next|exit)(), as explained by below typical usage:
// All members of @iter are wild pointers.
struct class_dev_iter iter;
// class_dev_iter_init(@iter, @class, ...) checks parameter @class for
// potential class_to_subsys() error, and it returns void type and does
// not initialize its output parameter @iter, so caller can not detect
// the error and continues to invoke class_dev_iter_next(@iter) even if
// @iter still contains wild pointers.
class_dev_iter_init(&iter, ...);
// Dereference these wild pointers in @iter here once suffer the error.
while (dev = class_dev_iter_next(&iter)) { ... };
// Also dereference these wild pointers here.
class_dev_iter_exit(&iter);
Actually, all callers of these APIs have such usage pattern in kernel tree.
Fix by:
- Initialize output parameter @iter by memset() in class_dev_iter_init()
and give callers prompt by pr_crit() for the error.
- Check if @iter is valid in class_dev_iter_next().
📍 영향받는 시스템
Linux Kernel (class_dev_iter API를 사용하는 모든 드라이버 코어 관련 시스템)
⚔️ 공격 벡터
로컬 공격자가 특정 클래스 장치 반복자 API를 호출하여 잘못된 메모리 주소에 접근하도록 유도
🛡️ 대응 방법
리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 class_dev_iter_init()의 초기화 로직을 적용해야 함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 최신 패치 버전인지 확인