Closed kdps closed 5 years ago
file파라미터 같은 경우 SN파라미터를 추가 참조해서 URL변조가 있었는지 체크를 합니다. 그리고 audioplayback.php에선 파일을 불러오기 이전에 URL변조체크를 하는데, 말씀하신 바를 현재 php파일의 알고리즘에 적용하기엔 말이 안됩니다.
그말은 즉슨, php와는 완전 동떨어진 저세상 mp3파일 내용을 수정했다는 이유로 audioplayback.php 파일의 determineValidParameter 함수 무결성을 통과했다는 말인데요.. 게다가 직접 업로드 되는 시점부터 이미 해킹이 되고 있는게 아닌가요.
애드온을 설치해서 직접 확인해봤습니다. arguments에 Signature가 생략되어 있어서 Signature 파라미터를 지워버리면 그냥 통과가 됩니다. (document_srl,file_srl,mime,ip,timestamp,type)
$Signature = isset($_GET['Signature']) ? $_GET['Signature'] : null;
애초에 hash를 생성할때 Signature 자체를 포함하지 않고 생성되고 있습니다. file도 참조를 안하고 있고요.
직접 테스트한 결과물도 같이 올려드립니다. MP3 파일을 업로드한다는게 서버에 직접 업로드한다는 말이 아니라 첨부파일로 업로드하는걸 말씀드리는겁니다..
혹시나 해서 파일을 다시 한번 다운로드받아서 테스트해봤습니다. 애드온 설정도 몇번 바꿔봤는데 파일 내용이 그대로 출력됩니다.
게시판에 관리자만 업로드하면 문제가 없을건데 다른 사용자도 파일을 업로드를 하는데 GoldWave로 길이를 10초 이하로 자르면 상대경로를 설정하여 경로가 추정되는 모든 파일을 빼내 올 수 있습니다.
혹시나해서 말씀드리는건데 업로드할 파일을 GoldWave로 수정하고 BurpSuite로 파라미터만 수정했지 애드온을 수정하거나 백엔드쪽 파일을 수정한건 단 한건도 없습니다.
추가 첨부해주신 자료로 해당 취약점에 대한 정보를 확인하였고 수정 및 반영하였습니다. 제보해주셔서 감사합니다.
https://github.com/huhani/xe-simple-mp3-player/commit/ec44ff5643fbd5d412a4c07b20e657aa8c12e290
MP3 파일을 Goldwave로 잘라서 가져올 파일보다 작게 만들어 업로드 한 후 해당 게시글에 들어간 후 audioplayback.php 요청에서 Signature을 지우고 file에 상대경로를 입력 (예 : files/config/db.config.php, addons/simple_mp3_player/__password.php)하면 중요파일을 가져올 수 있습니다.
암호화 URL 요청시 Signature을 필수로 해야할것같습니다. 그리고 일반 요청시에 file GET 파라미터를 필터링해야할것같습니다.