Safeguard
Vulnerability Analysis•

CVE-2026-109186: High Mass Assignment in jshERP

CVE-2026-109186 lets a logged-in jshERP user overwrite tenant ids and password hashes via the user update call. No fix is listed, so restrict access now.

Safeguard Security Team
4 min read

CVE-2026-109186 is a high severity mass assignment flaw (CVSS 8.8) in jshERP through version 3.6. An authenticated user can overwrite protected fields, including the tenant id and password, which can lead to switching tenants or taking over accounts. The record names no fixed version.

What's affected

The record says jshERP through 3.6 is affected, and VulnCheck's advisory, which we fetched, says jshERP up to and including 3.6. Neither names a fixed version, so the project repository is where to look for a release after 3.6.

The weakness is CWE-915, improperly controlled modification of dynamically determined object attributes, the formal name for mass assignment. The record's vector is network reachable, low complexity, low privileges, no user interaction, and high impact on confidentiality, integrity and availability.

A difference in scoring: the record gives CVSS 3.1 8.8, while VulnCheck gives a CVSS 4.0 score of 8.7. These are different versions of the scoring system and both say high.

The update handler for users is the entry point. The record describes a crafted request body to the user update endpoint that can switch a user into another tenant at next login, or overwrite other users' password hashes. For a multi tenant ERP, tenant separation is the main security promise, so this reaches the core of the product.

How to check if you're exposed

Identify whether you run jshERP and which version, and compare it with 3.6.

Then consider who has an account. The record needs an authenticated user, but in an ERP that covers every employee, partner and customer user in every tenant. List the accounts and the tenants and ask which of them you would trust with another tenant's data.

Review the audit trail for changes to user records: look at the database for users whose tenant id changed or whose password hash changed without a reset request. If your database keeps timestamps on user rows, query for recent modifications and compare them with your help desk records.

Finally, look at the web server or proxy logs for calls to the user update endpoint from accounts that do not hold administrator rights.

What to do now

  1. Watch the jshERP repository for a release after 3.6 and upgrade when it appears.
  2. Until then, limit access to the application to trusted networks or a VPN, because any account holder can reach the flaw.
  3. Review user records for unexpected tenant or password changes and force password resets for accounts that look touched.
  4. Add a proxy rule that blocks the user update call for non administrator roles, if your deployment allows it.
  5. If you maintain the code, bind update requests to an explicit allowlist of fields instead of copying the whole request body onto the user object.

Why it matters

Mass assignment happens when a framework copies every field in an incoming request onto an object. If the object has sensitive fields such as the tenant or the password hash, a caller who adds those fields to the request can set them, even though the form never offered them.

The fix is not complicated. A handler should take only the fields it expects, which is usually a short list, and ignore the rest. Many frameworks offer an allowlist feature for this purpose. The mistake survives because the happy path works, and nobody tests with an extra field.

The consequences here are the worst kind for a business system. Crossing tenants breaks separation of customers, and overwriting another user's password hash is account takeover, without needing their password. The record does not mark this CVE as known exploited, but with no patch noted, exposure management matters.

Quick check

Is there a fix?

The record and VulnCheck name no fixed version. Watch the project repository.

Do I need an account to exploit it?

Yes, the record says authenticated users. In an ERP, that can still be a large group.

Sources

You can also run a free in-browser dependency scan at gold.safeguard.sh/scan to see which of your packages carry known CVEs.

Last reviewed: 18 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.