Zafiyet.live Keşfet. Değerlendir. Düzelt. Doğrula.
  • Son 7 gün
  • CWE-125

CVE-2026-18748

Zephyr Bluetooth Classic A2DP codec IE işlemede sınır dışı bellek okuma açığı

zephyrproject zephyr

Düşük 3,5 CVSS 3.1
Yayımlandı
Güncellendi
24 Eki 2026
Açık yaşı
6 gün
Kaydı açan
zephyr

ÖzetTürkçe

Zephyr'ın Bluetooth Classic A2DP ana bilgisayar yığını, bir codec Information Element (IE) öğesini sabit 8 baytlık codec_ie[] dizisine kopyalar ve uzunluk alanı olarak bir bayt kullanır. Bir AVDTP eşi 8 bayttan uzun bir codec IE gönderdiğinde, a2dp_process_config_ind fonksiyonu yalnızca ilk 8 baytı kopyalar ancak tam, saldırganın belirlediği uzunluğu len alanına atar ve bu tutarsız yapıyı uygulamanın struct bt_a2dp_stream yapısındaki codec_config alanında saklar. bt_a2dp_get_config_cb ve bt_a2dp_set_config_cb fonksiyonlarında da aynı kopyala-kes-ama-uzunluğu-koru deseni bulunur. Sonraki tüketiciler len değerine güvenir; özellikle gelen AVDTP GET_CONFIGURATION isteğine yanıt veren a2dp_get_config_ind, 8 baytlık dizinin sonundan itibaren yaklaşık 245 bayta kadar okuma yapıp bunları yanıtta iletebilir. Bu, aşırı büyük bir codec IE içeren SET_CONFIGURATION gönderip ardından yapılandırmayı isteyen eşleşmiş bir BR/EDR eşine bilgi sızdırma imkanı verir. config_req, reconfig_req ve get_config_rsp uygulama geri çağrılarında da ek bir sınır dışı okuma oluşur. Bu açığın tetiklenmesi için CONFIG_BT_CLASSIC ve CONFIG_BT_A2DP etkin olmalı, AVDTP eşinin eşleşmesi tamamlanmış olmalı ve yerel uç nokta BT_A2DP_EP_INIT ile SBC dışı bir codec (BT_A2DP_MPEG1, BT_A2DP_MPEG2, BT_A2DP_ATRAC veya BT_A2DP_VENDOR) için kaydedilmiş olmalıdır. bt_a2dp_get_config_cb yanıt yolu bu kısıtlamaya sahip değildir. Sınır dışı yazma yoktur; net_buf tampon alanı kontrolü hedefi sınırlar, dolayısıyla etki, eşe yalnızca bitişik RAM'in sınırlı bir bölgesinin ifşa edilmesiyle sınırlıdır. Düzeltme, sabit BT_A2DP_MAX_IE_LENGTH yerine yapılandırılabilir CONFIG_BT_A2DP_CODEC_MAX_IE_LEN (varsayılan 8, aralık 4–253) kullanır, codec_ie[] dizisini bu değere göre boyutlandırır ve alınan, bu sınırı aşan IE'leri sessizce kesmek yerine reddeder.

Kaynaktaki açıklama (İngilizce)

The Bluetooth Classic A2DP host stores a codec Information Element (IE) in struct bt_a2dp_codec_ie, a one-byte len field plus a fixed 8-byte codec_ie[] array. When an AVDTP peer sent a codec IE longer than 8 bytes, a2dp_process_config_ind() in subsys/bluetooth/host/classic/a2dp.c copied only the first 8 bytes but assigned the full, attacker-chosen length to len, and then persisted that inconsistent structure into the application's struct bt_a2dp_stream via stream->codec_config. bt_a2dp_get_config_cb() and bt_a2dp_set_config_cb() had the same truncate-the-copy-but-keep-the-length pattern.

Every later consumer trusts len. In particular the responder for an incoming AVDTP GET_CONFIGURATION, a2dp_get_config_ind(), executes net_buf_add_mem(rsp_buf, &ep->stream->codec_config.codec_ie[0], ep->stream->codec_config.len), so a paired BR/EDR peer that first sends a SET_CONFIGURATION carrying an oversized codec IE and then requests the configuration back causes the stack to read up to roughly 245 bytes past the end of the 8-byte array and transmit them in the response. codec_config is the last member of struct bt_a2dp_stream, so the read runs into memory adjacent to the application's stream object. The same inconsistency is also handed to the config_req(), reconfig_req() and get_config_rsp() application callbacks, where a natural memcpy() of len bytes performs a further out-of-bounds read.

Reaching the on-air disclosure requires CONFIG_BT_CLASSIC with CONFIG_BT_A2DP, an AVDTP peer that has completed pairing (the AVDTP L2CAP channel requires BT_SECURITY_L2), and a local endpoint registered for a non-SBC codec — BT_A2DP_MPEG1/BT_A2DP_MPEG2/BT_A2DP_ATRAC/BT_A2DP_VENDOR via BT_A2DP_EP_INIT() — because the SBC branch already pins the IE length to 4 bytes. The bt_a2dp_get_config_cb() response path has no such gate and hands the lying length to any application. There is no out-of-bounds write: the net_buf tailroom check bounds the destination, so the impact is limited to disclosure of a bounded region of adjacent RAM to the peer.

The fix replaces the hardcoded BT_A2DP_MAX_IE_LENGTH with the configurable CONFIG_BT_A2DP_CODEC_MAX_IE_LEN (default 8, range 4–253), sizes codec_ie[] from it, and rejects any received IE that exceeds it instead of silently truncating, so len can no longer exceed the number of valid bytes.

Bu açığın açıklamasını Türkçeye çevirdik. Adım adım çözüm önerilerini kritik ve yeni açıklar için hazırlıyoruz; düzeltilmiş sürüm aşağıdaki tabloda, ayrıntılar üreticinin duyurusunda.

Etkilenen sürümler1 yazılım

YazılımEtkilenenDüzeltildiği sürüm
zephyrproject zephyr ≥ 4.3.0, ≤ 4.4.2 –

Kaynaklar4 kaynak

Kayıt geçmişi

  1. Yayımlandı

İlgili açıklar

Türkçe metin, resmi kayıtlardaki bilgilerle yapay zekâ yardımıyla yazıldı ve yayından önce otomatik kontrollerden geçti. Bir değişikliği uygulamadan önce üreticinin duyurusuna mutlaka bakın.