🇰🇷 한글 설명
Linux 커널의 net/phy 드라이버에서 phy_get_internal_delay 함수가 delay_values를 정의하지 않고 rx-internal-delay-ps 또는 tx-internal-delay-ps가 0으로 설정된 경우 빈 배열에 접근하여 NULL pointer dereference를 유발합니다. 이로 인해 "unable to handle kernel NULL pointer dereference" 오류로 커널 panic이 발생합니다.
💡 쉬운 설명
Linux 커널의 네트워크 드라이버에서 특정 설정 조건에서 메모리를 잘못 접근하여 시스템이 충돌하는 문제입니다. 의도적인 설정이나 악성 디바이스 트리를 통해 시스템의 가용성을 방해할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: phy: fix phy_get_internal_delay accessing an empty array
The phy_get_internal_delay function could try to access to an empty
array in the case that the driver is calling phy_get_internal_delay
without defining delay_values and rx-internal-delay-ps or
tx-internal-delay-ps is defined to 0 in the device-tree.
This will lead to "unable to handle kernel NULL pointer dereference at
virtual address 0". To avoid this kernel oops, the test should be delay
>= 0. As there is already delay < 0 test just before, the test could
only be size == 0.
📍 영향받는 시스템
Linux kernel 전체 버전 (net/phy 드라이버 사용하는 모든 플랫폼, 패치 적용 이전)
⚔️ 공격 벡터
디바이스 트리에서 rx-internal-delay-ps 또는 tx-internal-delay-ps를 0으로 설정하고 delay_values가 정의되지 않은 상태에서 phy_get_internal_delay 호출 시 트리거
🛡️ 대응 방법
Linux 커널을 최신 패치 버전으로 업데이트하여 delay 검증 로직 수정 (size == 0 조건 추가)
🔧 검증 코드
현재 커널 버전을 확인하고, 해당 버전의 net/phy 드라이버 존재 여부 확인. 드라이버가 있으면 보안 패치 적용 상태를 커널 changelog에서 검증
uname -r | awk '{print $1}' && grep -l 'phy_get_internal_delay' /lib/modules/$(uname -r)/kernel/drivers/net/phy/*.ko 2>/dev/null