
Proof-of-Concept-Exploit für RealPlayer: Beliebiger Datei-Download und Directory Traversal führen über die Import()-Methode zu Remote-Codeausführung.
Real Player 'external::Import()' Beliebiges Herunterladen von Dateien, Directory-Traversal-Schwachstellen führen zu Remote Code Execution
Video-Demo: https://youtu.be/CONlijEgDLc
Real Player nutzt Funktionen von Microsoft Internet Explorer und legt Eigenschaften und Methoden über ein spezielles, anwendungsspezifisches Mittel offen:
Das Objekt 'external' legt mehrere benutzerdefinierte Methoden und Eigenschaften offen.
Die Methode 'Import()' wird in Bezug auf den Parameter 'Copy to My Music' auf unsichere Weise behandelt, was das Herunterladen beliebiger Dateitypen ermöglicht. Dies könnte unsicher sein, da nur Audio-/Bild-/Video-Typen auf die Festplatte des Benutzers heruntergeladen werden sollten. Darüber hinaus werden Dateipfade nicht ordnungsgemäß bereinigt, sodass beliebige Dateien an beliebigen Orten platziert werden können. Obwohl ein Fehler angezeigt wird, weil die heruntergeladene Datei nicht gerendert werden kann, bleibt die Datei erhalten, bis der Benutzer den Dialog schließt. Darüber hinaus sucht Real Player beim Öffnen neuer Fenster nach einer alten, veralteten IE-Bibliothek (shdoclc.dll), die ebenfalls missbraucht werden kann, um Code automatisch auszuführen, ohne auf einen Neustart warten zu müssen (dies trifft zu, wenn die Datei im Ordner 'startup' platziert wird).
Der Angreifer muss die zu kopierenden/herunterzuladenden Dateien in einer SMB- oder WebDav-Freigabe bereitstellen. Das Verzeichnis 'appdata' muss im Stammverzeichnis der Freigabe platziert werden.
Außerdem hilft eine DoS-Bedingung in 'external.PreloadURL()' dabei, dass die Dateien nicht von Real Player gelöscht werden.
Der PoC legt 'shdoclc.dll' (verfügt über einfachen Code, um 'cmd.exe' in 'DllMain()' zu Demonstrationszwecken auszuführen) im Ordner 'windowsapps' des Benutzers ab und 'write.exe' im Ordner 'startup', sodass es universell funktioniert (jede Windows-Version von mindestens XP bis 11).
Getestet auf RP-Version 16.00.282, 16.0.3.51, Cloud 17.0.9.17, v.20.0.7.309