tcpdump是Tcpdump团队开发的一套运行在命令行下的嗅探工具。该工具主要用于数据包分析和网络流量捕获等。 Tcpdump在处理畸形的IEEE802.11报文时存在堆缓冲区溢出漏洞,远程攻击者可能利用此漏洞在系统上执行任意指令。 如果发送了特制的802.11帧的话,就会在IEEE 802.11打印程序中触发单字节堆溢出漏洞。在265行print-802_11.c中的parse_elements()函数检查帧中pbody->tim.length长度中的过小的值,但之后在267行的范围检查中使用了错误的变量。由于pbody->tim.length被定义为u_int8_t,因此可容纳最大值为255,然后将252字节拷贝到了仅有251字节的pbody->tim.bitmap。 253 case E_TIM: 254 /* Present, possibly truncated */ 255 pbody->tim_status = TRUNCATED; 256 if (!TTEST2(*(p + offset), 2)) 257 return; 258 memcpy(&pbody->tim, p + offset, 2); 259 offset += 2; 260 if (!TTEST2(*(p + offset), 3)) 261 return; 262 memcpy(&pbody->tim.count, p + offset, 3); 263 offset += 3; 264 265 if (pbody->tim.length <= 3) 266 break; 267 if (pbody->rates.length > sizeof pbody->tim.bitmap) 268 return; 269 if (!TTEST2(*(p + offset), pbody->tim.length - 3)) 270 return; 271 memcpy(pbody->tim.bitmap, p + (pbody->tim.length - 3), 272 (pbody->tim.length - 3))
tcpdump是Tcpdump团队开发的一套运行在命令行下的嗅探工具。该工具主要用于数据包分析和网络流量捕获等。 Tcpdump在处理畸形的IEEE802.11报文时存在堆缓冲区溢出漏洞,远程攻击者可能利用此漏洞在系统上执行任意指令。 如果发送了特制的802.11帧的话,就会在IEEE 802.11打印程序中触发单字节堆溢出漏洞。在265行print-802_11.c中的parse_elements()函数检查帧中pbody->tim.length长度中的过小的值,但之后在267行的范围检查中使用了错误的变量。由于pbody->tim.length被定义为u_int8_t,因此可容纳最大值为255,然后将252字节拷贝到了仅有251字节的pbody->tim.bitmap。 253 case E_TIM: 254 /* Present, possibly truncated */ 255 pbody->tim_status = TRUNCATED; 256 if (!TTEST2(*(p + offset), 2)) 257 return; 258 memcpy(&pbody->tim, p + offset, 2); 259 offset += 2; 260 if (!TTEST2(*(p + offset), 3)) 261 return; 262 memcpy(&pbody->tim.count, p + offset, 3); 263 offset += 3; 264 265 if (pbody->tim.length <= 3) 266 break; 267 if (pbody->rates.length > sizeof pbody->tim.bitmap) 268 return; 269 if (!TTEST2(*(p + offset), pbody->tim.length - 3)) 270 return; 271 memcpy(pbody->tim.bitmap, p + (pbody->tim.length - 3), 272 (pbody->tim.length - 3))