Linux Kernel是开放码操作系统Linux所使用的内核。 Linux Kernel对入站CAPI消息没有执行正确的处理,远程攻击者可能利用此漏洞在服务器上执行任意指令。 Linux Kernel代码的net/bluetooth/cmtp/capi.c文件中没有正确地处理入站的CAPI消息。如果用户发送了特制的CAPI报文的话,就可能触发缓冲区溢出,覆盖某些内核数据结构,导致执行任意指令。net/bluetooth/cmtp/capi.c中漏洞代码如下: case CAPI_FUNCTION_GET_SERIAL_NUMBER: controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 12); if (!info & & ctrl) { memset(ctrl->serial, 0, CAPI_SERIAL_LEN); strncpy(ctrl->serial, skb->data + CAPI_MSG_BASELEN + 17, skb->data[CAPI_MSG_BASELEN + 16]); } break; ->serial是unsigned char[8]且没有对skb->data[CAPI_MSG_BASELEN + 16]执行检查,因此导致了这个溢出。
Linux Kernel是开放码操作系统Linux所使用的内核。 Linux Kernel对入站CAPI消息没有执行正确的处理,远程攻击者可能利用此漏洞在服务器上执行任意指令。 Linux Kernel代码的net/bluetooth/cmtp/capi.c文件中没有正确地处理入站的CAPI消息。如果用户发送了特制的CAPI报文的话,就可能触发缓冲区溢出,覆盖某些内核数据结构,导致执行任意指令。net/bluetooth/cmtp/capi.c中漏洞代码如下: case CAPI_FUNCTION_GET_SERIAL_NUMBER: controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 12); if (!info & & ctrl) { memset(ctrl->serial, 0, CAPI_SERIAL_LEN); strncpy(ctrl->serial, skb->data + CAPI_MSG_BASELEN + 17, skb->data[CAPI_MSG_BASELEN + 16]); } break; ->serial是unsigned char[8]且没有对skb->data[CAPI_MSG_BASELEN + 16]执行检查,因此导致了这个溢出。