CVE-2026-68335 in Linux
요약
\~에 의해 VulDB • 2026. 08. 10.
리눅스 커널에서 다음 취약점이 해결되었습니다:
rds: 네트워크 네임스페이스 경계를 넘어오는 수신 메시지를 폐기합니다.
`rds_find_bound()`는 (주소, 포트, scope_id)만으로 키가 지정된 전역 `rhashtable`을 사용하여 대상 소켓을 조회합니다. 네트워크 네임스페이스는 키의 일부가 아니므로, netns A에 있는 송신자가 들어오는 메시지(incoming message, inc)를 서로 다른 netns B에 위치한 소켓으로 전달할 수 있습니다.
이러한 상황이 발생하면 `inc->i_conn`은 `c_net`이 netns A인 `rds_connection`을 가리키지만, 수신 측의 rs는 netns B에 위치합니다. netns A를 생성했던 자식 프로세스가 종료되면, `cleanup_net()`에서 `rds_loop_exit_net() -> rds_loop_kill_conns() -> rds_conn_destroy()` 순으로 호출되어 해당 연결이 해제(free)됩니다. 만약 netns B의 잔존 소켓이 여전히 inc를 보유하고 있다면, 이후 `inc->i_conn`에 대한 모든 역참조는 use-after-free가 됩니다.
`rds_clear_recv_queue()`에는 두 가지 위험한 지점이 있습니다: 1. `inc->i_conn->c_lcong`(해제된 rds_connection의 오프셋 88, 크기 200)은 `rds_recv_rcvbuf_delta()`를 통해 읽히며 KASAN으로 확인되었습니다. 2. `inc` 참조 카운트가 0에 도달할 때 `rds_inc_put()`를 통해 호출되는 `inc->i_conn->c_trans->inc_free(inc)` (오프셋 80의 함수 포인터)는 동일한 레이스 윈도우에서 해제된 객체를 통한 호출(primitive)이 발생할 수 있습니다.
이 버그는 Linux 3.8부터 사용 가능한 비특권 사용자 네임스페이스(CLONE_NEWUSER + CLONE_NEWNET)로부터 접근 가능합니다.
`rds_find_bound()`가 반환한 소켓이 메시지를 운반했던 연결과 다른 네트워크 네임스페이스에 속하는 경우, `rds_recv_incoming()`에서 전달을 거부함으로써 이 버그를 수정합니다. 비교에는 기존 헬퍼 함수인 `rds_conn_net()`, `sock_net()` 및 `net_eq()`를 사용합니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.