🇰🇷 한글 설명
Linux 커널의 MCTP 프로토콜 구현 중 mctp_route_lookup() 함수에서 라우트 장치에 대한 참조를 유지하지 않아 발생하는 Use-After-Free 취약점입니다. 권한이 없는 로컬 사용자가 AF_MCTP 소켓을 통해 수신/전달 경로에서 메모리 오류를 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터의 통신 경로를 찾는 과정에서 이미 삭제된 정보를 다시 사용하려고 시도할 때 발생하는 보안 결함입니다. 이를 통해 해커가 시스템의 메모리 오류를 일으키거나 제어권을 얻을 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: mctp: hold a reference to the route device in mctp_route_lookup()
mctp_route_lookup() uses rt->dev without holding a reference on it.
mctp_route_lookup_single() returns the route under RCU only, so the
route's device can be torn down concurrently: mctp_dev_put() drops the
last reference and synchronously kfree()s mdev->addrs. mctp_dev_saddr()
then reads rt->dev->addrs[0], giving a use-after-free reachable by an
unprivileged local AF_MCTP user on the receive/forwarding path (no
CAP_NET_RAW required):
BUG: KASAN: slab-use-after-free in mctp_route_lookup
Read of size 1 at addr ... by task mctp_uaf/...
mctp_route_lookup
mctp_pkttype_receive
Freed by task ...:
kfree
mctp_dev_put
mctp_dev_notify
In the same window mctp_dst_from_route() -> mctp_dev_hold() also
increments a refcount that has already reached zero
("refcount_t: addition on 0 ... mctp_dev_hold").
This reintroduces the use-after-free class of CVE-2023-3439: the source
address lookup was moved ahead of the point where the destination takes
its device reference.
Take a reference with refcount_inc_not_zero() before touching rt->dev,
skip a device that is already dead, and drop the reference once the
destination has taken its own.
📍 영향받는 시스템
MCTP 프로토콜이 활성화된 Linux 커널 버전 (CVE-2023-3439 재발 유형)
⚔️ 공격 벡터
권한이 없는 로컬 사용자가 AF_MCTP 소켓을 사용하여 특정 네트워크 패킷을 전송/수신하는 과정에서 발생
🛡️ 대응 방법
MCTP 관련 커널 패치가 적용된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 최신 보안 패치 버전인지 확인