CVE:CVE-2005-0587
CNNVD:CNNVD-200503-134
Mozilla是一款开放源码的Web浏览器。
Mozilla 1.7.3和Firefox 1.0中的实现中存在漏洞，远程利用漏洞可能允许攻击者导致堆破坏，造成执行任意代码。
漏洞存在于依赖mozilla/xpcom/string/src/nsTSubstring.cpp文件中函数的字符串处理函数(如nsCSubstring::Append)中。某些函数(如nsTSubstring_CharT::Replace())不能检查重新划定字符串大小函数的返回值。
xpcom/string/src/nsTSubstring.cpp:
[1] size_type length = tuple.Length();
 cutStart = PR_MIN(cutStart， Length());
[2] ReplacePrep(cutStart， cutLength， length);
[3] if (length > 0)
 tuple.WriteTo(mData + cutStart， length);
在[1]中，长度被设置为将要拷贝的字符串的长度，并于[2]传送给ReplacePrep()。如果这个函数执行的重新分配失败，则将mData设为固定的地址。
 mData = NS_CONST_CAST(char_type*， char_traits::sEmptyBuffer);
 mLength = 0;
xpcom/string/src/nsSubstring.cpp中设置了sEmptyBuffer的值:
static const PRUnichar gNullChar = 0;
const char* nsCharTraits<char> ::sEmptyBuffer = (const char*) &gNullChar;
因为没有检查返回值，如果函数失效的话，mData就指向已知的内存位置。通过导致内存消耗直到出现内存耗尽的情况出现，并控制要附加的字符串的值，就可能在[3]导致在已知位置放置任意数据，允许执行任意代码。
solution:Upgrade mozilla firefox to a higher version than 0.8,0.9,0.9:rc,0.9.1,0.9.2,0.9.3,0.10,0.10.1,1.0,and avoid the version 0.8,0.9,0.9:rc,0.9.1,0.9.2,0.9.3,0.10,0.10.1,1.0; Upgrade mozilla mozilla to a higher version than 1.3,1.4,1.4:alpha,1.4.1,1.5,1.5:alpha,1.5:rc1,1.5:rc2,1.5.1,1.6,1.6:alpha,1.6:beta,1.7,1.7:alpha,1.7:beta,1.7:rc1,1.7:rc2,1.7:rc3,1.7.1,1.7.2,1.7.3,1.7.5,and avoid the version 1.3,1.4,1.4:alpha,1.4.1,1.5,1.5:alpha,1.5:rc1,1.5:rc2,1.5.1,1.6,1.6:alpha,1.6:beta,1.7,1.7:alpha,1.7:beta,1.7:rc1,1.7:rc2,1.7:rc3,1.7.1,1.7.2,1.7.3,1.7.5