CWE-427: 不受控制的搜索路径元素 (Uncontrolled Search Path Element) 漏洞概述 该漏洞指产品使用固定的或受控的搜索路径来查找资源,但路径中的一个或多个位置可能受到非预期行为者的控制。攻击者可以通过修改环境变量(如 )、利用当前工作目录、或依赖未完全限定的路径(如仅使用文件名而非完整路径)来注入恶意代码。 常见场景: Windows系统: 当调用 或 加载 DLL 时,若未提供完全限定的路径,系统会搜索当前工作目录等位置。 Linux/Unix系统: 路径中包含空元素(如 ),会被解释为当前工作目录。 软件包管理: 依赖项解析时,公共仓库可能优先于私有仓库被搜索(依赖混淆)。 影响范围 执行未授权代码或命令: 攻击者可利用提权后的权限执行恶意程序。 机密性、完整性、可用性受损: 可能导致数据泄露、系统被篡改或服务中断。 修复方案 1. 硬编码安全路径: 将搜索路径限制为已知的安全值(如系统目录),或仅允许管理员在配置文件中指定。 2. 使用完全限定路径: 在代码中调用程序时,使用完整的绝对路径,而非依赖环境变量或当前目录。 3. 移除或限制环境变量: 在调用外部程序前,移除或限制 、 等环境变量。 4. 检查并清理路径: 在执行前检查搜索路径,移除当前工作目录等不安全元素。 5. 使用显式路径函数: 使用要求提供完整路径的函数(如 ),避免使用依赖 的函数(如 )。 POC代码示例 示例 1: Java (NIS更新) 说明:未指定 的绝对路径,攻击者可修改 指向恶意 程序。 示例 2: Go (LookPath函数) 说明: 会搜索 中的目录。攻击者可创建同名恶意文件(如 )并置于 中,导致执行恶意程序。 示例 3: 依赖混淆 (Python/Node.js/Ruby) 说明:攻击者在公共仓库发布与私有仓库同名的恶意包,利用依赖解析顺序(公共优先)诱导系统下载并执行恶意代码。 相关CVE示例 CVE-2023-25815: 使用硬编码路径导致 函数被利用。 CVE-2022-4826: Go 基于 搜索执行恶意 。 CVE-2020-26284: Go 静态站点生成器在 Windows 上搜索当前目录执行恶意代码。 CVE-2019-1552: SSL 包搜索 配置目录,允许本地攻击者创建恶意配置文件。 CVE-2010-3402: 文档编辑器中 "DLL劫持" 问题。 CVE-1999-1461: 产品信任 环境变量,允许本地用户通过修改 获取 root 权限。