Новая уязвимость в программировании R подвергает проекты атакам по цепочке поставок

Father

Professional
Messages
2,394
Reputation
4
Reaction score
544
Points
113
В языке программирования R была обнаружена уязвимость в системе безопасности, которая может быть использована субъектом угрозы для создания вредоносного файла RDS (сериализации данных R), который приводит к выполнению кода при загрузке и обращении к нему.

Ошибка, которой присвоен идентификатор CVE CVE-2024-27322, "включает в себя использование объектов promise и отложенную оценку в R", - говорится в отчете компании HiddenLayer, занимающейся безопасностью приложений искусственного интеллекта, опубликованном в Hacker News.

RDS, как и pickle в Python, представляет собой формат, используемый для сериализации и сохранения состояния структур данных или объектов в R, языке программирования с открытым исходным кодом, используемом в статистических вычислениях, визуализации данных и машинном обучении.

Этот процесс сериализации - serialize() или saveRDS() - и десериализации – unserialize() и readRDS() – также используется при сохранении и загрузке пакетов R.

Основная причина CVE-2024-27322 заключается в том, что это может привести к выполнению произвольного кода при десериализации ненадежных данных, что делает пользователей уязвимыми для атак по цепочке поставок через специально созданные пакеты R.

Злоумышленник, стремящийся использовать уязвимость в своих целях, может воспользоваться тем фактом, что пакеты R используют формат RDS для сохранения и загрузки данных, вызывая автоматическое выполнение кода при распаковке и десериализации пакета.


"Пакеты R уязвимы для этого эксплойта и, следовательно, могут быть использованы как часть атаки по цепочке поставок через репозитории пакетов", - заявили исследователи безопасности Казимир Шульц и Киран Эванс. "Чтобы злоумышленник завладел пакетом R, все, что ему нужно сделать, это перезаписать rdx-файл вредоносно созданным файлом, и когда пакет будет загружен, он автоматически выполнит код ".

Дефект безопасности был устранен в версии 4.4.0, выпущенной 24 апреля 2024 года после ответственного раскрытия.

"Злоумышленник может воспользоваться этим [недостатком], создав файл в формате RDS, который содержит инструкцию promise, устанавливающую значение равным unbound_value, а выражение - содержать произвольный код", - сказал HiddenLayer. "Из-за отложенного вычисления выражение будет вычисляться и выполняться только при обращении к символу, связанному с файлом RDS".

"Следовательно, если это просто файл RDS, когда пользователь присваивает ему символ (переменную) для работы с ним, произвольный код будет выполняться, когда пользователь ссылается на этот символ. Если объект скомпилирован в пакете R, пакет может быть добавлен в репозиторий R, такой как CRAN, и выражение будет вычислено и произвольный код будет запущен, когда пользователь загрузит этот пакет."
 
Top