
Эксплойт proof-of-concept для произвольного выполнения кода через DCP URI-схему Real Player, использующий подсадку файлов и обход элемента управления ActiveX.
Real Player 'DCP://' URI Remote Arbitrary Code Execution Vulnerability
видео-демонстрация: https://youtu.be/AMODp3iTnqY
Схема URI 'DCP://' — это внутренний протокол, используемый Real Player для получения URL-адресов, отображаемых на вкладке браузера плеера. Она расшифровывается как 'Data Cache Protocol'. Протокол извлекает файлы из '%appdata%\real\realplayer'. Эти файлы представляют собой простые '.ini'-файлы со следующим кодом:
Похоже, что атрибут 'offlineurl' игнорируется, однако можно передавать произвольные URL-адреса, включая URL-адреса локальных файлов и небезопасные URI 'Javascript:'.
Пример: dcp://custom.ini
Это потенциально создаёт универсальное условие межсайтового скриптинга (uXSS).
Real Player использует функциональность Microsoft Internet Explorer и предоставляет свойства и методы через особый механизм, специфичный для приложения:
Объект 'external' предоставляет несколько пользовательских методов и свойств.
Нельзя получить удалённые файлы, но можно использовать родительские каталоги (..) для получения файлов. Для этого можно использовать метод 'external::OpenURLInPlayerBrowser()'
Комбинируя эту проблему с проблемой подсадки файлов через метод 'external::RecordClip()', можно подсадить валидные '.ini'-файлы (хотя они и без расширения) в предсказуемое место:
'Videos\RealPlayer Downloads'.
Подсадив 2 файла и затем ссылаясь на них через URI 'DCP://', можно указать URL-адрес, относящийся к произвольному домену или "зоне безопасности" (зоны безопасности Windows), и внедрить пользовательский javascript-код.
В PoC используется код, который заставляет запрос на небезопасные элементы ActiveX "сдаться" и запускает MSHTA, указывающий на второй файл, содержащий код для запуска 'cmd.exe'. Он может содержать, например, встроенный EXE-файл.
Чтобы воспроизвести эту проблему, достаточно отредактировать файлы и заменить '%server%' на фактическое имя сервера или IP-адрес. Также замените '%username%' на фактическое имя пользователя Windows в файлах 'dcp1.txt' и 'rp_dcp.htm'
Примечание: имя пользователя Windows можно получить с помощью запросов к SMB-серверу или WebDAV-серверу.
Затронутые версии: 16.0.3.51, Cloud 17.0.9.17, v.20.0.7.309 в любой версии Windows (от XP до 11)