漏洞概述 该漏洞涉及在 文件中对真实路径存在性检查的实现。具体问题是,在处理 请求时,代码未能正确验证路径的存在性,可能导致安全漏洞。 影响范围 受影响文件: 受影响版本:OTP-29.0.3 影响功能:SSH SFTP 子系统在处理 请求时的路径验证逻辑 修复方案 1. 代码修改: - 在 文件中,对 请求的处理逻辑进行了修改,确保路径存在性检查的正确性。 - 具体修改包括: - 在 函数中,增加了对路径存在性的验证。 - 使用 和 函数来检查路径是否为目录或文件。 - 如果路径不存在,返回相应的错误状态。 2. 测试用例: - 在 文件中,增加了新的测试用例 和 ,用于验证修复后的路径存在性检查逻辑。 - 测试用例包括: - 创建临时目录和文件,模拟不同的路径场景。 - 使用 函数获取真实路径,并验证其正确性。 - 清理测试环境,确保测试的独立性和可重复性。 POC代码 以下是修复后的关键代码片段: 测试用例代码 以下是新增的测试用例代码: ```erlang real_path_root(Config) -> #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user, Config), #{user := User, passwd := Passwd} = proplists:get_value(user,