当前位置: 首页 > news >正文

不可信的搜索路径(CWE-426)

漏洞描述:程序使用关键资源时(如动态链接库、执行文件、配置文件等)没有明确的指定资源的路径,而是依赖操作系统去搜索资源,这种行为可能被攻击者利用,通过在搜索优先级较高的目录放置不良资源,进而劫持程序的执行流程。

漏洞风险:攻击者可以在搜索优先级更高的文件夹中放入相同名称的资源,程序会使用攻击者控制的资源。包括:

  1. 资源劫持:攻击者可在高优先级目录中放置同名的恶意文件,程序执行时会优先加载攻击者提供的文件,而非预期的系统或可信文件。
  2. 权限提升:如果程序以高权限运行,而恶意文件存放在可写目录中,攻击者可能借助该漏洞执行恶意代码,以更高权限控制系统。
  3. 系统稳定性影响:程序加载了非预期的文件,可能导致崩溃、数据损坏或异常行为。

修复或规避建议:使用关键资源时指定资源所在的路径。包括:

  1. 显式指定资源路径:在加载关键资源(如 DLL、可执行文件、配置文件)时,使用绝对路径或受控路径,避免依赖默认搜索路径。
  2. 限制可执行文件搜索路径:使用环境变量 PATH 控制搜索顺序,并确保程序不会在不受信任的目录中查找关键资源。
  3. 最小化可写目录权限:确保应用程序的可执行目录不可由普通用户或低权限进程修改,防止攻击者放置恶意文件。
  4. 代码审计与检测:使用静态分析工具或代码审查机制,检测程序是否存在不可信的搜索路径问题。
  5. 使用库加载安全机制(适用于 Windows):
    • 使用 SetDllDirectory(NULL) 禁用当前工作目录的搜索。
    • 使用 LoadLibraryEx 并指定 LOAD_LIBRARY_SEARCH_SYSTEM32 以确保仅从系统目录加载 DLL。
    • 在 Linux 上,可使用 LD_LIBRARY_PATH 进行控制,并避免在 .(当前目录)等不安全路径中查找库文件。

1:不规范用法

public class Example{

       private String command;  //本例中command = "dir.exe E:\\data"

       public void exampleFun(void) {  

              //攻击者可在搜索优先级更高的文件夹中放入和dir.exe网名的恶意程序导致command的内容无法正确执行

             

              Runtime.getRuntime().exec(command);

              //其它语句

    }

}

该漏洞类型与C/C++中的不可信的搜索路径相同,都是攻击者在搜索优先级更高的文件夹下放置名称为dir.exe的文件,则程序执行中,则替换了系统中的dir命令。通过阅读字节码了解到没有设定路径,则攻击者就可以构造同名的可执行程序,让程序去执行,控制程序的执行行为,存在风险。

示例2:不规范用法(Windows下不安全加载)

#include <stdlib.h>

int main() {

    system("dir");

    return 0;

}

题分析

  • system("dir") 依赖操作系统的 PATH 变量进行可执行文件搜索。
  • 攻击者可以在 PATH 变量优先搜索的目录(如当前目录)放置一个恶意的 dir.exe,使程序执行恶意代码。

示例3:不规范用法(Linux下不安全的加载)

#include <dlfcn.h>

int main() {

    void* handle = dlopen("libexample.so", RTLD_LAZY);

    if (!handle) {

        return -1;

    }

    return 0;

}

dlopen("libexample.so", RTLD_LAZY) 可能会在 LD_LIBRARY_PATH 指定的路径或当前目录中查找 libexample.so,存在被攻击者劫持的风险。

示例4:规范用法之一(Windows下用法之1

public class Example{

       private String command;  //本例中command = "dir.exe E:\\data"

       public void exampleFun(void) {  

              //PATH是存放操作系统中dir.exe命令所在完整路径的常量,本例中PATH="C:\\WINDOWS\\system32";

              String cmd = PATH +command;  //使用完整路径确保command的内容能正确执行

              Runtime.getRuntime().exec(cmd);

              //其它语句

    }

}

限定了路径,使攻击者不会轻易能够进入到服务器的系统路径去放置同名的可执行程序。攻击难度加大。

示例5:规范用法(Windows下用法之2

#include <stdlib.h>

int main() {

    system("C:\\Windows\\System32\\dir.exe");

    return 0;

}

显式指定 dir.exe 所在的绝对路径,确保程序只执行系统提供的命令。

示例6:规范用法(Windows下用法之3

#include <windows.h>

int main() {

    STARTUPINFO si = { sizeof(si) };

    PROCESS_INFORMATION pi;

    if (CreateProcess("C:\\Windows\\System32\\cmd.exe", "/c dir", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {

        WaitForSingleObject(pi.hProcess, INFINITE);

        CloseHandle(pi.hProcess);

        CloseHandle(pi.hThread);

    }

    return 0;

}

使用 CreateProcess 直接指定 cmd.exe 的路径,防止执行路径被劫持。

示例7:规范用法(Linux下)

#include <dlfcn.h>

int main() {

    void* handle = dlopen("/usr/lib/libexample.so", RTLD_LAZY);

    if (!handle) {

        return -1;

    }

    return 0;

}

通过绝对路径加载动态库,防止从不受信任的目录加载恶意库文件

总结

  • 不要依赖默认的搜索路径,始终指定绝对路径或受控路径。
  • 最小化可写权限,确保攻击者无法修改或放置恶意文件。
  • 使用安全 API(如 CreateProcess 替代 system,LoadLibraryEx 指定安全路径)。
  • 代码审计和检测,定期扫描代码中的不可信搜索路径风险。

这样可以有效防止不可信搜索路径漏洞,提高系统安全性。

相关文章:

不可信的搜索路径(CWE-426)

漏洞描述&#xff1a;程序使用关键资源时&#xff08;如动态链接库、执行文件、配置文件等&#xff09;没有明确的指定资源的路径&#xff0c;而是依赖操作系统去搜索资源&#xff0c;这种行为可能被攻击者利用&#xff0c;通过在搜索优先级较高的目录放置不良资源&#xff0c;…...

Linux——基础命令

$&#xff1a;普通用户 #&#xff1a;超级用户 cd 切换目录 cd 目录 &#xff08;进入目录&#xff09; cd ../ &#xff08;返回上一级目录&#xff09; cd ~ &#xff08;切换到当前用户的家目录&#xff09; cd - &#xff08;返回上次目录&#xff09; pwd 输出当前目…...

利用TensorFlow.js实现浏览器端机器学习:一个全面指南

引言 随着深度学习技术的不断发展&#xff0c;机器学习已从传统的服务器端运算逐渐转向了前端技术。TensorFlow.js 是 Google 推出的一个用于在浏览器中进行机器学习的开源库&#xff0c;它允许开发者在浏览器中直接运行机器学习模型&#xff0c;而无需依赖后端服务器。Tensor…...

利用HTML和css技术编写学校官网页面

目录 一&#xff0c;图例展示 二&#xff0c;代码说明 1&#xff0c;html部分&#xff1a; 【第一张图片】 【第二张图片】 【第三张图片】 2&#xff0c;css部分&#xff1a; 【第一张图片】 【第二张图片】 【第三张图片】 三&#xff0c;程序代码 一&#xff0c;…...

SpringSecurity密码编码器:使用BCrypt算法加密、自定义密码编码器

1、Spring Security 密码编码器 Spring Security 作为一个功能完备的安全性框架,一方面提供用于完成加密操作的 PasswordEncoder 组件,另一方面提供一个可以在应用程序中独立使用的密码模块。 1.1 PasswordEncoder 抽象接口 在 Spring Security 中,PasswordEncoder 接口代…...

笔记:新能源汽车零部件功率级测试怎么进行?

摘要:本文旨在梳理主机厂对新能源汽车核心零部件功率级测试需求,通过试验室的主流设备仪器集成,快速实现试验方案搭建,并体现测试测量方案的时效性、便捷性优势。目标是通过提升实现设备的有效集成能力、实现多设备测试过程的有效协同、流程化测试,可快速采集、分析当前数…...

ES6中的map和原生的对象有什么区别?

在 ES6 中&#xff0c;Map 和原生的对象&#xff08;Object&#xff09;都是用来存储键值对数据的集合&#xff0c;但它们有显著的区别。以下是它们之间的主要区别&#xff1a; 1. 键的类型 Object: 只允许使用字符串或符号作为键。其他类型的键&#xff08;如数字或对象&…...

2502vim,vim文本对象中文文档

介绍 文本块用户(textobj-user)是一个可帮助你毫不费力地创建自己的文本对象的Vim插件. 因为有许多陷阱需要处理,很难创建文本对象.此插件隐藏了此类细节,并提供了声明式定义文本对象的方法. 你可用正则式来定义简单的文本对象,或使用函数来定义复杂的文本对象.如… 文本对…...

spring security与gateway结合进行网关鉴权和授权

在Spring Cloud Gateway中集成Spring Security 6以实现鉴权和认证工作&#xff0c;可以在网关代理层完成权限校验和认证。这种架构通常被称为“边缘安全”或“API网关安全”&#xff0c;它允许你在请求到达后端服务之前进行集中式的安全控制。 以下是如何配置Spring Cloud Gat…...

LabVIEW在电机自动化生产线中的实时数据采集与生产过程监控

在电机自动化生产线中&#xff0c;实时数据采集与生产过程监控是确保生产效率和产品质量的重要环节。LabVIEW作为一种强大的图形化编程平台&#xff0c;可以有效实现数据采集、实时监控和自动化控制。详细探讨如何利用LabVIEW实现这一目标&#xff0c;包括硬件选择、软件架构设…...

log4j2日志配置文件

log4j2配置文件每个项目都会用到,记录一个比较好用的配置文件,方便以后使用时调取,日志输出级别为debug,也可以修改 <?xml version"1.0" encoding"UTF-8"?> <Configuration monitorInterval"180" packages""><prope…...

用Deepseek做EXCLE文件对比

背景是我想对比两个PO系统里的一个消息映射&#xff0c;EDI接口的mapping有多复杂懂的都懂&#xff0c;它还不支持跨系统版本对比&#xff0c;所以我费半天劲装NWDS&#xff0c;导出MM到excle&#xff0c;然后问题来了&#xff0c;我需要对比两个excel文件里的内容&#xff0c;…...

Tailwind CSS v4.0 升级与 Astro 5.2 项目迁移记录

本文博客链接 https://ysx.cosine.ren/tailwind-update-v4-migrate 自用小记。 Tailwind CSS v4.0 - Tailwind CSS 新的高性能引擎 - 完整构建的速度速度快 5 倍&#xff0c;增量构建的速度快于 100 倍以上 —— 以微秒为单位进行测量。为现代 Web 设计 - 建立在前沿的 CSS 特…...

TongSearch3.0.4.0安装和使用指引(by lqw)

文章目录 安装准备手册说明支持的数据类型安装控制台安装单节点(如需集群请跳过这一节)解压和启动开启X-Pack Security和生成p12证书&#xff08;之后配置内置密码和ssl要用到&#xff09;配置内置用户密码配置ssl&#xff08;先配置内置用户密码再配ssl&#xff09;配置控制台…...

低代码产品表单渲染架构

在React和Vue没有流行起来的时候&#xff0c;低代码产品的表单渲染设计通常会使用操作Dom的方式实现。 下面是一个表单的例子&#xff1a; 产品层 用户通过打开表单&#xff0c;使用不同业务场景业务下的表单页面&#xff0c;中间的Render层就是技术实现。 每一个不同业务的表单…...

windows 剪切板的写入、读取,包括图片,文本内容

介绍 在windows开发过程中&#xff0c;我们可能会需要对系统剪切板进行操作&#xff0c;其中包括读取剪切板数据和将数据写入到剪切板中 设置剪切板内容 /*** brief 设置剪切板内容* param[in] pszData 指向缓冲区的指针* param[in] nDataLen 缓冲区长度* return 成功返回TRU…...

Matplotlib 高级图表绘制与交互式可视化(mpld3)

我们先重新回忆一下它的主要作用: 一、Matplotlib 简介 Matplotlib 是 Python 中一个非常强大的可视化库,广泛用于数据可视化、科学计算和工程领域。它提供了丰富的绘图功能,可以生成各种静态、动态和交互式的图表。以下是 Matplotlib 的主要功能及其详细讲解。 二、基本…...

(9)gdb 笔记(2):查看断点 info b,删除断点 delete 3,回溯 bt,

&#xff08;11&#xff09; 查看断点 info b&#xff1a; # info b举例&#xff1a; &#xff08;12&#xff09;删除断点 delete 2 或者删除所有断点&#xff1a; # 1. 删除指定的断点 delete 3 # 2. 删除所有断点 delete 回车&#xff0c;之后输入 y 确认删除所有断点 举…...

专业学习|通过案例了解蒙特卡罗模拟实操步骤与含义

一、蒙特卡罗模拟介绍 蒙特卡罗模拟&#xff08;Monte Carlo Simulation&#xff09;是一种基于随机采样的数值计算方法&#xff0c;用于解决具有不确定性或复杂概率分布的问题。其核心思想是通过多次随机抽样来逼近系统的行为或目标函数的真实值&#xff0c;进而对系统进行评估…...

云端智慧:创业公司如何以全球视野选择最佳平台,实现业务新高度

​2016年8月&#xff0c;一个名叫Bryce Adams的人辞去了自己原本很稳定的工作&#xff0c;开始追逐梦想&#xff1a;为使用WooCommerce&#xff08;一种开源的WordPress数字商务插件&#xff09;的公司开发一种能提供各类报表解决方案的应用。为此他成立了Metorik公司&#xff…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...