Python是一种开放源代码的脚本编程语言。 Python的Modules/_localemodule.c文件中的PyLocale_strxfrm函数中存在单字节溢出漏洞,允许攻击者读取部分内存内容。 Modules/_localemodule.c:361 356 n1 = strlen(s) + 1; 357 buf = PyMem_Malloc(n1); 358 if (!buf) 359 return PyErr_NoMemory(); 360 n2 = strxfrm(buf, s, n1); 如果所转换的字符串长于原始字符串的话: 361 if (n2 > n1) { 362 /* more space needed */ 在这里会分配n2字节: 363 buf = PyMem_Realloc(buf, n2); 364 if (!buf) 365 return PyErr_NoMemory(); 字符串会为n2字符长,终止的空字符不适合这个长度,因此字符串不会终止,在某些情况下可能导致信息泄露。 366 strxfrm(buf, s, n2); 367 } 368 result = PyString_FromString(buf); 369 PyMem_Free(buf); 370 return result; 371 } 372 373 #if defined(MS_WINDOWS) 374 static PyObject* 375 PyLocale_getdefaultlocale(PyObject* self)
Python是一种开放源代码的脚本编程语言。 Python的Modules/_localemodule.c文件中的PyLocale_strxfrm函数中存在单字节溢出漏洞,允许攻击者读取部分内存内容。 Modules/_localemodule.c:361 356 n1 = strlen(s) + 1; 357 buf = PyMem_Malloc(n1); 358 if (!buf) 359 return PyErr_NoMemory(); 360 n2 = strxfrm(buf, s, n1); 如果所转换的字符串长于原始字符串的话: 361 if (n2 > n1) { 362 /* more space needed */ 在这里会分配n2字节: 363 buf = PyMem_Realloc(buf, n2); 364 if (!buf) 365 return PyErr_NoMemory(); 字符串会为n2字符长,终止的空字符不适合这个长度,因此字符串不会终止,在某些情况下可能导致信息泄露。 366 strxfrm(buf, s, n2); 367 } 368 result = PyString_FromString(buf); 369 PyMem_Free(buf); 370 return result; 371 } 372 373 #if defined(MS_WINDOWS) 374 static PyObject* 375 PyLocale_getdefaultlocale(PyObject* self)