Sårbarhed i Python ved håndtering af uvaliderede brøktal i ctypes

Korrigerende udgivelser af Python-programmeringssproget 3.7.10 og 3.6.13 er tilgængelige, som løser en sårbarhed (CVE-2021-3177), der kan føre til kodekørsel ved behandling af uvaliderede flydende kommanumre i behandlere, der kalder C-funktioner ved hjælp af ctypes-mekanismen . Problemet påvirker også Python 3.8- og 3.9-grenene, men opdateringer til dem er stadig i status som udgivelseskandidat (udgivelse er planlagt til 1. marts).

Problemet er forårsaget af et bufferoverløb i ctypes-funktionen PyCArg_repr(), som opstår på grund af usikker brug af sprintf. Især for at behandle resultatet af transformationen 'sprintf(buffer, " ", self->tag, self->value.b)' tildelte en statisk buffer på 256 bytes ("char buffer[256]"), mens resultatet kunne overstige denne værdi. For at kontrollere applikationers sårbarhed over for sårbarheden kan du prøve at overføre værdien "1e300", som, når den behandles med c_double.from_param-metoden, vil føre til et nedbrud, da det resulterende tal indeholder 308 tegn og ikke passer ind i en 256-byte buffer. Eksempel på problematisk kode: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Problemet forbliver uløst i Debian, Ubuntu og FreeBSD, men er allerede blevet rettet i Arch Linux, Fedora, SUSE. I RHEL opstår sårbarheden ikke på grund af pakkesamling i FORTIFY_SOURCE-tilstand, som blokerer sådanne bufferoverløb i strengfunktioner.

Kilde: opennet.ru

Tilføj en kommentar