Executive Summary
CVE-2026-120209 is a critical vulnerability (CVSS 9.8) in AJ-Report through version 1.7.1, an open-source reporting and dashboard tool. Share tokens are signed with a hard-coded JWT secret, so attackers can forge valid Share-Token values offline and reach an endpoint that passes attacker-supplied scripts to GroovyClassLoader, giving unauthenticated remote code execution.
Vulnerability Details
| Field | Details |
|---|---|
| CVE | CVE-2026-120209 |
| CVSS Score | 9.8 (Critical) |
| Published | 2026-10-31 |
| Type | Hard-coded cryptographic key leading to code execution |
| Affected Versions | Through 1.7.1 |
| Authentication | None (token is forged) |
| Attack Vector | Network |
| Impact | Remote code execution |
Technical Analysis
The attack chains two weaknesses:
- Forgeable token. The JWT secret used to sign share tokens is embedded in the application. Anyone with the secret can mint a token offline, including one with a
reportCodeofdataSet. - Script evaluation. With a
dataSetshare token, thetestTransformendpoint is reachable. It hands the supplied script toGroovyClassLoader, which compiles and runs it on the server.
Since the signing secret is identical across installations, one forged token works against every unpatched, reachable instance.
Affected Environments
Any AJ-Report deployment running 1.7.1 or earlier with its HTTP interface reachable by an attacker. Report servers often sit close to databases, so RCE can expose connection credentials and the data behind dashboards.
Remediation
- Upgrade to a release newer than 1.7.1 once available from the project; check its releases and advisories.
- Restrict access to the application to trusted networks or an authenticating reverse proxy.
- Block the endpoint — deny requests to
testTransformat the proxy if it is not needed. - Rotate credentials stored in or reachable from AJ-Report (database passwords, API keys) if the service was exposed.
- Run with least privilege — use a restricted OS account and read-only database users for report sources.
Detection
- Review access logs for requests to
testTransform, especially from unfamiliar IP addresses. - Look for unexpected child processes or outbound connections from the Java process.
- Check for new files or scheduled tasks created by the service account.