Sårbarhed i Python, der opstår ved behandling af ikke-validerede flydende tal i ctypes

Der er tilgængelige rettelser til programmeringssproget Python 3.7.10 og 3.6.13, som løser en sårbarhed (CVE-2021-3177), der kan føre til kørsel af vilkårlig kode ved behandling af usikre floating-point tal i håndteringsfunktioner, der kalder funktioner på C-sprog ved hjælp af ctypes. Problemet påvirker også Python versionerne 3.8 og 3.9, men opdateringer til dem er stadig i kandidatstadiet (udgivelse planlagt til 1. marts).

Problemet opstår på grund af en buffer-overflow i ctypes-funktionen PyCArg_repr(), der skyldes usikker brug af sprintf. Specifikt blev der allokeret en statisk buffer på 256 byte („char buffer[256]“) til at behandle resultatet af ’sprintf(buffer, "", self->tag, self->value.b)’, mens resultatet kunne overskride denne størrelse. For at kontrollere applikationers sårbarhed kan du prøve at sende værdien „1e300“, hvilket ved behandling med metoden c_double.from_param vil føre til nedbrud, da det resulterende tal indeholder 308 cifre og ikke kan være i en 256-byte buffer. Eksempel på problematisk kode: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Problemet er stadig uafhjulpet i Debian, Ubuntu og FreeBSD men er allerede løst i Arch Linux, Fedora, SUSE. I RHEL viser sårbarheden sig ikke på grund af pakkebygning i FORTIFY_SOURCE mode, som blokkerer sådanne buffer-overflows i strengfunktioner.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster