In de belangrijkste implementatie van de programmeertaal R, gericht op het oplossen van vraagstukken op het gebied van statistische verwerking, data-analyse en visualisatie, is een kritieke kwetsbaarheid (CVE-2024-27322) ontdekt die leidt tot code-uitvoering tijdens het deserialiseren van ongecontroleerde gegevens. De kwetsbaarheid kan worden misbruikt bij de verwerking van speciaal opgemaakte bestanden in de formaten RDS (R Data Serialization) en RDX, die worden gebruikt voor gegevensuitwisseling tussen applicaties. Het probleem is verholpen in de release R 4.4.0. U kunt de release van pakketupdates in distributies volgen op de pagina's van Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD.
De kwetsbaarheid wordt veroorzaakt door een eigenaardigheid in de werking van de functie readRDS, die wordt gebruikt voor het laden van bestanden in de formaten RDS en RDX, die de overdracht van geserialiseerde R-objecten voor verwerking op een ander systeem mogelijk maken. Serialisatie maakt het mogelijk om de status vast te leggen en datasets tussen programma's uit te wisselen. Het RDS-formaat maakt het mogelijk om de status van ƩƩn enkel object op te slaan, terwijl het RDX-formaat in combinatie met RDB-bestanden de overdracht van informatie over meerdere objecten mogelijk maakt. Het probleem houdt verband met het feit dat het RDS-formaat de objectcode PROMSXP ondersteunt, die is gekoppeld aan het Promise-type, dat wordt gebruikt om expressies aan te geven die asynchroon worden uitgevoerd tijdens het gebruik van de bijbehorende waarden.
Bij het deserialiseren van een Promise-object worden drie componenten gebruikt: de waarde van de Promise, de expressie en de omgeving. Als er voor het Promise-type geen vooraf berekende waarde is opgegeven, wordt deze berekend tijdens het deserialiseren door de expressie uit te voeren met behulp van de functie 'eval'. Hierdoor kan een aanvaller willekeurige code in de R-taal uitvoeren door deze in te voegen in plaats van de expressie die verband houdt met niet-berekenbare waarden in de RDS- of RDX-bestanden.
Bron: opennet.ru
