/

CVE-2026-94412

Severity:

HIGH RISK

(8.8)

Authorization Bypass (CWE-862) in jshERP Password Reset

CVE-2026-94412

Deferred

Vulnerability type

Category:

Authorization Bypass

CWE:

CWE-862

Impact:

Unauthorized Account Access

Severity:

HIGH RISK

(8.8)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

jshERP through version 3.6 contains an authorization bypass in the password reset endpoint, allowing an authenticated user to reset another user's password. By supplying a different target account identifier, an attacker may gain access to user accounts, including administrative accounts.

Affected context

The vulnerability occurs in jshERP deployments through version 3.6 when the POST /user/resetPwd endpoint accepts a caller-provided target user ID without adequately verifying that the authenticated caller is authorized to manage that account. The risk is greatest where ordinary authenticated users can reach the endpoint and password resets use a predictable or known default value.

Exploit preconditions

  • Attack surface: The authenticated password-reset API endpoint - Required access: A valid jshERP user session or equivalent authenticated access - Trigger point: Processing a password-reset request for a selected account - Why exploitation is possible: The endpoint may trust the supplied target

user identifier without enforcing an object-level authorization check

Why this happens

The underlying bug is missing or ineffective object-level authorization on a state-changing password-management operation. The application appears to authenticate the requester but does not reliably confirm that the requester is permitted to modify the referenced account, which maps to CWE-862: Missing Authorization. Using a caller-controlled account identifier in a privileged operation without an ownership or role check creates an authorization boundary failure.

Potential impact

  • An attacker may take over other user accounts
  • Administrative accounts could be compromised
  • Unauthorized users could access protected business data
  • Attackers could alter records or perform actions under another identity
  • Account recovery and audit integrity could be undermined

General mitigation guidance

Mitigation generally centers on enforcing authorization at the endpoint and service layers, rather than relying only on authentication. Password-reset operations should use secure-by-default authorization policies, verify that the requester has permission to manage the specific target account, and restrict administrative actions to appropriately privileged roles. Systems should reduce trust in caller-supplied identifiers, avoid predictable default passwords, use controlled recovery flows with sufficiently strong verification, and record security-relevant reset events for review.

How teams detect issues like this

Detection approaches include static analysis and code review for password or account-management methods that accept arbitrary user identifiers without nearby authorization checks. Reviewers can look for direct database updates based on request parameters, missing ownership or role validation, and default credentials generated during reset flows. Runtime monitoring can flag unusual password resets across many accounts, resets by low-privilege users, and administrative-account changes initiated from unexpected sessions. Automated code-review tools and policy checks may help identify missing object-level authorization patterns.

Sources

SourceLink
github.comgithub.com/LinYuanyi1/cve-request-poc/blob/master/jshERP/poc-02-user-resetpwd-account-takeover.py
github.comgithub.com/jishenghua/jshERP
github.comgithub.com/jishenghua/jshERP/blob/v3.6/jshERP-boot/src/main/java/com/jsh/erp/controller/UserController.java#L230-L244
vulncheck.comvulncheck.com/advisories/jsherp-through-3.6-authorization-bypass-via-resetpwd

Frequently asked

questions

It can be exploitable through the application's API when the endpoint is

network-accessible and the attacker has authenticated access.

Not necessarily. The key requirement is an authenticated account that can

reach the vulnerable endpoint; the impact depends on how authorization is

enforced.

Enforce object-level authorization for every password-reset request and verify

that the caller is permitted to manage the specific target account.

Apply centralized authorization checks, minimize trust in client-supplied

identifiers, use secure recovery workflows, and test both same-role and

cross-role account-access boundaries.

Find out what's already
exploitable in your codebase.