Saadaval on Python 3.7.10 ja 3.6.13 programmeerimiskeele korrigeerivad väljalasked, milles on kõrvaldatud haavatavus (CVE-2021-3177), mis võib põhjustada koodi täitmise, kui töödelda kontrollimata ujukomaarve funktsioonide käitamiseks mõeldud C-i keeles tehtud töötlejatest ctypesi mehhanismi kaudu. Probleem mõjutab ka Python 3.8 ja 3.9 versioone, kuid nende uuendused on praegu kandidaadid lõppversiooniks (väljalase on planeeritud 1. märtsiks).
Probleem tuleneb ctypesi funktsiooni PyCArg_repr() puhverülemisest, mis tekib sprintfi ebaohutust kasutamisest. Täpsemalt, tulemuse töötlemiseks, mis saadakse muundades ‘sprintf(buffer, "", self->tag, self->value.b)’, eraldati staatiline puhver, mille suurus oli 256 baiti ("char buffer[256]"), kuigi tulemus võis ületada seda väärtust. Rakenduste haavatavuse kontrollimiseks on võimalik proovida edastada väärtust „1e300”, mis c_double.from_param meetodi töötlemisel põhjustab krahhi, kuna tulemuseks olev number sisaldab 308 numbrit ja ei mahu 256-baidisesse puhverisse. Probleemse koodi näide: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)
Probleem püsib lahendamata Debianis, Ubuntu-s ja FreeBSD-s, kuid on juba lahendatud Arch Linuxis, Fedoras ja SUSE-s. RHEL-is ei avaldu haavatavus paketihalduse FORTIFY_SOURCE režiimi tõttu, mis blokib selliseid puhverülekandeid stringifunktsioonides.
Allikas: opennet.ru
