基于检索的语音转换 WebUI 中存在多个漏洞

基于检索的语音转换 WebUI 中存在多个漏洞

总结

Retrieval-based-Voice-Conversion-WebUI 容易受到命令行注入的攻击

项目

基于检索的语音转换 WebUI

问题 1:infer-web.py 中的命令注入preprocess_dataset (GHSL-2025-012)

变量 、 和 获取用户输入并将其传递给函数,该函数将它们连接成在服务器上运行的命令。这可能导致任意命令执行。exp_dir1np7trainset_dir4sr2preprocess_dataset

def preprocess_dataset(trainset_dir, exp_dir, sr, n_p):
    sr = sr_dict[sr]
    os.makedirs("%s/logs/%s" % (now_dir, exp_dir), exist_ok=True)
    f = open("%s/logs/%s/preprocess.log" % (now_dir, exp_dir), "w")
    f.close()
    cmd = '"%s" infer/modules/train/preprocess.py "%s" %s %s "%s/logs/%s" %s %.1f' % (
        config.python_cmd,
        trainset_dir,
        sr,
        n_p,
        now_dir,
        exp_dir,
        config.noparallel,
        config.preprocess_per,
    )
冲击

此问题可能会导致任意命令执行。

CWEs
  • CWE-77:命令中使用的特殊元素的不当中和(“命令注入”)

问题 2:infer-web.py 中的命令注入extract_f0_feature (GHSL-2025-013)

变量 ,并获取用户输入并将其传递给函数,函数将它们连接成在服务器上运行的命令。这可能导致任意命令执行。请注意,这些命令在函数中多次运行,并且必须修复所有这些命令以防止命令行注入:exp_dir1np7f0method8extract_f0_featureextract_f0_feature

  • https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/7ef19867780cf703841ebafb565a4e47d1ea86ff/infer-web.py#L276-L278
  • https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/7ef19867780cf703841ebafb565a4e47d1ea86ff/infer-web.py#L307-L309
  • https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/7ef19867780cf703841ebafb565a4e47d1ea86ff/infer-web.py#L330-L332
  • https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/7ef19867780cf703841ebafb565a4e47d1ea86ff/infer-web.py#L373-L375
    def extract_f0_feature(gpus, n_p, f0method, if_f0, exp_dir, version19, gpus_rmvpe):
      gpus = gpus.split("-")
      os.makedirs("%s/logs/%s" % (now_dir, exp_dir), exist_ok=True)
      f = open("%s/logs/%s/extract_f0_feature.log" % (now_dir, exp_dir), "w")
      f.close()
      if if_f0:
          if f0method != "rmvpe_gpu":
              cmd = (
                  '"%s" infer/modules/train/extract/extract_f0_print.py "%s/logs/%s" %s %s'
                  % (
                      config.python_cmd,
                      now_dir,
                      exp_dir,
                      n_p,
                      f0method,
                  )
              )
              logger.info("Execute: " + cmd)
              p = Popen(
                  cmd, shell=True, cwd=now_dir
              )  # , stdin=PIPE, stdout=PIPE,stderr=PIPE
    
冲击

此问题可能会导致任意命令执行。

CWEs
  • CWE-77:命令中使用的特殊元素的不当中和(“命令注入”)

问题 3:infer-web.py 中的命令注入click_train (GHSL-2025-014)

变量 ,除其他外,获取用户输入并将其传递给函数,函数将它们连接成在服务器上运行的 here 和 here 命令。这可能导致任意命令执行。exp_dir1click_train

    if gpus16:
        cmd = (
            '"%s" infer/modules/train/train.py -e "%s" -sr %s -f0 %s -bs %s -g %s -te %s -se %s %s %s -l %s -c %s -sw %s -v %s'
            % (
                config.python_cmd,
                exp_dir1,
                sr2,
                1 if if_f0_3 else 0,
                batch_size12,
                gpus16,
                total_epoch11,
                save_epoch10,
                "-pg %s" % pretrained_G14 if pretrained_G14 != "" else "",
                "-pd %s" % pretrained_D15 if pretrained_D15 != "" else "",
                1 if if_save_latest13 == i18n("是") else 0,
                1 if if_cache_gpu17 == i18n("是") else 0,
                1 if if_save_every_weights18 == i18n("是") else 0,
                version19,
            )
        )
    else:
        cmd = (
            '"%s" infer/modules/train/train.py -e "%s" -sr %s -f0 %s -bs %s -te %s -se %s %s %s -l %s -c %s -sw %s -v %s'
            % (
                config.python_cmd,
                exp_dir1,
                sr2,
                1 if if_f0_3 else 0,
                batch_size12,
                total_epoch11,
                save_epoch10,
                "-pg %s" % pretrained_G14 if pretrained_G14 != "" else "",
                "-pd %s" % pretrained_D15 if pretrained_D15 != "" else "",
                1 if if_save_latest13 == i18n("是") else 0,
                1 if if_cache_gpu17 == i18n("是") else 0,
                1 if if_save_every_weights18 == i18n("是") else 0,
                version19,
            )
        )
    logger.info("Execute: " + cmd)
    p = Popen(cmd, shell=True, cwd=now_dir)
冲击

此问题可能会导致任意命令执行。

CWEs
  • CWE-77:命令中使用的特殊元素的不当中和(“命令注入”)

问题 4:infer-web.py 中的代码注入change_info_ (GHSL-2025-015)

该变量接受用户输入(例如模型的路径)并将其传递给 function,函数打开并读取给定路径上的文件(除了它将路径上的 final 更改为 ),并将文件的内容传递给 eval,这可能导致远程代码执行。ckpt_path2change_info_train.log

def change_info_(ckpt_path):
    if not os.path.exists(ckpt_path.replace(os.path.basename(ckpt_path), "train.log")):
        return {"__type__": "update"}, {"__type__": "update"}, {"__type__": "update"}
    try:
        with open(
            ckpt_path.replace(os.path.basename(ckpt_path), "train.log"), "r"
        ) as f:
            info = eval(f.read().strip("\n").split("\n")[0].split("\t")[-1])
冲击

This issue may lead to .remote code execution

CWEs
  • CWE-94: Improper Control of Generation of Code (‘Code Injection’)

Issue 5: unsafe deserialization in process_ckpt.py function (show_infoGHSL-2025-016)

The variable takes user input (e.g. a path to a model) and passes it to the function in , which uses it to load the model on that path with torch.load, which can lead to unsafe deserialization.ckpt_path1show_infoprocess_ckpt.py

def show_info(path):
    try:
        a = torch.load(path, map_location="cpu")
冲击

此问题可能导致远程代码执行。

CWEs
  • CWE-502:不受信任数据的反序列化

Issue 6:process_ckpt.py 函数中不安全的反序列化 (extract_small_modelGHSL-2025-017)

该变量接受用户输入(例如模型的路径)并将其传递给 中的函数,该函数使用它通过 torch.load 在该路径上加载模型,这可能导致不安全的反序列化。ckpt_path2extract_small_modelprocess_ckpt.py

def extract_small_model(path, name, sr, if_f0, info, version):
    try:
        ckpt = torch.load(path, map_location="cpu")
冲击

此问题可能导致远程代码执行。

CWEs
  • CWE-502:不受信任数据的反序列化

问题 7:process_ckpt.py 函数中不安全的反序列化 (change_infoGHSL-2025-018)

该变量接受用户输入(例如模型的路径)并将其传递给 中的函数,该函数使用它通过 torch.load 在该路径上加载模型,这可能导致不安全的反序列化。ckpt_path0change_infoprocess_ckpt.py

def change_info(path, info, name):
    try:
        ckpt = torch.load(path, map_location="cpu")
冲击

此问题可能导致远程代码执行。

CWEs
  • CWE-502:不受信任数据的反序列化

Issue 8:process_ckpt.py 函数 (mergeGHSL-2025-019)

and 变量在这里和这里获取用户输入(例如模型的路径)并将其传递给 中的函数,该函数使用它们通过 torch.load 在这些路径上加载模型,这可能会导致不安全的反序列化。ckpt_acpkt_bmergeprocess_ckpt.py

def merge(path1, path2, alpha1, sr, f0, info, name, version):
    try:

        def extract(ckpt):
            a = ckpt["model"]
            opt = OrderedDict()
            opt["weight"] = {}
            for key in a.keys():
                if "enc_q" in key:
                    continue
                opt["weight"][key] = a[key]
            return opt

        ckpt1 = torch.load(path1, map_location="cpu")
        ckpt2 = torch.load(path2, map_location="cpu")
冲击

此问题可能导致远程代码执行。

CWEs
  • CWE-502:不受信任数据的反序列化

问题 9:export.py 中的不安全反序列化 (GHSL-2025-020)

该变量接受用户输入(例如模型的路径)并将其传递给 中的函数,该函数使用它通过 torch.load 在该路径上加载模型,这可能导致不安全的反序列化。ckpt_dirchange_infoexport.py

def export_onnx(ModelPath, ExportedPath):
    cpt = torch.load(ModelPath, map_location="cpu")
冲击

此问题可能导致远程代码执行。

CWEs
  • CWE-502:不受信任数据的反序列化

Issue 10: vr.py 中的不安全反序列化AudioPre (GHSL-2025-021)

该变量接受用户输入(例如模型的路径)并将其传递给 中的函数。在 中,使用 包含 aformentioned 用户输入的属性(此处称为 local )创建 class 的新实例。请注意,在此步骤中,已将扩展添加到路径中。model_chooseuvrvr.pyuvrAudioPremodel_pathmodel_name.pth

在该类中,用户输入(此处称为 )用于使用 torch.load 在该路径上加载模型,这可能导致不安全的反序列化。AudioPremodel_path

class AudioPre:
    def __init__(self, agg, model_path, device, is_half, tta=False):
        self.model_path = model_path
        self.device = device
        self.data = {
            # Processing Options
            "postprocess": False,
            "tta": tta,
            # Constants
            "window_size": 512,
            "agg": agg,
            "high_end_process": "mirroring",
        }
        mp = ModelParameters("infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2.json")
        model = Nets.CascadedASPPNet(mp.param["bins"] * 2)
        cpk = torch.load(model_path, map_location="cpu")
冲击

此问题可能导致远程代码执行。

CWEs
  • CWE-502:不受信任数据的反序列化

Issue 11: vr.py 中的不安全反序列化AudioPreDeEcho (GHSL-2025-022)

该变量接受用户输入(例如模型的路径)并将其传递给 中的函数。在 中,如果包含字符串 ,则使用包含上述用户输入的属性(此处称为 local )创建 class 的新实例。请注意,在此步骤中,已将扩展添加到路径中。model_chooseuvrvr.pyuvrmodel_name"DeEcho"AudioPreDeEchomodel_pathmodel_name.pth

在该类中,用户输入(此处称为 )用于使用 torch.load 在该路径上加载模型,这可能导致不安全的反序列化。AudioPreDeEchomodel_path

class AudioPreDeEcho:
    def __init__(self, agg, model_path, device, is_half, tta=False):
        self.model_path = model_path
        self.device = device
        self.data = {
            # Processing Options
            "postprocess": False,
            "tta": tta,
            # Constants
            "window_size": 512,
            "agg": agg,
            "high_end_process": "mirroring",
        }
        mp = ModelParameters("infer/lib/uvr5_pack/lib_v5/modelparams/4band_v3.json")
        nout = 64 if "DeReverb" in model_path else 48
        model = CascadedNet(mp.param["bins"] * 2, nout)
        cpk = torch.load(model_path, map_location="cpu")
冲击

此问题可能导致远程代码执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值