🇰🇷 한글 설명
Linux 커널의 Bluetooth ISO 스택에서 iso_conn_big_sync() 함수가 소켓 잠금을 해제했다가 다시 획득하는 과정에서 발생하는 NULL 포인터 역참조 취약점입니다. 잠금이 해제된 사이 연결이 끊겨 conn 객체가 NULL이 될 수 있음에도 이를 재검증하지 않아 시스템 충돌이 발생할 수 있습니다.
💡 쉬운 설명
블루투스 연결을 처리하는 과정에서 잠시 보안 확인 절차를 멈췄을 때, 연결이 갑자기 끊기면 컴퓨터가 길을 잃고 멈춰버리는 문제입니다. 이로 인해 시스템이 예기치 않게 재시작되거나 중단될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: ISO: avoid NULL deref of conn in iso_conn_big_sync()
iso_conn_big_sync() drops the socket lock to call hci_get_route() and
then re-acquires it, but dereferences iso_pi(sk)->conn->hcon afterwards
without re-checking that conn is still valid.
While the lock is dropped, the connection can be torn down under the
same socket lock: iso_disconn_cfm() -> iso_conn_del() -> iso_chan_del()
sets iso_pi(sk)->conn to NULL (and the broadcast teardown path can also
clear conn->hcon on its own). When iso_conn_big_sync() re-acquires the
lock and reads conn->hcon, conn may be NULL, causing a NULL pointer
dereference (hcon is the first member of struct iso_conn).
This path is reached from iso_sock_recvmsg() for a PA-sync broadcast
sink socket (BT_SK_DEFER_SETUP | BT_SK_PA_SYNC), so the dropped-lock
window can race with connection teardown driven by controller events.
Re-validate iso_pi(sk)->conn and its hcon after re-acquiring the socket
lock and bail out if the connection went away, as already done in the
sibling iso_sock_rebind_bc().
📍 영향받는 시스템
Linux Kernel (Bluetooth ISO 스택을 사용하는 버전)
⚔️ 공격 벡터
블루투스 컨트롤러 이벤트를 통한 연결 해제와 동기화 요청 간의 레이스 컨디션(Race Condition) 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 iso_conn_big_sync() 함수의 연결 유효성 검사 로직을 적용해야 합니다.
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 배포판 보안 공지를 통해 대조합니다.