The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

30.04.2024 10:31

В основной реализации языка программирования 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.

  1. Главная ссылка к новости (https://www.openwall.com/lists...)
  2. OpenNews: Доступен язык программирования R 4.0
  3. OpenNews: В реализации криптовалюты Monero выявлены две критические уязвимости
  4. OpenNews: Oracle планирует убрать из Java встроенную поддержку сериализации
  5. OpenNews: Уязвимость в Apache Tomcat, допускающая удалённое выполнение кода
  6. OpenNews: В репозитории Hugging Face выявлены вредоносные AI-модели, выполняющие код
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/61093-rlang
Ключевые слова: rlang
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (22) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.4, Аноним (4), 11:30, 30/04/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Кому интересно - могут почитать ещё https://codeberg.org/KFmts/kaitai_struct_formats/src/branch/RData/serializatio
     
  • 1.5, Аноним (5), 11:50, 30/04/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Ну R очень специфический язык, используется для научных разработок. И кому нужно использовать такие CVE?
     
     
  • 2.16, Аноним (16), 17:54, 30/04/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Доступ к вычислительным кластерам может быть интересен СГА, например, с целью саботировать очередные центрифуги. Говорю же, всё не случайно в серьёзных внедрениях.
     
     
  • 3.29, Аноним (29), 16:02, 01/05/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Доступ к вычислительным кластерам может быть интересен СГА, например, с целью саботировать
    > очередные центрифуги. Говорю же, всё не случайно в серьёзных внедрениях.

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

     
     
  • 4.31, Аноним (16), 16:14, 01/05/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Центрифугам вряд ли необходим, а вот организациями, производящими расчёты и строительство, очень даже может применяться. И какие теории, если это общепризнанный факт и не секрет?
     
     
  • 5.34, Аноним (34), 22:46, 01/05/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Центрифугам вряд ли необходим, а вот организациями, производящими расчёты и строительство,
    > очень даже может применяться. И какие теории, если это общепризнанный факт и не секрет?

    Фэйл этого плана в том что все это врядли к центрифугам подключено будет, и изначально заявляемая цель немножечко недостижима :)

     
     
  • 6.37, Аноним (16), 23:30, 01/05/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Так центрифуги тоже не были подключены, почитай на досуге. Поправить расчёты может быть интересней чем майнить крипту.
     
     
  • 7.38, Аноним (-), 20:36, 02/05/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Так центрифуги тоже не были подключены, почитай на досуге.

    Так я тоже читал. И ума не приложу - как R с этим всем может пересечься, чтобы оно еще и полезно было?

    > Поправить расчёты может быть интересней чем майнить крипту.

    Тут как бы сильно зависит что, где и как - и к тому же на такую граблю можно встать и самому. Ибо нефиговый риск что какой-то ремотный 31337 сделает то же самое. Just because they can!

     
  • 2.28, Бывалый Смузихлёб (ok), 12:42, 01/05/2024 [^] [^^] [^^^] [ответить]  
  • +/
    научные разработки такие научные
     

  • 1.8, commiethebeastie (ok), 12:42, 30/04/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    >то оно вычисляется при десериализации через выполнение выражения при помощи функции "eval"

    Что же могло пойти не так.

     
     
  • 2.9, Аноним (9), 13:11, 30/04/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    блин, ну зачем спалили, теперь новую уязвимость придумывать
     
     
  • 3.26, Аноним (26), 11:35, 01/05/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Назвовём новую eval2
     

  • 1.12, Аноним (-), 16:33, 30/04/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > десериализации через выполнение выражения при помощи
    > функции "eval".

    Теперь вы знаете как искать бэкдоры и вулны. Если в сишке это system() то в скриптоте это eval :)

     
     
  • 2.13, Аноним (4), 17:09, 30/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо, кэп, а то мы не знали!

    >Если в сишке это system() то в скриптоте это eval

    Прямо в liblzma - system?

     
     
  • 3.20, Аноним (-), 20:45, 30/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Спасибо, кэп, а то мы не знали!
    >>Если в сишке это system() то в скриптоте это eval
    > Прямо в liblzma - system?

    Ну вот этот решил разнообразие проявить - нагомнякал в сборочной системе какую-то муть. И да, тут на опеннете в свое время сплойт описывали в новостях. Сразу не понравился мутным кодом. Догадайтесь, что про него вскоре было написано в следующей новости.

    Так что если код кажется мутным и непонятным - слать его в пень, без всяких колебаний.

     
  • 2.18, тыквенное латте (?), 18:01, 30/04/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Если в сишке это system()

    использую popen. но есть подозрения что кто-то сможет передать программе данные через пайп. Надо удалить, или переписать на безопастном (с).

     
     
  • 3.22, Аноним (-), 21:11, 30/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >> Если в сишке это system()
    > использую popen. но есть подозрения что кто-то сможет передать программе данные через
    > пайп. Надо удалить, или переписать на безопастном (с).

    В system() проблема в том что если програмер лох, атакующему который контролирует ввод легко срубить текущую команду - и донавесить своих внагрузку. Зафильтровать можно, но лучше взять за правило никогда не вызывать system() с данными контролируемыми внешним миром. Это почти как шелл внешнему миру вывесить.

    А eval().. я как-то посмотрел сорц bitmessage, там жуткое спагетти и вот это. Я решил что такой сблюв я юзать не бу. Чутье не подвело - через полгодика кто-то подтвердил что таки - бэкдор это.

     
  • 2.27, Аноним (26), 11:57, 01/05/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Если в сишке это system()

    В Сишке самая главная - это a[i], где i>=sizeof(a)/sizeof(Type_a)

     
     
  • 3.30, Аноним (29), 16:08, 01/05/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >>Если в сишке это system()
    > В Сишке самая главная - это a[i], где i>=sizeof(a)/sizeof(Type_a)

    Это поди еще там заэксплуатируй на современной системе с всеми костылями и секуритифичами. А system() - халява, сэр!

     
     
  • 4.32, Аноним (32), 18:06, 01/05/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Приведите пример что такого можно передать в system
     
     
  • 5.35, Аноним (34), 22:54, 01/05/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Приведите пример что такого можно передать в system

    Ман недвусмысленно говорит:




    Any user input that is employed as part of command should be carefully sanitized,
    to ensure that unexpected shell commands or command options are not executed.
    Such risks are especially grave when using system() from a privileged program.


    Т.е. например если оно там где-то берет параметр из юзерского ввода, вбить в ввод нечто типа "abc; ls -la / > /tmp/wtf" - и посмотреть не прокатит ли такой номер?! Это по сути вызов шелла. И если прогер лох - ну, упс, как тебе такой ввод "параметра" шеллу? :). Идея таких сплойтов: первая часть закрывает легитимную команду. Вторая - донавешивает незапланированые бонусы после этого. Конкретика первой части может немного меняться, в зависимости от того что там програмер делал, но идея остается.

     
     
  • 6.39, Аноним (39), 03:15, 04/05/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ой, вот так прям эксплоит. Я думал там  серьёзная проблема есть.
     
     
  • 7.40, Аноним (40), 03:59, 04/05/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Ой, вот так прям эксплоит. Я думал там  серьёзная проблема есть.

    Да вот dumb f...s которые считают что пользовательскому или ремотному вводу можно доверять - не заканчиваются. Тем хуже для них. Наше дело - кукарекнуть, а потом кто не спрятался я не виноват. Вы не представляете себе сколько таких дятлов на этой планете.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру