🇰🇷 한글 설명
Linux 커널의 bcm CAN 드라이버에서 장치 제거 후에도 RX/TX 작업이 제대로 정리되지 않는 취약점이 발견되었습니다. RX의 경우 필터 업데이트 시 프레임 전달이 중단될 수 있으며, TX의 경우 타이머가 무한히 실행되어 시스템 자원을 소모하거나 재사용된 인터페이스에 데이터를 주입할 위험이 있습니다.
💡 쉬운 설명
네트워크 장치를 제거했을 때 관련 작업들이 완전히 종료되지 않고 시스템 뒷단에서 계속 돌아가는 문제입니다. 이로 인해 시스템 성능이 떨어지거나, 나중에 같은 번호를 사용하는 다른 장치에 잘못된 데이터가 전달될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
can: bcm: fix stale rx/tx ops after device removal
RX: an RX_SETUP update(!) for an existing op skipped can_rx_register()
unconditionally, even when a concurrent NETDEV_UNREGISTER had already
torn down its registration (op->rx_reg_dev == NULL). This silently
did not re-enable frame delivery for that updated filter. bcm_rx_setup()
now re-registers in that case, while leaving rx_ops with ifindex = 0
(all CAN devices) which never carry a tracked rx_reg_dev registered as-is.
TX: bcm_notify() only handled bo->rx_ops on NETDEV_UNREGISTER, leaving
tx_ops with an active cyclic transmission re-arming its hrtimer
indefinitely to execute bcm_tx_timeout_handler(). Cancelling the hrtimer
prevents the runaway timer and any injection into a later reused ifindex,
since nothing else calls bcm_can_tx() for the op until an explicit
TX_SETUP update re-arms it.
Unlike bcm_rx_unreg(), which clears the tracked rx_reg_dev for rx_ops,
the ifindex is intentionally left unchanged for tx_ops. bcm_tx_setup()
always rejects ifindex 0, so clearing it would strand the op: neither a
later TX_SETUP (bcm_find_op()) nor TX_DELETE (bcm_delete_tx_op()) could
ever find it again, since both require an exact ifindex match.
📍 영향받는 시스템
Linux kernel (BCM CAN driver 포함 버전)
⚔️ 공격 벡터
장치 제거 및 재등록 과정에서의 타이머 오작동을 이용한 자원 고갈 또는 데이터 주입
🛡️ 대응 방법
커널 패치를 적용하여 bcm_rx_setup()의 재등록 로직 및 bcm_notify()의 hrtimer 취소 로직을 업데이트하십시오.
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 확인하십시오.