🇰🇷 한글 설명
Linux 커널의 Bluetooth EIR 모듈에서 광고 데이터(Advertising Data)를 생성할 때 스택 기반의 Out-of-Bounds(OOB) 쓰기 취약점이 발견되었습니다. Flags AD 구조를 앞에 추가하는 과정에서 버퍼 크기를 제대로 확인하지 않아, 고정된 크기의 버퍼를 초과하여 데이터를 복사할 수 있습니다.
💡 쉬운 설명
블루투스 신호를 보낼 때 사용하는 메모리 공간이 정해져 있는데, 시스템이 자동으로 추가하는 정보 때문에 이 공간을 넘어서는 데이터가 써지는 문제입니다. 이로 인해 시스템이 충돌하거나 보안 문제가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: eir: Fix stack OOB write when prepending the Flags AD
eir_create_adv_data() builds the advertising data into a fixed-size
buffer ("size", 31 for the legacy path). It may prepend a 3-byte "Flags"
AD structure (LE_AD_NO_BREDR on an LE-only controller) and then copies
the per-instance data without checking that it still fits:
memcpy(ptr, adv->adv_data, adv->adv_data_len);
tlv_data_max_len() only reserves those 3 bytes when the user-supplied
flags carry a managed-flags bit, so an instance added with flags == 0 is
accepted with adv_data_len up to the full buffer. At advertise time the
flags are still prepended, and the memcpy() writes 3 + adv_data_len
bytes into the size-byte buffer:
BUG: KASAN: stack-out-of-bounds in eir_create_adv_data (net/bluetooth/eir.c:301)
Write of size 31 at addr ffff88800a547bdc by task kworker/u9:0/65
Workqueue: hci0 hci_cmd_sync_work
__asan_memcpy (mm/kasan/shadow.c:106)
eir_create_adv_data (net/bluetooth/eir.c:301)
hci_update_adv_data_sync (net/bluetooth/hci_sync.c:1310)
hci_schedule_adv_instance_sync (net/bluetooth/hci_sync.c:1817)
hci_cmd_sync_work (net/bluetooth/hci_sync.c:332)
This frame has 1 object:
[32, 64) 'cp'
The "Flags" structure is added by the kernel, not requested by
userspace, so only prepend it when it fits together with the instance
advertising data; when there is no room for both, drop the flags rather
than the user-provided data.
Reachable by a local user with CAP_NET_ADMIN owning an LE-only
controller on the legacy advertising path.
📍 영향받는 시스템
Linux kernel (Bluetooth EIR legacy advertising path)
⚔️ 공격 벡터
CAP_NET_ADMIN 권한을 가진 로컬 사용자가 LE-only 컨트롤러를 통해 조작된 광고 데이터를 전송
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.