
Real Player의 DCP URI 스킴을 통한 임의 코드 실행을 위한 개념 증명 익스플로잇으로, 파일 심기 및 ActiveX 컨트롤 우회를 활용합니다.
Real Player 'DCP://' URI 원격 임의 코드 실행 취약점
동영상 데모: https://youtu.be/AMODp3iTnqY
'DCP://' URI 스킴은 Real Player가 플레이어 브라우저 탭에 표시할 URL을 가져오는 데 사용하는 내부 프로토콜입니다. 이는 'Data Cache Protocol'을 의미합니다. '%appdata%\real\realplayer'에서 파일을 검색합니다. 이 파일들은 다음 코드를 포함하는 단순한 '.ini' 파일입니다:
'offlineurl' 속성은 무시되는 것처럼 보이지만, 로컬 파일 URL과 안전하지 않은 'Javascript:' URI를 포함한 임의의 URL을 전달하는 것이 가능합니다.
예: dcp://custom.ini
이는 잠재적으로 유니버설 크로스 사이트 스크립팅(uXSS) 조건을 생성합니다.
Real Player는 Microsoft Internet Explorer 기능을 사용하며, 애플리케이션별 특수 수단을 통해 속성과 메서드를 노출합니다:
'external' 객체와 그 객체가 노출하는 여러 사용자 지정 메서드 및 속성입니다.
원격 파일을 검색하는 것은 불가능하지만, 상위 디렉터리(..)를 사용하여 파일을 검색할 수 있습니다. 이를 위해 'external::OpenURLInPlayerBrowser()' 메서드를 사용할 수 있습니다.
이 문제를 'external::RecordClip()' 메서드의 파일 심기 문제와 결합하면, 예측 가능한 위치에 유효한 '.ini' 파일(확장자가 없지만)을 심을 수 있습니다:
'Videos\RealPlayer Downloads'.
2개의 파일을 심은 다음 'DCP://' URI를 통해 이를 참조하면 임의 도메인 또는 "보안 영역"(Windows 보안 영역)에 속하는 URL을 참조하고 사용자 지정 javascript 코드를 주입할 수 있습니다.
PoC는 안전하지 않은 ActiveX 컨트롤에 대한 프롬프트를 "무력화"하고 'cmd.exe'를 실행하는 코드가 포함된 두 번째 파일을 가리키는 MSHTA를 실행하는 코드를 사용합니다. 예를 들어 내장된 EXE를 포함할 수 있습니다.
이 문제를 재현하려면 파일을 편집하고 '%server%'를 실제 서버 호스트 이름 또는 IP로 교체하기만 하면 됩니다. 또한 'dcp1.txt' 및 'rp_dcp.htm' 파일에서 '%username%'을 대상의 실제 Windows 사용자 이름으로 교체하세요.
참고: Windows 사용자 이름은 SMB 서버 또는 WebDAV 서버에 대한 요청을 통해 얻을 수 있습니다.
영향을 받는 버전: 16.0.3.51, Cloud 17.0.9.17, v.20.0.7.309 모든 Windows 버전(XP~11)에서