Уязвимость в Discord позволяла удаленно выполнить произвольный код

Недавно ИБ-исследователь Масато Кинугава (Masato Kinugawa) рассказал в своем блоге, как ему удалось создать работающую цепочку из нескольких уязвимостей (и эксплоитов для них), ведущую к удаленному исполнению произвольного кода в «настольной» версии мессенджера Discord.


Первую проблему эксперт обнаружил во фреймворке Electron, который используется десктопной версией Discord. Хотя сам Discord не является опенсорсным приложением, код JavaScript, который использует Electron, сохраняется локально и может быть извлечен и исследован. Именно так исследователь выяснил, что для одной из настроек (contextIsolation) в Electron для Discord было установлено значение false, и это обстоятельство позволяло внешнему JavaScript-коду ­влиять на код внутренний, к примеру,  функцию Node.js.

«Подобное поведение опасно, так как Electron позволяет JavaScript-коду за пределами веб-страниц использовать Node.js независимо от nodeIntegration, что в итоге может привести к удаленному выполнению произвольного кода, даже если для nodeIntegration установлено значение false», — пишет Кинугава.

Так как теперь исследователю понадобился способ выполнения JavaScript в приложении, это привело его к обнаружению XSS-бага в iframe, используемом для отображения видео в чате (срабатывает, если в чат вставляют ссылку, например, из YouTube). Таким образом Кинугава добрался до Sketchfab, решения предназначенного для просмотра 3D-контента. Sketchfab внесен в белый список Discord и может быть встроен в iframe, а при этом можно эксплуатировать DOM XSS-баг.

Однако этот баг позволял исследователю выполнять JavaScript в iframe, но не выполнить код в самой десктопной версии Discord. В итоге, пытаясь развить свою атаку дальше, Кинугава обнаружил способ обхода ограничений в Electron, связанный с событием will-navigate. Данная уязвимость получила идентификатор CVE-2020-15174. В сочетании с двумя другими багами, описанными выше, она наконец позволила специалисту осуществить RCE-атаку на Discord.

Эксперт передал результаты своих изысканий в официальную программу bug bounty Discord, и в настоящее время разработчики уже отключили встраивание Sketchfab и добавили песочницу для iframe. Масато Кинугава получил от Discord вознаграждение за обнаруженные уязвимости в размере 5000 долларов США, а также получил еще 300 долларов от авторов Sketchfab за обнаружение XSS.

Источник: https://xakep.ru/2020/10/22/discord-rce/