バッファオーバーフローの脆弱性が "sipd.dll" の以下の似ているの function にあります。
function_100115D0(char *receivedSIPdata)
{
DWORD value;
char buffer1[20];
char buffer2[40];
if(receivedSIPdata != NULL)
{
// Skip leading SPACE and TAB characters
while(*receivedSIPdata != NULL)
{
if(*receivedSIPdata == 0x20 || *receivedSIPdata == 0x09)
receivedSIPdata++;
else
break;
}
if(strnicmp(receivedSIPdata, "SIP/", 4) == 0)
{
// BUFFER OVERFLOW when string read into buffer1 or buffer2 is overly long!!!
// "SIP/" が SIP パケットで異常に長いならば、バッファオーバーフローが発生します。
sscanf(receivedSIPdata, "%s %d %s\r\n", buffer1, value, buffer2);
return value;
}
else if(strnicmp(receivedSIPdata, "INVITE", 6) == 0)
{
...
}
else if(...) // Other else-if statements to determine the SIP command
{
}
}
}
悪意のSIPパケットの例 1:
SIP/AAAAAAAA[約-68-個]AAAAAA 1 A
From: test
To: test
悪意のSIPパケットの例 2:
SIP/A 1 AAAAAAAA[約-48-個]AAAAAA
From: test
To: test