2023.09.12
CVE-2021-39805 | A-212694559 | ID | High | 12, 12L |
---|
patch

分析
该漏洞发生在L2CAP的Enhanced Credit Based Flow Control Mode(基于信用值的高级流控模式)的实现中。
漏洞根因很明显,STREAM_TO_UINT16(result, p);
从 packet 里读取数据给result之前,没有判断这个packet是否还有数据。
看下面第三个图,若攻击者构造的信令packet里的command只有前三个字段,即Length = 0,也就是没有Result字段时,代码中【1】处就会发生OOB Read。
- 信令packet中command的格式

- credit相关的两种command的格式


/*******************************************************************************
*
* Function l2cble_process_sig_cmd
*
* Description This function is called when a signalling packet is received
* on the BLE signalling CID
*
* Returns void
*
******************************************************************************/
void l2cble_process_sig_cmd(tL2C_LCB* p_lcb, uint8_t* p, uint16_t pkt_len) {
......
STREAM_TO_UINT8(cmd_code, p);
STREAM_TO_UINT8(id, p);
STREAM_TO_UINT16(cmd_len, p);
/* Check command length does not exceed packet length */
if ((p + cmd_len) > p_pkt_end) {
L2CAP_TRACE_WARNING(
"L2CAP - LE - format error, pkt_len: %d cmd_len: %d code: %d",
pkt_len, cmd_len, cmd_code);
return;
}
switch (cmd_code) {
case L2CAP_CMD_CREDIT_BASED_RECONFIG_RES: {
uint16_t result;
STREAM_TO_UINT16(result, p); // 【1】漏洞点
......