/

CVE-2026-94497

Severity:

HIGH RISK

(8.3)

Insecure Direct Object Reference (CWE-639) in jshERP

CVE-2026-94497

Deferred

Vulnerability type

Category:

Broken Object Level Authorization

CWE:

CWE-639

Impact:

Unauthorized data access, modification, and deletion

Severity:

HIGH RISK

(8.3)

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 does not consistently verify that an authenticated user owns or is authorized to access a business object referenced by its identifier. An authenticated user who can submit another object's identifier may be able to read, modify, or delete that object through affected endpoints.

Affected context

The vulnerability occurs in jshERP endpoints that retrieve, update, or delete resources by direct object identifier. It becomes risky when endpoint logic authenticates the requester but does not also enforce ownership, tenant boundaries, or an equivalent authorization relationship for the referenced object.

Exploit preconditions

  • Attack surface: By-ID information, update, and delete endpoints across affected resource types
  • Required access: An authenticated jshERP account able to reach the endpoints
  • Trigger point: A request that references a business object by identifier
  • Why exploitation is possible: The server processes the identifier without reliably checking whether the requester owns or is authorized to access the referenced object

Why this happens

The underlying bug is a failure of object-level authorization. Endpoint handlers use a client-supplied object identifier to locate a resource, but authorization decisions are not consistently bound to the authenticated user's identity, role, organization, or ownership relationship. This pattern maps to CWE-639, Authorization Bypass Through User-Controlled Key, commonly called insecure direct object reference.

Potential impact

  • Unauthorized users may read other users' business data
  • Attackers may modify records belonging to other users
  • Attackers may delete business objects without proper authorization
  • Data integrity, confidentiality, and operational continuity could be affected
  • Cross-tenant or cross-account access may occur where isolation controls are absent

General mitigation guidance

Mitigation generally centers on enforcing object-level authorization on every read, update, and delete operation. Secure-by-default patterns include resolving resources through the authenticated user's authorized scope, applying server-side ownership or tenant predicates, denying access unless an explicit permission relationship exists, and avoiding reliance on client-supplied identifiers alone. Authorization checks should occur before returning or mutating data, and service accounts and user roles should receive only the privileges required for their business functions.

How teams detect issues like this

Detection can include static analysis and code review searches for endpoints that accept object identifiers and perform database access without nearby authorization or ownership predicates. Review signals include generic by-id handlers, direct repository lookups based only on request parameters, and authorization checks performed only at login or route level. Automated tests and policy checks can verify that users from different accounts or tenants cannot access, modify, or delete one another's resources.

Sources

SourceLink
github.comgithub.com/LinYuanyi1/cve-request-poc/blob/master/jshERP/poc-12-business-data-horizontal-access.py
github.comgithub.com/jishenghua/jshERP
github.comgithub.com/jishenghua/jshERP/blob/v3.6/jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java#L119-L125
vulncheck.comvulncheck.com/advisories/jsherp-through-3.6-unauthorized-access-via-by-id-endpoints

Frequently asked

questions

Yes, affected endpoints may be reachable over the application interface, but

exploitation generally requires an authenticated account and access to the

relevant API or web request path.

Not necessarily. A lower-privileged authenticated user may be able to trigger

the issue if the endpoint fails to enforce ownership or object-level

permissions.

Perform authorization checks for the specific object on every read, update, and

delete request, using server-side identity and ownership or tenant scope.

Apply centralized authorization policies, use deny-by-default resource

access, test cross-user and cross-tenant isolation, and review all

identifier-based endpoints for object-level permission enforcement.

Find out what's already
exploitable in your codebase.