Asterisk是一款PBX系统的软件,运行在Linux系统上,支持使用SIP、IAX、H323协议进行IP通话。 Asterisk的SIP/SDP处理器中存在多个远程栈溢出漏洞,远程攻击者可能利用此漏洞控制服务器。 如果所发送SIP报文中的SDP数据包含有超长的T38参数的话,就可以触发这个溢出,导致执行任意代码。这个漏洞是由chan_sip.c文件中的process_sdp函数调用sscanf所导致的: else if ((sscanf(a, \"T38FaxRateManagement:\\%s\", s) == 1)) { found = 1; if (option_debug > 2) ast_log(LOG_DEBUG, \"RateMangement: \\%s\n\", s); if (!strcasecmp(s, \"localTCF\")) peert38capability |= T38FAX_RATE_MANAGEMENT_LOCAL_TCF; (!strcasecmp(s, \"transferredTCF\")) peert38capability |= T38FAX_RATE_MANAGEMENT_TRANSFERED_TCF; 上述代码试图从SIP报文中的SDP读取T38FaxRateManagement:选项,然后将后续的字符串拷贝到s。由于对这个字符串没有执行长度检查,因此可以写过s变量的边界,覆盖栈中临近的缓冲区。s在这个函数中被定义为仅256字节长的字符数组。 SIP/SDP处理器在处理SIP报文中SDP数据的超长T38FaxUdpEC参数时也存在类似的栈溢出: else if ((sscanf(a, \"T38FaxUdpEC:\\%s\", s) == 1)) { found = 1; if (option_debug > 2) ast_log(LOG_DEBUG, \"UDP EC: \\%s\n\", s); if (!strcasecmp(s, \"t38UDPRedundancy\")) { peert38capability |= T38FAX_UDP_EC_REDUNDANCY; ast_udptl_set_error_correction_scheme(p->udptl,...
Asterisk是一款PBX系统的软件,运行在Linux系统上,支持使用SIP、IAX、H323协议进行IP通话。 Asterisk的SIP/SDP处理器中存在多个远程栈溢出漏洞,远程攻击者可能利用此漏洞控制服务器。 如果所发送SIP报文中的SDP数据包含有超长的T38参数的话,就可以触发这个溢出,导致执行任意代码。这个漏洞是由chan_sip.c文件中的process_sdp函数调用sscanf所导致的: else if ((sscanf(a, \"T38FaxRateManagement:\\%s\", s) == 1)) { found = 1; if (option_debug > 2) ast_log(LOG_DEBUG, \"RateMangement: \\%s\n\", s); if (!strcasecmp(s, \"localTCF\")) peert38capability |= T38FAX_RATE_MANAGEMENT_LOCAL_TCF; (!strcasecmp(s, \"transferredTCF\")) peert38capability |= T38FAX_RATE_MANAGEMENT_TRANSFERED_TCF; 上述代码试图从SIP报文中的SDP读取T38FaxRateManagement:选项,然后将后续的字符串拷贝到s。由于对这个字符串没有执行长度检查,因此可以写过s变量的边界,覆盖栈中临近的缓冲区。s在这个函数中被定义为仅256字节长的字符数组。 SIP/SDP处理器在处理SIP报文中SDP数据的超长T38FaxUdpEC参数时也存在类似的栈溢出: else if ((sscanf(a, \"T38FaxUdpEC:\\%s\", s) == 1)) { found = 1; if (option_debug > 2) ast_log(LOG_DEBUG, \"UDP EC: \\%s\n\", s); if (!strcasecmp(s, \"t38UDPRedundancy\")) { peert38capability |= T38FAX_UDP_EC_REDUNDANCY; ast_udptl_set_error_correction_scheme(p->udptl, UDPTL_ERROR_CORRECTION_REDUNDANCY); 试图从SIP报文的SDP读取T38FaxUdpEC时会触发这个栈溢出,导致执行任意指令。