🇰🇷 한글 설명
Linux 커널의 CAN 네트워크 드라이버에서 Bus Off 상태 후 재시작 시, 드라이버가 do_set_mode 콜백을 구현하지 않은 경우 NULL 포인터 역참조가 발생하는 취약점입니다. 수정으로 해당 경우 수동 재시작을 거부하거나 자동 재시작 지연을 설정하도록 하며, can_restart()에서도 콜백 존재 여부를 검사합니다.
💡 쉬운 설명
CAN 통신 장치가 오류 후 다시 시작될 때, 일부 드라이버에서 필요한 기능이 없어 시스템이 잘못된 메모리를 참조해 비정상 종료될 수 있습니다. 이번 패치는 이런 경우 재시작을 막거나 안전하게 처리하도록 바꿉니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
can: netlink: can_changelink(): fix NULL pointer deref of struct can_priv::do_set_mode
Andrei Lalaev reported a NULL pointer deref when a CAN device is
restarted from Bus Off and the driver does not implement the struct
can_priv::do_set_mode callback.
There are 2 code path that call struct can_priv::do_set_mode:
- directly by a manual restart from the user space, via
can_changelink()
- delayed automatic restart after bus off (deactivated by default)
To prevent the NULL pointer deference, refuse a manual restart or
configure the automatic restart delay in can_changelink() and report
the error via extack to user space.
As an additional safety measure let can_restart() return an error if
can_priv::do_set_mode is not set instead of dereferencing it
unchecked.
📍 영향받는 시스템
CAN 드라이버를 사용하는 수정 이전 Linux 커널 버전 (CAN 버스 장치 사용 시스템)
⚔️ 공격 벡터
로컬 사용자가 CAN 장치를 수동으로 재시작하도록 설정을 변경하여 커널 NULL 포인터 역참조를 유발, 서비스 거부(커널 패닉)를 일으킬 수 있음
🛡️ 대응 방법
커널을 CVE-2025-38665 수정이 포함된 최신 안정 버전으로 업데이트하고 재부팅
🔧 검증 코드
커널 버전이 수정 패치가 배포된 버전 이상인지 확인하고, CAN 모듈이 로드되지 않았다면 이 취약점의 영향을 받지 않는 것으로 판단합니다.
uname -r && (lsmod | grep -E '^can' || echo 'CAN 모듈 미로드')