Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRegister or log in as low-privileged user
-
DeliverySend crafted sort parameter to entity-list endpoint
-
ExploitInject unquoted property into ORDER BY clause
-
ExecutionExecute stacked SQL via R2DBC simple query protocol
-
ImpactRead password hashes or drop tables
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Persistence The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitable only when the JHipster-generated application is a reactive stack built with Spring WebFlux, Spring Data R2DBC, and a SQL database (reproduced on H2 and PostgreSQL 16); the attacker must reach a paginated entity-list endpoint (GET /api/<entity>?sort=...) and hold an authenticated account, though the default self-registration flow lets a low-privileged account be self-provisioned. Limiting factors: non-reactive Spring Data JPA applications are NOT affected because JPA validates sort property names against the entity metamodel, and NoSQL backends are outside the root cause; exploitation therefore depends specifically on the reactive R2DBC code path generated by versions 7.0.0 up to 9.4.0. |
| Impact | Multiple signals point to a genuine priority rather than an inflated CVSS score. The CVSS:3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, 8.8) indicates a network-reachable, low-complexity flaw requiring only low privileges and no user interaction, with full confidentiality/integrity/availability impact - consistent with CWE-89 SQL injection that permits stacked statements via the R2DBC simple query protocol. The GHSA advisory confirms the authenticated-user requirement is weak because the default JHipster self-registration flow lets an attacker provision their own low-privilege account, effectively lowering the barrier toward unauthenticated-equivalent exposure for any app with registration enabled. The advisory also reports the issue was independently reproduced end-to-end on both the default dev database (H2) and default production database (PostgreSQL 16), strengthening confidence that exploitation is practical, not theoretical. Countervailing/missing signals: no EPSS score was provided, so statistical exploitation probability cannot be stated; there is no CISA KEV listing, so this is not confirmed as actively exploited; and no standalone public exploit tool is referenced - though the advisory publishes the vulnerable code path and payload mechanics in enough detail to materially aid exploit development. Net: treat as a high-priority patch item for any team running JHipster-generated reactive (WebFlux + R2DBC + SQL) applications, while recognizing the scope limitation that non-reactive JPA and NoSQL deployments are not affected. |
| Exploit ScenarioDerived | An attacker registers a normal low-privileged account (or uses an existing one) on a JHipster-generated reactive WebFlux/R2DBC application, then issues a GET request to a paginated entity-list endpoint such as /api/<entity> with a crafted sort parameter. Because the value is concatenated unquoted into the ORDER BY clause and run over the R2DBC simple query protocol, the attacker appends semicolon-separated statements to dump the jhi_user password-hash table, alter/delete rows, or drop tables. No public exploit tool is identified, but the advisory documents the vulnerable template and injection mechanics in reproducible detail. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 08, 2026
SQL injection in the generated reactive entity-list endpoints of JHipster-produced applications (generator-jhipster versions 7.0.0 up to, but not including, 9.4.0) lets an authenticated user inject arbitrary SQL through the attacker-controlled sort request parameter on GET /api/<entity>?sort=... endpoints. Because the generated R2DBC code passes the sort property into the SQL ORDER BY clause unvalidated and unquoted, and the driver runs it over the simple query protocol, semicolon-separated statements are executed as well - enabling reads of sensitive tables such as jhi_user password hashes, modification or deletion of data, and table drops (CVSS 3.1 8.8, AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H). Exploitation requires the app to be the reactive WebFlux + Spring Data R2DBC + SQL stack, and an account is needed, though the default self-registration flow lets a low-privileged one be self-provisioned; the vendor-released fix is version 9.4.0, and no public exploit code or confirmed active exploitation was identified at time of analysis.
RemediationAI
Vendor-released patch: upgrade the generator-jhipster package to 9.4.0 (released as tag v9.4.0) or later, per the advisory at https://github.com/jhipster/generator-jhipster/security/advisories/GHSA-r223-96jv-q533; the fix commit is f6f1579581da8db0d1b8bd28dd473b56951c83af. Upgrading the generator alone does not repair already-deployed services - regenerating or re-scaffolding the affected reactive projects is required so the corrected EntityManager_reactive.java is emitted, and regeneration can overwrite local customizations, so the regenerated diff should be reviewed and merged rather than applied blindly. For teams that cannot regenerate promptly, the equivalent manual fix is to replace the direct use of order.getProperty() in createOrderByFields with a strict allow-list check that the requested sort property exactly matches a known entity column/field name (rejecting any value containing ., ;, whitespace, quotes, or other SQL metacharacters) before it is rendered as an identifier, and to rebuild/redeploy the affected services. Attacker reachability can be reduced in the interim by requiring authentication on all paginated list endpoints and disabling the default self-registration flow so low-privileged accounts cannot be self-provisioned, though note this is a compensating control with a real trade-off: it removes self-service onboarding and does not close the injection for existing legitimate users. Because the simple query protocol permits stacked statements, ensure the R2DBC connection is not granted DDL/DROP privileges and that the application database user is scoped to the minimum required tables.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is CWE-89 (Improper Neutralization of Special Elements used in an SQL Command) located in the generator template generators/spring-boot/generators/data-relational/templates/src/main/java/package/repository/EntityManager_reactive.java.ejs, specifically the createOrderByFields(Table table, Sort sortToUse) helper. That code iterates Sort.Order objects taken directly from the HTTP sort query parameter and renders order.getProperty() as an unquoted SqlIdentifier via the R2DBC SQL renderer (SqlRenderer.create(...)), rather than binding it as a parameter or validating it against the entity metamodel. Two properties make the impact severe: identifiers cannot be parameterized in an ORDER BY clause, so the value is concatenated, and the generated query uses the R2DBC simple query protocol rather than an extended/prepared protocol, which permits stacked statements separated by semicolons. The affected technology stack is the JHipster reactive profile - Spring WebFlux for the web layer, Spring Data R2DBC for persistence, and an SQL database (reproduced on H2 in dev and PostgreSQL 16 in production). The CPE cpe:2.3:a:jhipster:generator-jhipster:*:*:*:*:*:*:*:* identifies the npm package generator-jhipster as the vulnerable component, but the exploitable code lives in the applications it generates, so downstream users who generated and deployed an app in the affected version range inherit the flaw even if they never upgrade the generator itself. The non-reactive Spring Data JPA code path is immune because Spring Data JPA validates sort property names against the entity metamodel, and NoSQL backends fall outside this root cause entirely; remediation of previously generated projects therefore requires regenerating or manually patching the emitted repository code, not merely updating the CLI.
Know when Jhipster 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
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Network endpoint, trivial crafted sort value (AC:L), requires only a low-privilege (often self-registered) account (PR:L), no user interaction, and stacked SQL yields full C/I/A.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
JHipster is a development platform to quickly generate, develop, and deploy modern web applications and microservice architectures. From 7.0.0 until 9.4.0, reactive applications generated with Spring WebFlux, Spring Data R2DBC, and a SQL database pass the attacker-controlled sort request parameter from paginated entity-list endpoints into createOrderByFields in generators/spring-boot/generators/data-relational/templates/src/main/java/package/repository/EntityManager_reactive.java.ejs. The generated code renders these properties into the SQL ORDER BY clause without validation or quoting, and the R2DBC simple query protocol can execute additional statements separated by semicolons. A normal authenticated user can consequently read sensitive tables, modify or delete data, or drop tables, while non-reactive JPA applications and NoSQL backends are outside this root cause. This issue is fixed in 9.4.0.
Blast Radius
ecosystem impact- 4 npm packages depend on generator-jhipster (4 direct, 0 indirect)
Ecosystem-wide dependent count for version 7.0.0.
Technical POC Analysis
CWE-89.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Applications generated by JHipster 7.0.0 through 9.3.x and running on the reactive WebFlux + Spring Data R2DBC + SQL stack contain a SQL injection flaw that allows any authenticated user - including one self-provisioned through the default registration flow - to read, alter, or destroy data, including the user table that stores password hashes. Because this is generated boilerplate replicated across every service built with the affected generator versions, the exposure is potentially organization-wide and directly threatens credential integrity and customer or employee data. Leadership should treat this as a high-priority inventory-and-remediation program, not a single-application patch.
Apply vendor patch: generator-jhipster 9.4.0 is the vendor-released fix, but it only corrects newly generated code - existing deployments must be regenerated or manually patched. Until then, enforce an allow-list validation of the sort parameter in the generated endpoints, block semicolons and SQL metacharacters in sort via WAF or gateway rules, restrict or disable self-registration to limit attacker-provisioned low-privileged accounts, constrain database account privileges used by the R2DBC connection, and monitor for anomalous multi-statement queries.
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
SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.
A class generated by the Generator in JHipster before 6.3.0 and JHipster Kotlin through 1.1.0 produces code that uses an
JHipster is a development platform to quickly generate, develop, & deploy modern web applications & microservice archite
Stored cross-site scripting can occur in applications generated by JHipster before generator-jhipster 9.4.0 and react-jh
In generator-jhipster-kotlin version 1.6.0 log entries are created for invalid password reset attempts. Rated medium sev
EUVD-2026-95130
GHSA-r223-96jv-q533
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB