Sebezhetőség a Pythonban, amikor nem érvényesített törtszámokat kezel ctype-okban

A Python programozási nyelv 3.7.10 és 3.6.13 javító kiadásai elérhetők, amelyek javítanak egy biztonsági rést (CVE-2021-3177), amely kódfuttatáshoz vezethet a C függvényeket a ctypes mechanizmussal hívó kezelőkben érvényesítetlen lebegőpontos számok feldolgozásakor. . A probléma a Python 3.8-as és 3.9-es ágait is érinti, de ezek frissítései még kiadásjelölt státuszban vannak (a kiadás március 1-jén várható).

A problémát a ctypes PyCArg_repr() függvény puffertúlcsordulása okozza, amely a sprintf nem biztonságos használata miatt következik be. Különösen a 'sprintf(buffer, " transzformáció eredményének feldolgozásához ", self->tag, self->value.b)" 256 bájtos statikus puffert ("char puffer[256]") foglalt le, miközben az eredmény meghaladhatja ezt az értéket. Az alkalmazások sebezhetőségének ellenőrzéséhez próbálja meg átadni az „1e300” értéket, amely a c_double.from_param metódussal történő feldolgozáskor összeomláshoz vezet, mivel a kapott szám 308 karakterből áll, és nem fér bele 256 bájtos puffer. Példa problémás kódra: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

A probléma továbbra is megoldatlan Debianban, Ubuntuban és FreeBSD-ben, de már megoldódott az Arch Linux, Fedora és SUSE rendszerben. Az RHEL-ben a biztonsági rés nem a FORTIFY_SOURCE módú csomag-összeállítás miatt jelentkezik, amely blokkolja az ilyen puffertúlcsordulást a karakterlánc-függvényekben.

Forrás: opennet.ru

Hozzászólás