
Exploit proof-of-concept per l'esecuzione arbitraria di codice tramite lo schema URI DCP di Real Player, che sfrutta il file planting e il bypass del controllo ActiveX.
Vulnerabilità di esecuzione arbitraria di codice da remoto tramite l'URI 'DCP://' di Real Player
Video demo: https://youtu.be/AMODp3iTnqY
Lo schema URI 'DCP://' è un protocollo interno usato da Real Player per recuperare URL da visualizzare nella scheda del browser del Player. Sta per 'Data Cache Protocol'. Recupera i file da '%appdata%\real\realplayer'. Questi file sono semplici file '.ini' con il seguente codice:
L'attributo 'offlineurl' sembra essere ignorato, tuttavia è possibile passare URL arbitrari, inclusi URL a file locali e URI 'Javascript:' non sicuri.
Esempio: dcp://custom.ini
Questo potenzialmente crea una condizione universale di cross site scripting (uXSS).
Real Player usa le funzionalità di Microsoft Internet Explorer ed espone proprietà e metodi attraverso un mezzo speciale specifico dell'applicazione:
L'oggetto 'external' espone diversi metodi e proprietà personalizzati.
Non è possibile recuperare file remoti, ma è possibile usare le directory padre (..) per recuperare i file. Per farlo possiamo usare il metodo 'external::OpenURLInPlayerBrowser()'
Combinando questo problema con un problema di file planting tramite il metodo 'external::RecordClip()', siamo in grado di piantare file '.ini' validi (anche se senza estensione) in una posizione prevedibile:
'Videos\RealPlayer Downloads'.
Piantando 2 file e facendovi ulteriormente riferimento tramite un URI 'DCP://', è possibile referenziare un URL appartenente a un dominio arbitrario o a una "security zone" (zone di sicurezza di Windows) e quindi iniettare codice javascript personalizzato.
Il PoC usa codice che fa sì che il prompt per i controlli ActiveX non sicuri venga "sconfitto" e che venga eseguito MSHTA puntando al secondo file che contiene codice per eseguire 'cmd.exe'. Potrebbe contenere ad es. un EXE incorporato.
Per riprodurre questo problema, tutto ciò che serve è modificare i file e sostituire '%server%' con il nome host o l'IP del server effettivo. Sostituire anche '%username%' con il nome utente Windows effettivo del target nei file 'dcp1.txt' e 'rp_dcp.htm'
Nota: il nome utente Windows può essere ottenuto tramite richieste a un server SMB o WebDAV.
Versioni interessate: 16.0.3.51, Cloud 17.0.9.17, v.20.0.7.309 su qualsiasi versione di Windows (da XP a 11)