W głównej implementacji języka programowania R, skoncentrowanego na rozwiązywaniu problemów związanych z przetwarzaniem, analizą i wizualizacją danych, wykryto krytyczną lukę (CVE-2024-27322), prowadzącą do wykonania kodu podczas deserializacji niezweryfikowanych danych. Luka ta może być wykorzystywana podczas przetwarzania specjalnie sformatowanych plików w formatach RDS (R Data Serialization) i RDX, stosowanych do wymiany danych między aplikacjami. Problem został rozwiązany w wydaniu R 4.4.0. Informacje o wydaniach aktualizacji pakietów w dystrybucjach można śledzić na stronach Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD.
Luka ta jest spowodowana specyfiką działania funkcji readRDS, używanej do ładowania plików w formatach RDS i RDX, które umożliwiają przesyłanie serializowanych obiektów R do przetworzenia na innym systemie. Serializacja pozwala zarejestrować stan i wymieniać zbiory danych pomiędzy programami. Format RDS umożliwia przechowywanie stanu jednego obiektu, natomiast format RDX w połączeniu z plikami RDB pozwala przesyłać informacje o wielu obiektach. Problem związany jest z tym, że format RDS obsługuje kod obiektowy PROMSXP, związany z typem Promise, który jest wykorzystywany do definiowania wyrażeń wywoływanych w trybie asynchronicznym podczas korzystania z towarzyszących im wartości.
Podczas deserializacji do identyfikacji obiektu Promise wykorzystywane są trzy składniki — wartość Promise, wyrażenie i środowisko. Jeśli dla typu Promise nie jest wcześniej ustawiona wartość obliczona, wówczas jest ona obliczana podczas deserializacji poprzez wykonanie wyrażenia przy użyciu funkcji „eval”. W ten sposób atakujący może wykonać dowolny kod w języku R, podstawiając go zamiast wyrażenia związanym z nieobliczonymi wartościami w plikach RDS lub RDX.
Źródło: opennet.ru
