CVE-2026-99012 in Linux
요약
\~에 의해 VulDB • 2026. 10. 23.
리눅스 커널에서 다음 취약점이 해결되었습니다:
블루투스: ISO: 동시 연결 호출 직렬화
iso_sock_connect()는 소켓 잠금을 획득하기 전에 소켓 상태를 확인하고, 연결을 설정하기 전에 다시 잠금을 해제합니다. 두 개의 호출자가 소켓이 열려 있거나 바인딩된 상태에서 모두 허용 검사를 통과할 수 있습니다.
호출자 A가 라우팅 선택을 위해 자신의 목적지를 복사한 후, 호출자 B는 A가 CIS를 바인딩하거나 연결하기 전에 소켓의 목적지를 대체할 수 있습니다. 그 결과 A는 자신만의 요청에 대해 선택된 라우트를 사용하여 B의 목적지를 사용합니다. 또한 A가 연결을 첨부하고 BT_CONNECT 상태를 설정한 이후에도 B는 계속 진행할 수 있습니다. 지연된 BIS 설정의 경우, B는 두 번째 BIS를 바인딩하여 iso_pi(sk)->conn을 덮어쓰고, 첫 번째 연결의 참조와 conn->sk 역방향 포인터를 고립시킬 수 있습니다. 동시 CIS 연결 역시 소켓의 연결 상태를 대체할 수 있습니다. 이후 정리 과정에서는 현재 연결만 분리되므로, 이전 연결에 대한 콜백이 소켓 해제와 경쟁하여 해지된 소켓에 접근하게 됩니다.
KASAN에서 다음을 보고했습니다:
BUG: KASAN: slab-use-after-free in iso_sock_hold+0xf7/0x1b0 Call Trace: iso_sock_hold+0xf7/0x1b0 iso_conn_del+0x7b/0x1d0 iso_connect_cfm+0x186/0x16a0 hci_conn_failed+0x154/0x280 hci_abort_conn_sync+0x3dc/0x7d0 hci_cmd_sync_work+0x173/0x300
작업자 121에 의해 할당됨: sk_alloc+0x2b/0x6d0 bt_sock_alloc+0x29/0x370 iso_sock_alloc.constprop.0+0x19/0x300 iso_sock_create+0x94/0x100
작업자 121에 의해 해제됨: kfree+0x121/0x3c0 __sk_destruct+0x42b/0x540 iso_sock_release+0x29d/0x340 __sock_release+0xa1/0x260
소켓 잠금 하에서 허용 검사를 수행하고, 목적지를 게시하기 전에 연결 작업이 진행 중임을 표시합니다. 라우팅 조회 및 연결 설정 동안 해당 플래그를 유지하여 다른 연결 시도가 목적지를 변경하거나 연결을 첨부하기 전에 -EBADFD로 거부되도록 합니다. 실패한 경우를 포함하여 두 헬퍼 함수가 반환된 후 플래그를 지워야 하므로, 실행된 설치를 재시도할 수 있습니다.
소켓 잠금은 HCI 장치 잠금을 획득하기 전에 해제해야 하며, BT_CONNECT는 첨부된 연결이 필요하므로 별도의 플래그가 필요합니다. 기존 상태 전이를 유지하고 iso_sock_recvmsg()를 통해 지연된 CIS 완료를 처리합니다.
__iso_chan_add()에서 새 참조를 확보하거나 포인터 중 하나를 게시하기 전에 기존 소켓_ATTACHMENT(연결)를 거부하여 모든 호출자가 연결 연관성을 보존하도록 합니다. 지연된 BIS 설정을 위한 동일한 소켓, 동일 연결 성공 사례도 유지합니다. 첨부 거부가 이루어지기 전에 재사용 가능한 BIS가 선점되지 않도록 BIS 설정 전 첨부된 소켓을 거부합니다.
CIS 설정 시 iso_conn_add() 이전에 다른 HCI 연결을 거부하고 시도별 HCI 잠금을 직접 해제합니다. 소유권이 없는 iso_conn은 분리 후에도 다른 참조를 포함할 수 있으므로, 해당 잠금 해제를 위해 파괴에 의존해서는 안 됩니다.
iso_listen_bis()는 장치 잠금 하에서 새로운 PA HCI/ISO 쌍을 생성하므로, 임시 iso_conn_put() 거부 시 ISO 후보를 해제하고 HCI 잠금을 해제합니다. iso_conn_ready()는 연결이 없는 새로 할당되고 게시되지 않은 자식을 사용하므로 소켓 측 거부는 도달 불가능한 상태가 됩니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.