Уязвимость в реализации языка R, позволяющая выполнить код при обработке файлов rds и rdx

В основной реализации языка программирования R, ориентированного на решение задач по статистической обработке, анализу и визуализации данных, выявлена критическая уязвимость (CVE-2024-27322), приводящая к выполнению кода при выполнении десериализации непроверенных данных. Уязвимость может быть эксплуатирована при обработке специально оформленных файлов в форматах RDS (R Data Serialization) и RDX, применяемых для обмена данными между приложениями. Проблема устранена в выпуске R 4.4.0. Проследить за выпуском обновлений пакетов в дистрибутивах можно на страницах Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD.

Уязвимость вызвана особенностью работы функции readRDS, используемой для загрузки файлов в форматах RDS и RDX, которые позволяют передавать сериализированные объекты R для обработки на другой системе. Сериализация даёт возможность зафиксировать состояние и обмениваться наборами данных между программами. Формат RDS позволяет хранить состояние об одном обхекте, а формат RDX в сочетании с файлами RDB даёт возможность передавать сведения о нескольких объектах. Проблема связана с тем, что формат RDS поддерживает объектный код PROMSXP, связанный с типом Promise, который применяется для определения выражений, вызываемых в асинхронном режиме во время использования ассоциированных с ними значений.

Во время десериализации для определения объекта Promise используются три составляющих – значение Promise, выражение и окружение. Если для типа Promise не задано предварительно вычисленное значение, то оно вычисляется при десериализации через выполнение выражения при помощи функции “eval”. Таким образом атакующий может добиться выполнения произвольного кода на языке R, подставив его вместо выражения, связанного с невычисленными значениями в файлах RDS или RDX.

Release. Ссылка here.