Varnarleysi í Python við meðhöndlun ófullgildra brotanúmera í ctypes

Leiðréttingarútgáfur á Python forritunarmálinu 3.7.10 og 3.6.13 eru fáanlegar, sem laga varnarleysi (CVE-2021-3177) sem gæti leitt til keyrslu kóða þegar unnið er úr ógildum flottölum í meðferðaraðilum sem kalla C aðgerðir með því að nota ctypes vélbúnaðinn . Vandamálið hefur einnig áhrif á Python 3.8 og 3.9 útibúin, en uppfærslur fyrir þær eru enn í stöðu útgáfuframbjóðenda (útgáfu áætluð 1. mars).

Vandamálið stafar af biðminni yfirflæði í ctypes fallinu PyCArg_repr(), sem á sér stað vegna óöruggrar notkunar á sprintf. Sérstaklega til að vinna úr niðurstöðu umbreytingarinnar 'sprintf(buffer, " ", self->tag, self->value.b)' úthlutaði kyrrstöðu biðminni upp á 256 bæti ("char buffer[256]"), á meðan niðurstaðan gæti farið yfir þetta gildi. Til að athuga varnarleysi forrita fyrir varnarleysinu geturðu prófað að senda gildið „1e300“ sem, þegar unnið er með c_double.from_param aðferðinni, mun leiða til hruns, þar sem talan sem myndast inniheldur 308 stafi og passar ekki inn í 256-bæta biðminni. Dæmi um vandamálakóða: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Vandamálið er enn óleyst í Debian, Ubuntu og FreeBSD, en hefur þegar verið lagað í Arch Linux, Fedora, SUSE. Í RHEL kemur varnarleysið ekki fram vegna pakkasamsetningar í FORTIFY_SOURCE ham, sem hindrar slíka biðminni yfirflæði í strengjaaðgerðum.

Heimild: opennet.ru

Bæta við athugasemd