Description of problem: 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); In case the transformed string is longer than original string... (see the PoC for an exapmle) 361 if (n2 > n1) { 362 /* more space needed */ We allocate n2 bytes here: 363 buf = PyMem_Realloc(buf, n2); 364 if (!buf) 365 return PyErr_NoMemory(); And here the string will be n2 chars long and terminating NUL won't fit and thus the string won't be terminated what can lead to an information leak in certain rare cases (see the original Debian report for details). 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) Version-Release number of selected component (if applicable): FC5, FC6, RHEL2.1, RHEL3, RHEL4, RHEL5 How reproducible: Proof of concept code attached. Additional info: See the URL for an original bug report to Debian and PoC by Piotr Engelking. It contains details on how to reproduce and recognize the flaw.
Created attachment 151611 [details] Python's locale.strxfrm() off-by-one flaw PoC
Issue was addressed in upstream python 2.5.1: http://www.python.org/download/releases/2.5.1/NEWS.txt Relevant SVN commit: http://svn.python.org/view/python/branches/release25-maint/Modules/_localemodule.c?rev=54670&r1=51333&r2=54670
This issue was addressed in: Red Hat Enterprise Linux: http://rhn.redhat.com/errata/RHSA-2007-1077.html (RHEL2.1) http://rhn.redhat.com/errata/RHSA-2007-1076.html (RHEL3, RHEL4)
This issue has been addressed in following products: Red Hat Enterprise Linux 5 Via RHSA-2009:1176 https://rhn.redhat.com/errata/RHSA-2009-1176.html
Reporter changed to security-response-team by request of Jay Turner.