Dobësia në Python kur trajton numrat thyesorë të pavlefshëm në ctypes

Janë të disponueshme lëshimet korrigjuese të gjuhës së programimit Python 3.7.10 dhe 3.6.13, të cilat rregullojnë një dobësi (CVE-2021-3177) që mund të çojë në ekzekutimin e kodit kur përpunohen numrat e pavlefshëm me pikë lundruese në mbajtësit që thërrasin funksionet C duke përdorur mekanizmin ctypes . Problemi prek gjithashtu degët e Python 3.8 dhe 3.9, por përditësimet për to janë ende në statusin e kandidatit për lëshim (lëshimi i planifikuar për 1 mars).

Problemi shkaktohet nga një tejmbushje buffer në funksionin ctypes PyCArg_repr(), i cili ndodh për shkak të përdorimit të pasigurt të sprintf. Në veçanti, për të përpunuar rezultatin e transformimit 'sprintf(buffer, " ", self->tag, self->value.b)' caktoi një tampon statik prej 256 bajte ("char buffer[256]"), ndërsa rezultati mund të tejkalojë këtë vlerë. Për të kontrolluar cenueshmërinë e aplikacioneve ndaj dobësisë, mund të provoni të kaloni vlerën "1e300", e cila, kur përpunohet me metodën c_double.from_param, do të çojë në një përplasje, pasi numri që rezulton përmban 308 karaktere dhe nuk përshtatet në një Bufer 256 bajt. Shembull i kodit problematik: ctypes import; x = ctypes.c_double.nga_param(1e300); repr(x)

Problemi mbetet i pazgjidhur në Debian, Ubuntu dhe FreeBSD, por tashmë është rregulluar në Arch Linux, Fedora, SUSE. Në RHEL, cenueshmëria nuk ndodh për shkak të montimit të paketës në modalitetin FORTIFY_SOURCE, i cili bllokon tejmbushjet e tilla të buferit në funksionet e vargut.

Burimi: opennet.ru

Shto një koment