Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify Wicket deployment with isolated wicket-core class loader
-
DeliveryRequest package-resource URL naming a component class
-
ExploitPackageResourceGuard class-file check fails across class loaders
-
ExecutionServer streams component markup template (HTTP 200)
-
ImpactRead disclosed template structure, comments and endpoints
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling File access restriction
MITRE ATT&CK
2 techniques across 1 tactic: Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a non-default deployment where wicket-core is loaded by a class loader that cannot see the application's component classes: wicket-core in a servlet container's shared library directory, in an EAR library directory with the application in the WAR, as an application-server global module, or as an OSGi bundle whose wicket-core bundle cannot resolve application-bundle classes. The standard WAR packaging with wicket-core in WEB-INF/lib is NOT affected because the class-file check then succeeds and the template is refused. The attacker must know and name a component's fully qualified class name, though Wicket embeds these in the package-resource URLs it renders. Impact is strictly limited: read-only disclosure of developer-authored markup templates only - no user data, credentials, or session material is reachable, and there is no write or availability impact. Affected versions: 8.0.0-8.19.0, 9.0.0-9.24.0, 10.0.0-10.11.0; fixed in 8.20.0, 9.25.0, 10.12.0. |
| Impact | Signals are consistent and point to a genuine but low-urgency information-disclosure issue rather than a high-priority flaw. The vendor CVSS 4.0 vector (CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N) scores 6.3 (Medium): network-reachable and unauthenticated (PR:N), but carrying AT:P - an attack requirement - because exploitation depends on a non-default class-loader layout, and VC:L with VI:N/VA:N because only read-only disclosure of developer-authored markup occurs. The vuln.today decision label is 'this_month', not act_now or emergency. No EPSS score, no CISA KEV listing, and no public exploit were provided; per the input the only reference is the Apache advisory, so exploitation status is 'no public exploit identified at time of analysis'. The AT:P requirement is the key discriminator: as the description states explicitly, ordinary WAR packaging (wicket-core in WEB-INF/lib) is NOT affected, and only atypical deployments (shared container library, EAR lib with app in WAR, app-server global module, or OSGi where wicket-core's bundle cannot resolve application classes) are exposed. Combined with the limited impact (no user data, credentials, or session material reachable), this is a real but narrowly-scoped issue appropriate for scheduled patching, not emergency response. |
| Exploit ScenarioDerived | In a deployment where wicket-core runs in a class loader that cannot see the application's component classes (e.g. placed in a servlet container's shared library directory), a remote unauthenticated attacker requests the package-resource URL of a named component class - fully qualified class names that Wicket itself writes into every package-resource URL it renders. Because PackageResourceGuard finds no co-located class file, it serves the component's markup template with HTTP 200, disclosing developer-authored template content such as structure, comments, conditionally-rendered markup, inline script, and referenced endpoints. No public exploit was identified at time of analysis, and network reach is offset by the AT:P requirement that the target run a non-default class-loader layout. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 01, 2026
Markup template disclosure in Apache Wicket 8.0.0-8.19.0, 9.0.0-9.24.0 and 10.0.0-10.11.0 allows unauthenticated remote attackers to fetch a component's HTML markup template over HTTP with status 200 by requesting its package-resource URL. The flaw only manifests in non-standard deployments where wicket-core is loaded by a class loader that cannot see the application's component classes (shared servlet-container library directory, EAR lib directory with the WAR-hosted application, application-server global module, or OSGi bundle); the ordinary WAR layout with wicket-core in WEB-INF/lib is not affected. Impact is strictly read-only disclosure of developer-authored template content - component structure, comments, conditionally rendered markup, inline script and named endpoints - with no user data, credentials or session material reachable and no integrity or availability effect; no public exploit code was identified at time of analysis and there is no CISA KEV listing, and the priority signal is this_month rather than immediate action.
RemediationAI
Upgrade to the fixed releases named by the vendor: Apache Wicket 8.20.0, 9.25.0 or 10.12.0, per branch. Users still on the unsupported 7.x line should move to one of these supported versions. Where an immediate upgrade is not possible, the effective control is packaging rather than configuration: the standard web-archive layout with wicket-core in WEB-INF/lib puts framework and application classes in a single class loader, so the class-file check succeeds and templates are refused - relocating wicket-core out of a container shared library directory, an EAR lib directory, a global module or a separate OSGi bundle into the application's own class path removes the exposure, at the cost of losing the shared-framework arrangement that motivated the original layout and of requiring each application to carry its own wicket-core copy. The same reasoning means that markup belonging to Wicket's own modules or to any code sharing wicket-core's class loader is unaffected and needs no separate action. The vendor advisory at https://lists.apache.org/thread.html/90mlx42q7nkdccdby1ql1ksl4sxy13x6 should be consulted for the authoritative fix statement.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The defect is an access-control mistake in org.apache.wicket.markup.html.PackageResourceGuard, which decides whether a classpath file may be streamed to a client as a package resource (CWE-552, files or directories accessible to external parties). Wicket's default allow list includes HTML, so the only distinction between an innocuous static .html file and a component's markup template is a probe for a compiled class file of the same name sitting beside it. That probe calls getResource() on the class loader that loaded wicket-core, whereas the resource being guarded is resolved through the application's IClassResolver (thread context class loader) and org.apache.wicket.core.util.resource.ClassPathResourceFinder#find(), which tries the scope class' own loader, then the context class loader, and finally the wicket-core loader. When wicket-core's loader is blind to the application's classes the probe misses, the guard concludes the file is not a component template, and serves it. Because Wicket embeds fully qualified class names in the URLs of the package resources it renders, an attacker only needs to name a component class rather than guess it. Markup shipped by Wicket's own modules and by any code sharing wicket-core's class loader stays protected, and the standard WAR packaging - framework and application in one loader - retains the class-file check and is unaffected. This class-loader-topology dependency is why the assessed severity (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N) treats exploitation as conditional on a rare deployment.
Know when Apache Wicket gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Remote unauthenticated request (AV:N/PR:N/UI:N), but AC:H because exploitation depends on a rare non-default class-loader deployment beyond attacker control; only read-only template disclosure, so C:L and I:N/A:N.
Primary rating from Vendor (apache).
CVSS VectorVendor: apache
DescriptionCVE.org
Files accessible to external parties in Apache Wicket.
org.apache.wicket.markup.html.PackageResourceGuard decides whether a file on the classpath may be streamed to a client as a package resource. HTML is on the default allow list, so the only thing that separates a static HTML file, which may be served, from a component's markup template, which may not, is a check for a class file of the same name beside it. That check calls getResource() on the class loader that loaded wicket-core. The resource itself is reached through different class loaders: the scope class is resolved through the application's IClassResolver, which uses the thread context class loader, and org.apache.wicket.core.util.resource.ClassPathResourceFinder#find() then tries the scope class' own loader, the context class loader, and the wicket-core loader last.
Where wicket-core is loaded by a class loader that cannot see the application's classes, the check finds no class file, concludes the file is not a component markup template, and serves it. A request for the package resource URL of a component class then returns that component's markup template with status 200. What is disclosed is developer-authored template content: component structure, developer comments, markup that is rendered only under some conditions, inline script, and the endpoints a template names. Access is read-only, and no user data, credential or session material is reachable this way.
Such a deployment is rare. The ordinary packaging, a web archive with wicket-core in WEB-INF/lib, puts the framework and the application in one class loader, so the check finds the class file and the template is refused; those deployments are not affected. The exposure is confined to deployments that give wicket-core a class loader which cannot see the application's component classes: wicket-core placed in a servlet container's shared library directory, in an enterprise archive library directory with the application in the web archive, as an application server global module, or as an OSGi bundle, where wicket-core's bundle cannot resolve a class held by an application bundle. Markup shipped by Wicket's own modules, and by any other code sharing a class loader with wicket-core, remains protected. An attacker has to name a component class, and Wicket writes fully qualified class names into the URL of every package resource it renders.
This issue affects Apache Wicket: from 8.0.0 through 8.19.0, from 9.0.0 through 9.24.0, from 10.0.0 through 10.11.0. Users of Apache Wicket 7.x or older, which are no longer supported, should upgrade to a supported version. Users are recommended to upgrade to version 8.20.0, 9.25.0 or 10.12.0, which fix the issue.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
More in Apache Wicket
View allPath traversal vulnerability in Apache Wicket's FolderUploadsFileManager allows unauthenticated attackers to read arbitr
Apache Wicket's form-less upload endpoint (AbstractFileUploadResource, the server side of FileUploadToResourceField, or
Heap-exhaustion denial of service in Apache Wicket 9.14.0 through 9.24.0 and 10.0.0 through 10.11.0, reachable without a
Cross-site scripting in Apache Wicket 8.0.0 through 8.19.0, 9.0.0 through 9.24.0 and 10.0.0 through 10.11.0 allows text
Cross-site scripting in Apache Wicket 8.0.0 through 8.19.0, 9.0.0 through 9.24.0 and 10.0.0 through 10.11.0 lets a value
Stored cross-site scripting in Apache Wicket's AjaxNewWindowNotifyingBehavior allows a client-supplied browser window na
Cross-site scripting in Apache Wicket 8.0.0 through 8.19.0 lets remote attackers get script executed in the application'
Apache Wicket's public JavaScriptUtils.escapeQuotes() helper fails to escape backslashes before quotes, so attacker-infl
Cross-site scripting in Apache Wicket's SmartLinkLabel and SmartLinkMultiLineLabel components turns attacker-influenced
Session fixation in Apache Wicket's role-based authentication module leaves the container session id unchanged when an a
Missing authorization in Apache Wicket 8.x, 9.x and 10.x allows unauthenticated remote attackers to invoke a component's
Missing authorization in Apache Wicket 10.3.0 through 10.11.0 allows a remote unauthenticated caller to invoke the serve
EUVD-2026-114899
GHSA-3hjq-2xr3-p7px
NVD
CVE.org
EPSS
Exploit-DB