Pythoni haavatavus c-tüüpides kinnitamata murdarvude käsitlemisel

Saadaval on Pythoni programmeerimiskeele 3.7.10 ja 3.6.13 parandusväljaanded, mis parandavad haavatavuse (CVE-2021-3177), mis võib viia koodi käivitamiseni, kui töödeldakse kontrollimata ujukomanumbreid töötlejates, mis kutsuvad C-funktsioone mehhanismi ctypes abil. . Probleem puudutab ka Python 3.8 ja 3.9 harusid, kuid nende värskendused on endiselt väljalaskekandidaadi staatuses (väljalase on kavandatud 1. märtsile).

Probleemi põhjustab puhvri ületäitumine funktsioonis ctypes PyCArg_repr(), mis tekib sprintf ebaturvalise kasutamise tõttu. Eelkõige selleks, et töödelda teisenduse 'sprintf(buffer, " tulemust ", self->tag, self->value.b)" eraldas 256-baidise staatilise puhvri ("char buffer[256]"), samas kui tulemus võib seda väärtust ületada. Rakenduste haavatavuse kontrollimiseks haavatavusele võite proovida edastada väärtust "1e300", mis meetodiga c_double.from_param töötlemisel põhjustab krahhi, kuna saadud arv sisaldab 308 tähemärki ja ei mahu 256-baidine puhver. Probleemse koodi näide: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Probleem jääb Debianis, Ubuntus ja FreeBSD-s parandamata, kuid Arch Linuxis, Fedoras ja SUSE-s on see juba parandatud. RHEL-is ei esine haavatavust paketi kokkupanemine režiimis FORTIFY_SOURCE, mis blokeerib sellised puhvri ületäitmised stringifunktsioonides.

Allikas: opennet.ru

Lisa kommentaar