Skip to main content

NexoPOS EUVDEUVD-2026-111541

| CVE-2026-117606 MEDIUM
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-10-28 VulnCheck GHSA-8px7-qjpp-cj5c
5.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as cashier with nexopos.use.registers
  2. Exploit
    Identify another cashier's open register ID
  3. Execution
    POST close/cash-in/cash-out to /api/cash-registers/{action}/{register}
  4. Impact
    Force-close session or alter its balance

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
Exploitation Conditions

Exploitation requires an authenticated NexoPOS account holding the default nexopos.use.registers permission (granted to the built-in store cashier role), and a target register session that was opened by a different cashier and is currently open. The attacker then submits a closing, cash-in, or cash-out action to POST /api/cash-registers/{action}/{register} for a register whose used_by value is not their own user ID. Limiting factors: a valid low-privileged cashier credential is required (not remote-unauthenticated), impact is confined to other users' open register sessions within the same installation, and installations with only a single cashier or without the default register permission granted are not meaningfully exposed. Updating to the patched code (PR #2673), which enforces register ownership, is the vendor-provided fix.

Impact

This is a medium-severity authorization flaw (CVSS 4.0 base 5.3, CWE-639) whose real-world risk is moderate and bounded. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:L) is internally consistent with the description: exploitation is over the network, low complexity, requires an authenticated low-privileged account (PR:L), needs no user interaction, and yields only limited integrity and availability impact with no confidentiality loss. No EPSS score is provided in the input, there is no CISA KEV listing, and no public exploit is identified - so the exploitation-probability and active-exploitation signals are either absent or negative. The vulnerable code path and fix are fully documented (vendor issue #2668, patch PR #2673, and the exact CashRegistersService.php lines), which makes the flaw easy to understand and reproduce but does not amount to weaponized exploit code. The vuln.today decision label is 'this_month', not act_now or emergency, aligning with a genuine-but-not-urgent authorization bug rather than a widespread or actively exploited threat. Net: this is a real, patch-worthy insider/multi-tenant integrity issue for NexoPOS operators, not a high-CVSS-but-illusory finding - but its blast radius is limited to users who already hold a valid cashier account, which is why severity stays medium.

Exploit ScenarioDerived

A store with multiple cashiers gives each the default nexopos.use.registers permission. A malicious or compromised cashier, authenticated to the POS API, sends a crafted POST to /api/cash-registers/{action}/{register} targeting a register session opened by a different cashier, force-closing that session or injecting cash-in/cash-out entries to distort its balance. No public exploit code is identified, but the advisory and patch document the exact endpoint, making reproduction straightforward for any authenticated cashier.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 28, 2026

NexoPOS through 6.3.0 allows an authenticated cashier holding the default nexopos.use.registers permission to act on register sessions opened by a different cashier, because CashRegistersService never compares the register's used_by value with the requesting user. By posting closing, cash-in, or cash-out actions to /api/cash-registers/{action}/{register}, such a user can force-close another cashier's open session or alter its recorded balance, affecting integrity and availability of register data. The flaw requires a valid low-privileged cashier account and a target session owned by someone else; no public exploit code was identified at time of analysis, and the vendor fix (PR #2673) enforces register ownership.

RemediationAI

Vendor-released patch: upstream pull request #2673 (https://github.com/Blair2004/NexoPOS/pull/2673), which adds ensureRegisterOwner() to CashRegistersService and rejects any close, cash-in or cash-out request whose register used_by does not match the authenticated user; the provided data does not name a tagged release version containing it, so confirm with the project (https://github.com/Blair2004/NexoPOS) that the deployed build includes the commit before considering the installation fixed. Where updating must be deferred, the only effective control in the evidence is to remove the default nexopos.use.registers permission from cashier roles that do not need register operations, accepting that those users then cannot open or close registers at all, or to enforce one cashier per register session and review RegisterHistory records for actions whose author_id differs from the owning session, which detects abuse but does not prevent it. Updating is the complete fix; no other workaround is documented.

Affected VersionsENISA

NexoPOS 0 ≤6.3.0

Affected Packages

euvd nexopos 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

NexoPOS is a Laravel-based point-of-sale application whose cash register lifecycle (open, close, cash-in, cash-out, history) is implemented in app/Services/CashRegistersService.php and exposed through Sanctum-authenticated API routes. The weakness is CWE-639, authorization bypass through a user-controlled key: each Register row carries a used_by column identifying the cashier who owns the session, but the service methods never compare that key against Auth::id(). Authorization therefore stops at the coarse role permission nexopos.use.registers (granted to the built-in store cashier role by default), and any cashier with that permission can supply another cashier's register identifier in the URL and have the action applied. The upstream pull request adds a private ensureRegisterOwner() helper that throws NotAllowedException when the authenticated ID is null, the register owner is null, or the two differ as strings, and invokes it from openRegister, closeRegister, deleteRegisterHistoryUsingOrder and cashOut; the accompanying feature test RegisterSessionAuthorizationTest verifies that non-owners receive 403 for close, cash-in and cash-out, that direct service calls cannot bypass the check, and that ownerless registers cannot be mutated. The trigger path for the individual HTTP actions is described in the vendor issue and PR rather than in the CVE record itself.

Know when Nexopos gets its next vulnerability

  • 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 5.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N
vuln.today AI 5.4 MEDIUM

Authenticated cashier (PR:L) over the network with no UI can alter other users' register balances (I:L) and force-close sessions (A:L); no data disclosure (C:N) and scope unchanged.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:L/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
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

NexoPOS through 6.3.0 contains a missing authorization vulnerability that allows authenticated cashiers to manipulate other cashiers' register sessions because CashRegistersService never compares used_by with the user. Attackers holding the default nexopos.use.registers permission can submit closing, cash-in, or cash-out actions to POST /api/cash-registers/{action}/{register} to force-close sessions or alter balances.

Threat Intelligence Overview

EPSS Score
0.3%
Top 80% exploitable
Prevalence
Low
NexoPOS is a niche open-source PHP/Laravel POS for small retailers
Social Media
1
Sightings
Data Quality
4 sources
Confidence: Medium

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

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

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