Skip to main content

jshERP CVE-2026-109186

| EUVDEUVD-2026-97390 HIGH
Improperly Controlled Modification of Dynamically-Determined Object Attributes (CWE-915)
2026-10-12 disclosure@vulncheck.com GHSA-q6mx-rrwp-p348
8.7
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as low-privileged tenant user
  2. Delivery
    Craft PUT /user/update with tenant_id/password fields
  3. Exploit
    Mass assignment binds protected fields
  4. Execution
    Overwrite target password hash or own tenant_id
  5. Persist
    Log in as victim or into foreign tenant
  6. Impact
    Account takeover / cross-tenant access

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V4 - API and Web Service Object attribute protection
Exploitation Conditions

Exploitation requires the attacker to already hold a valid authenticated jshERP account (PR:L) capable of calling the PUT /user/update endpoint; no user interaction or non-default configuration is needed, and the flaw is present in the default UserController update handler through version 3.6. The specific prerequisite is the ability to submit an update request whose body includes the protected tenant_id and password fields, which the handler binds without a server-side allowlist. Limiting factors: the attacker must first obtain or register a low-privilege account (so purely unauthenticated attackers are excluded), and impact scope depends on the deployment being multi-tenant and having other user accounts worth taking over.

Impact

This is a credible, actionable priority rather than a high-CVSS-but-low-real-risk issue. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N) describes network-reachable exploitation with low complexity, no special attack requirements, and only low privileges - meaning any authenticated user (any tenant account) can trigger it, which matches the description's 'authenticated users' and the mass-assignment nature (CWE-915). A publicly available POC exists (github-poc reference), raising practical exploitability, though the CVE is NOT in CISA KEV and no EPSS score was provided in the input, so there is no evidence of widespread or confirmed active exploitation yet - the POC signal and the KEV/EPSS signals should not be conflated. The impact triad VC:H/VI:H/VA:H is consistent with the description: overwriting password hashes enables full account takeover (integrity/availability for the victim) and tenant_id manipulation enables cross-tenant access (confidentiality). The one notable signal conflict is the 'Information Disclosure' tag, which understates the vulnerability - the dominant impact is integrity/privilege (account takeover and tenant switching), not merely disclosure. Net assessment: real priority for any organization running jshERP with multiple user accounts, tempered by the fact that the attacker must first hold a valid low-privilege account and that real-world deployment footprint is limited.

Exploit ScenarioDerived

An attacker who holds any low-privileged jshERP account (self-registered or a compromised standard user) sends a crafted PUT /user/update request that includes the protected tenant_id and password fields in the body. Because the update handler binds request parameters directly to the user entity (mass assignment), the attacker overwrites another user's password hash to seize that account, or changes their own tenant_id to pivot into a different tenant on next login. A public POC (poc_identity_privilege_write.py) demonstrates this write primitive.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
1 public PoC No patch listed yet 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 12, 2026

Authenticated mass assignment in jshERP through 3.6 lets any user holding a valid low-privilege account overwrite protected fields on a user record - including tenant_id and password - by submitting a crafted PUT /user/update body, enabling silent cross-tenant identity switching on the next login or takeover of other accounts via password-hash overwrite. The vulnerable code path is the default UserController update handler and exploitation requires only an authenticated session (CVSS v3.1 base 8.7, PR:L, no user interaction or non-default configuration). Publicly available exploit code exists and no confirmed active exploitation (CISA KEV) has been reported at time of analysis.

RemediationAI

No vendor-released patch was identified at time of analysis; the references in the advisory link to the vulnerable source lines rather than to a released fix or tagged version, so operators should not assume an upstream upgrade resolves the issue. Until an official fix ships, apply a code-level fix by binding request bodies to an explicit DTO/allowlist that excludes tenant_id and password, then reloading those two fields server-side from the authenticated principal and the existing record - this is the only mitigation that removes the flaw rather than reducing reach. Note that this requires forking/maintaining jshERP locally, which carries a maintenance and regression burden. As compensating controls with clear trade-offs: front the deployment with a reverse proxy or API gateway rule that blocks or restricts PUT /user/update to administrative sessions (this breaks normal self-service profile updates for ordinary users); enforce a server-side check that the submitted record's tenant_id matches the caller's current tenant and reject any mismatch; require re-authentication plus a separate endpoint for password changes so password can never appear in a generic update body; and treat the endpoint as a monitoring signal - alert on any update request whose body contains tenant_id or password, since such traffic is almost certainly malicious. Because password hashes are overwritable, rotate credentials and invalidate sessions for all users on exposed instances, and review audit logs for unexpected tenant reassignments. Vendor-independent detail is available at https://www.vulncheck.com/advisories/jsherp-through-3.6-mass-assignment-via-put-user-update, and the public PoC at https://github.com/AnkesKasty/cve-request-poc/blob/a7b6d1423555812d8efa26c91c5d0683164b31e5/jshERP/poc_identity_privilege_write.py can be used to validate that a mitigation actually blocks the request.

Affected VersionsENISA

jshERP 0 ≤3.6

Affected Packages

euvd jsherp no fix

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 root cause is CWE-915, Improperly Controlled Modification of Dynamically-Determined Object Attributes - the classic Java/Spring mass assignment pattern. In jshERP-boot, the Spring MVC update handler in UserController.java (referenced lines 97-103) binds the inbound request body directly onto a User domain object and forwards it to UserService.java (lines 176-192), which persists the object without an allowlist of writable properties or an ownership check. Two persistent attributes are therefore attacker-controllable: tenant_id, the multi-tenancy discriminator that governs which tenant's data set the account is scoped to on subsequent authentication, and password, stored as a hash but overwritten with attacker-chosen material. Because binding and persistence are generic, the request looks like an ordinary profile update - the impact is a server-side trust failure, not a parsing or injection bug. The supplied tags label the finding as Information Disclosure, but the exposed primitive is integrity/privilege-write (write-what-you-want on protected attributes), which is the more accurate characterization given the CVSS v3.1 vector C:H/I:H/A:H.

Know when the next one hits your stack

  • 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

Vendor (vulncheck) PRIMARY 8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
vuln.today AI 8.8 HIGH

Network endpoint reachable by any authenticated low-privilege user (PR:L, AV:N, AC:L); mass assignment yields password overwrite and cross-tenant access, giving full C/I/A:H with unchanged scope.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

jshERP through 3.6 contains a mass assignment vulnerability in the UserController update handler that allows authenticated users to overwrite protected fields including tenant_id and password. Attackers can send a crafted PUT /user/update body to switch into another tenant on next login or overwrite other users' password hashes for account takeover.

Technical POC Analysis

CWE-915 (mass assignment), per the advisory.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Latest POC

1 public PoC link from github

Sign in to open the public PoC links collected for this CVE.

Executive ViewAI

Why It Matters

jshERP versions through 3.6 contain an authenticated mass assignment vulnerability (CVE-2026-109186) that allows any authenticated low-privilege user to overwrite critical user record fields, including tenant_id and password, leading to cross-tenant identity switching or account takeover. Publicly available exploit code exists, and no vendor-released patch has been identified at time of analysis. This undermines multi-tenant isolation and could result in unauthorized access to sensitive business data, so leadership should prioritize immediate mitigations.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Implement input validation to whitelist modifiable fields in user update requests, enforce least privilege, deploy WAF rules to block malicious PUT requests, and monitor for anomalous account changes.

Threat Intelligence Overview

EPSS Score
0.4%
Top 72% exploitable
Prevalence
Low
niche open-source Chinese ERP, limited enterprise/SMB footprint
Social Media
2
Sightings
Data Quality
3 sources
Confidence: Low

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

64
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy