🇰🇷 한글 설명
Linux 커널의 ftrace 샘플 모듈에서 kthread_run()의 반환값이 에러 포인터인지 확인하지 않아 발생하는 취약점입니다. 커널 모듈 언로드 시 에러 포인터가 kthread_stop()에 전달되어 Null Pointer Dereference를 유발할 수 있습니다.
💡 쉬운 설명
프로그램이 실행에 실패했을 때 발생하는 오류 신호를 제대로 확인하지 않고 그대로 사용하다가 시스템이 멈추거나 충돌할 수 있는 문제입니다. 모듈을 제거하는 과정에서 잘못된 메모리 주소를 참조하여 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
samples/ftrace: Fix kthread_stop() on ERR_PTR in ftrace-direct-multi-modify
ftrace_direct_multi_init() assigns kthread_run()'s return value to
simple_tsk without an IS_ERR() check. When kthread_run() fails it
returns ERR_PTR(-ENOMEM), but init still returns 0, so the module loads
with simple_tsk holding an error pointer. On unload,
ftrace_direct_multi_exit() then passes that ERR_PTR to kthread_stop(),
leading to a null-pointer-dereference.
Check the return value of kthread_run() with IS_ERR(); on failure,
unregister the ftrace direct call and propagate the error code.
📍 영향받는 시스템
Linux kernel (ftrace-direct-multi-modify 관련 샘플 모듈 사용 시)
⚔️ 공격 벡터
로컬 공격자가 특정 커널 모듈을 로드한 후 언로드하는 과정을 통해 시스템 충돌 유도
🛡️ 대응 방법
kthread_run()의 반환값을 IS_ERR()로 검사하도록 커널 패치 적용
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 패치 버전인지 확인합니다.