/

CVE-2026-110615

Severity:

HIGH RISK

(7.1)

Missing Authorization (CWE-862) in jshERP User API

CVE-2026-110615

Deferred

Vulnerability type

Category:

Missing Authorization

CWE:

CWE-862

Impact:

Unauthorized account status modification and tenant-level denial of service

Severity:

HIGH RISK

(7.1)

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 contains a missing authorization vulnerability in the user status management endpoint, allowing authenticated low-privilege users to change the account status of other users. Under tenant-level access, an attacker may disable non-owner accounts, including administrators, or re-enable accounts that were intentionally disabled.

jshERP contains a missing authorization vulnerability in the user status management endpoint, allowing authenticated low-privilege users to change the account status of other users. Under tenant-level access, an attacker may disable non-owner accounts, including administrators, or re-enable accounts that were intentionally disabled.

Affected context

The issue occurs in jshERP deployments where the POST /user/batchSetStatus endpoint is accessible to authenticated users but does not sufficiently verify whether the caller is authorized to modify each submitted account identifier. Risk is increased when tenant user-management operations rely on client-supplied identifiers without enforcing server-side ownership, role, or administrative-scope checks.

The issue occurs in jshERP deployments where the POST /user/batchSetStatus endpoint is accessible to authenticated users but does not sufficiently verify whether the caller is authorized to modify each submitted account identifier. Risk is increased when tenant user-management operations rely on client-supplied identifiers without enforcing server-side ownership, role, or administrative-scope checks.

Exploit preconditions

  • Attack surface: The authenticated user-management API endpoint
  • Required access: A valid account with sufficient access to reach the endpoint; administrative privileges may not be required
  • Trigger point: Submission of a request containing target user identifiers and an account-status value
  • Why exploitation is possible: The endpoint does not adequately enforce authorization for each targeted account before applying the requested status change
  • Attack surface: The authenticated user-management API endpoint
  • Required access: A valid account with sufficient access to reach the endpoint; administrative privileges may not be required
  • Trigger point: Submission of a request containing target user identifiers and an account-status value
  • Why exploitation is possible: The endpoint does not adequately enforce authorization for each targeted account before applying the requested status change

Why this happens

The underlying bug is an authorization check that is missing, incomplete, or applied only to the request as a whole rather than to every targeted user. When server-side logic trusts client-supplied identifiers and status changes without validating tenant scope, role permissions, and target ownership, a low-privilege principal can perform an administrative operation. This behavior maps to CWE-862, Missing Authorization.

The underlying bug is an authorization check that is missing, incomplete, or applied only to the request as a whole rather than to every targeted user. When server-side logic trusts client-supplied identifiers and status changes without validating tenant scope, role permissions, and target ownership, a low-privilege principal can perform an administrative operation. This behavior maps to CWE-862, Missing Authorization.

Potential impact

  • Attackers may disable administrator or other privileged accounts
  • A tenant may experience denial of service because legitimate users are locked out
  • Attackers may re-enable accounts that were intentionally disabled
  • Account-management auditability and administrative control may be undermined
  • Repeated abuse could disrupt tenant operations and incident response
  • Attackers may disable administrator or other privileged accounts
  • A tenant may experience denial of service because legitimate users are locked out
  • Attackers may re-enable accounts that were intentionally disabled
  • Account-management auditability and administrative control may be undermined
  • Repeated abuse could disrupt tenant operations and incident response

General mitigation guidance

Mitigation generally focuses on enforcing authorization on the server for

every target account and every requested status transition.

Common defensive patterns include:

  • Applying deny-by-default authorization to user-management operations
  • Verifying the caller's role, tenant scope, and permitted target set server-side
  • Rejecting bulk requests that include unauthorized or cross-tenant identifiers
  • Separating ordinary user actions from administrator-only account-status changes
  • Enforcing safe state-transition rules, especially for privileged and owner accounts
  • Avoiding reliance on client-provided role, tenant, or permission values
  • Using least privilege and preserving tamper-resistant audit records for status changes

Mitigation generally focuses on enforcing authorization on the server for

every target account and every requested status transition.

Common defensive patterns include:

  • Applying deny-by-default authorization to user-management operations
  • Verifying the caller's role, tenant scope, and permitted target set server-side
  • Rejecting bulk requests that include unauthorized or cross-tenant identifiers
  • Separating ordinary user actions from administrator-only account-status changes
  • Enforcing safe state-transition rules, especially for privileged and owner accounts
  • Avoiding reliance on client-provided role, tenant, or permission values
  • Using least privilege and preserving tamper-resistant audit records for status changes

How teams detect issues like this

Organizations commonly detect this class of issue through:

  • Static analysis and policy checks for endpoints that update user records without nearby authorization enforcement
  • Code review of bulk-update handlers, identifier-based object access, and tenant-boundary checks
  • Authorization tests using low-privilege accounts against administrator, cross-tenant, and disabled-user targets
  • API monitoring for unusual bursts of account-status changes or requests containing many user identifiers
  • Automated security testing that verifies deny-by-default behavior for every object in a bulk request

Organizations commonly detect this class of issue through:

  • Static analysis and policy checks for endpoints that update user records without nearby authorization enforcement
  • Code review of bulk-update handlers, identifier-based object access, and tenant-boundary checks
  • Authorization tests using low-privilege accounts against administrator, cross-tenant, and disabled-user targets
  • API monitoring for unusual bursts of account-status changes or requests containing many user identifiers
  • Automated security testing that verifies deny-by-default behavior for every object in a bulk request

Sources

SourceLink
github.comgithub.com/jishenghua/jshERP
github.comgithub.com/jishenghua/jshERP/blob/v3.6/jshERP-boot/src/main/java/com/jsh/erp/controller/UserController.java#L541-L555
github.comgithub.com/jishenghua/jshERP/blob/v3.6/jshERP-boot/src/main/java/com/jsh/erp/service/UserService.java#L901-L946
hackmd.iohackmd.io/@1ExmmukzRMWN7B4gQ4W-4Q/jsherp-user-account-lifecycle-missing-authz
vulncheck.comvulncheck.com/advisories/jsherp-through-3.6-missing-authorization-via-user-batchsetstatus

Frequently asked

questions

Yes, when the affected API is reachable through the application and an

attacker has a valid authenticated account. Exploitation does not

necessarily require administrative privileges.

The attacker needs authenticated access to the endpoint and enough

application access for the request to be accepted. The central weakness is

the failure to verify authorization for each targeted account.

Enforce server-side, per-object authorization for every identifier in a

bulk request, including tenant, role, ownership, and allowed state-transition

checks. Reject the complete operation or unauthorized entries according to a

clearly defined fail-closed policy.

Use deny-by-default authorization, centralize permission checks, test

horizontal and vertical access boundaries, and monitor sensitive bulk

account-management actions.

Yes, when the affected API is reachable through the application and an

attacker has a valid authenticated account. Exploitation does not

necessarily require administrative privileges.

The attacker needs authenticated access to the endpoint and enough

application access for the request to be accepted. The central weakness is

the failure to verify authorization for each targeted account.

Enforce server-side, per-object authorization for every identifier in a

bulk request, including tenant, role, ownership, and allowed state-transition

checks. Reject the complete operation or unauthorized entries according to a

clearly defined fail-closed policy.

Use deny-by-default authorization, centralize permission checks, test

horizontal and vertical access boundaries, and monitor sensitive bulk

account-management actions.

Find out what's already
exploitable in your codebase.