CVE-2025-11965: Vertx web Vert.x-Web Access Control Flaw Vulnerability
MODERATECVE-2025-11965 is a MODERATE vert.x-web access control flaw vulnerability (CWE-552: Files or Directories Accessible to External Parties) affecting Vertx web libraries in the Maven ecosystem. The issue involves vert.x-web access control flaw in statichandler’s hidden file protection for files under hidden directories. Remediation is available by upgrading affected packages to version 4.5.22, 5.0.5.
CVE-2025-11965 at a Glance
How to Fix CVE-2025-11965
To remediate this vulnerability, upgrade all affected Vertx web dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
<version>4.5.22</version>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
<version>5.0.5</version>
</dependency>
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
mvn dependency:tree -Dincludes=io.vertx
How to Check if You Are Affected
To determine whether your Java application is affected by CVE-2025-11965, inspect your build dependencies using the Maven Dependency Plugin:
mvn dependency:tree -Dincludes=io.vertx
Analyze the terminal output to locate any version of Vertx web in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 4.5.22), your application is affected.
Note: The mvn dependency:tree -Dincludes=io.vertx command inspects the resolved dependency graph declared in your project's POM files; it does not perform automated security scanning or inspect runtime dynamic classpaths. Always verify runtime container classpaths and shaded JARs.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-552: Files or Directories Accessible to External Parties, where the product makes files or directories accessible to unauthorized actors, even though they should not be. In Vertx web, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2025-11965 Affected Vertx web Versions
2 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
io.vertx:vertx-web
|
Maven |
< 4.5.22
|
4.5.22
|
|
io.vertx:vertx-web
|
Maven |
≥ 5.0.0
< 5.0.5
|
5.0.5
|
References
Frequently Asked Questions
What is CVE-2025-11965?
Which Vertx web versions are affected?
What version fixes CVE-2025-11965?
Is vertx-web affected?
What CWE is associated with CVE-2025-11965?
How can I check Maven dependencies for CVE-2025-11965?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-h5fg-jpgr-rv9c",
"modified" : "2025-10-22T19:38:04Z",
"published" : "2025-10-22T19:38:04Z",
"aliases" : [ "CVE-2025-11965" ],
"summary" : "Vert.x-Web Access Control Flaw in StaticHandler’s Hidden File Protection for Files Under Hidden Directories",
"details" : "# Description\n\nThere is a flaw in the hidden file protection feature of Vert.x Web’s `StaticHandler` when `setIncludeHidden(false)` is configured.\n\nIn the current implementation, only files whose final path segment (i.e., the file name) begins with a dot (`.`) are treated as “hidden” and are blocked from being served. However, this logic fails in the following cases:\n\n- **Files under hidden directories**: For example, `/.secret/config.txt` — although `.secret` is a hidden directory, the file `config.txt` itself does not start with a dot, so it gets served.\n- **Real-world impact**: Sensitive files placed in hidden directories like `.git`, `.env`, `.aws` may become publicly accessible.\n\nAs a result, the behavior does not meet the expectations set by the `includeHidden=false` configuration, which should ideally protect all hidden files and directories. This gap may lead to unintended exposure of sensitive information.\n\n# Steps to Reproduce\n\n```bash\n1. Prepare test environment\n\n# Create directory structure\nmkdir -p src/test/resources/webroot/.secret\nmkdir -p src/test/resources/webroot/.git\n\n# Place test files\necho \"This is a visible file\" > src/test/resources/webroot/visible.txt\necho \"This is a hidden file\" > src/test/resources/webroot/.hidden.txt\necho \"SECRET DATA: API_KEY=abc123\" > src/test/resources/webroot/.secret/config.txt\necho \"Git config data\" > src/test/resources/webroot/.git/config\n```\n\n```java\n2. Implement test server\n\nimport io.vertx.core.AbstractVerticle;\nimport io.vertx.core.Vertx;\nimport io.vertx.ext.web.Router;\nimport io.vertx.ext.web.handler.StaticHandler;\n\npublic class StaticHandlerTestServer extends AbstractVerticle {\n @Override\n public void start() {\n Router router = Router.router(vertx);\n\n // Configure to not serve hidden files\n StaticHandler staticHandler = StaticHandler.create(\"src/test/resources/webroot\")\n .setIncludeHidden(false)\n .setDirectoryListing(false);\n\n router.route(\"/*\").handler(staticHandler);\n\n vertx.createHttpServer()\n .requestHandler(router)\n .listen(8082);\n }\n\n public static void main(String[] args) {\n Vertx vertx = Vertx.vertx();\n vertx.deployVerticle(new StaticHandlerTestServer());\n }\n}\n```\n\n```bash\n3. Confirm the vulnerability\n\n# Normal file (accessible)\ncurl http://localhost:8082/visible.txt\n# Result: 200 OK\n\n# Hidden file (correctly blocked)\ncurl http://localhost:8082/.git\n# Result: 404 Not Found\n\n# File under hidden directory (vulnerable)\ncurl http://localhost:8082/.git/config\n# Result: 200 OK - Returns contents of Git config\n```\n\n# Potential Impact\n\n## 1. Information Disclosure\n\nExamples of sensitive files that could be exposed:\n\n- `.git/config`: Git repository settings (e.g., remote URL, credentials)\n- `.env/*`: Environment variables (API keys, DB credentials)\n- `.aws/credentials`: AWS access keys\n- `.ssh/known_hosts`: SSH host trust info\n- `.docker/config.json`: Docker registry credentials\n\n## 2. Attack Scenarios\n\n- Attackers can guess common hidden directory names and enumerate filenames under them to access confidential data.\n- Especially dangerous for `.git/HEAD`, `.git/config`, `.git/objects/*` — which may allow full reconstruction of source code.\n\n## 3. Affected Scope\n\n- **Affected version**: Vert.x Web 5.1.0-SNAPSHOT (likely earlier versions as well)\n- **Environments**: All OSes (Windows, Linux, macOS)\n- **Configurations**: All applications using `StaticHandler.setIncludeHidden(false)`",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "Maven",
"name" : "io.vertx:vertx-web"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "4.5.22"
} ]
} ]
}, {
"package" : {
"ecosystem" : "Maven",
"name" : "io.vertx:vertx-web"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "5.0.0"
}, {
"fixed" : "5.0.5"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 5.0.4"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/vert-x3/vertx-web/security/advisories/GHSA-h5fg-jpgr-rv9c"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2025-11965"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/vert-x3/vertx-web"
}, {
"type" : "WEB",
"url" : "https://gitlab.eclipse.org/security/vulnerability-reports/-/issues/304"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-552" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2025-10-22T19:38:04Z",
"nvd_published_at" : "2025-10-22T15:15:31Z"
}
}