Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with low-privilege account
-
DeliveryEnumerate object primary keys
-
ExploitPOST pks to /api/report/print/ with default template
-
ExecutionServer renders bypassing view-permission check
-
PersistDownload stored report from DataOutput
-
ImpactExfiltrate restricted business data
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 | Requires an authenticated InvenTree account (any role, including a role-less or unrelated-role user) on a version prior to 1.4.0; no admin or elevated privilege is needed. Exploitation targets the report/label print endpoints POST /api/report/print/ and POST /api/report/label/print/ and depends on default report/label templates existing for the target business models (InvenTree ships these for major models by default) and on the DataOutput mechanism storing the rendered artifact for the requesting user. The attacker must enumerate valid object primary keys for the target model. Limiting factors: valid credentials are mandatory (PR:L), impact is confidentiality-only (no data modification or DoS), and disclosure is bounded to fields rendered by the available templates. |
| Impact | This is a genuine but modest-severity broken-access-control issue (CWE-639). The vendor CVSS 3.1 vector (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N = 4.3) is internally consistent with the description and I concur: network-reachable API, low complexity, but requires an authenticated account (PR:L) and yields only confidentiality impact (C:L, no integrity/availability). No EPSS score, no CISA KEV listing, and no public exploit code were provided, so exploitation status is 'no public exploit identified at time of analysis.' There is no SSVC framework data in the input. The realistic exploitability is meaningful because the source-code diff (PR #12142) confirms the root cause precisely - the print endpoints omitted users.permissions.check_user_permission before selecting objects and rendering - and default templates exist for major business models, so a low-privilege account can extract data the detail APIs would deny. However, the confidentiality scope is bounded to whatever data the default report/label templates expose, and an authenticated foothold is required, which keeps real-world risk moderate rather than critical. No signals conflict; this is a correctly-scored medium-low issue, not an inflated high-CVSS finding. |
| Exploit ScenarioDerived | An attacker who holds any low-privilege or role-less InvenTree account (e.g., a limited warehouse or read-only user) sends POST requests to /api/report/print/ or /api/report/label/print/, referencing a default template plus a range of enumerated primary keys for models they are not authorized to view. Because DataOutput stores the rendered artifact for the requesting user, they then download reports containing purchase, sales, pricing, BOM, stock, supplier, and customer data. No public exploit code is identified, but the fixing PR diff publicly documents the exact vulnerable code path, lowering the bar to reproduce. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 21, 2026
InvenTree versions prior to 1.4.0 expose business data through the report and label print endpoints because POST /api/report/print/ and POST /api/report/label/print/ authenticate the caller but never invoke users.permissions.check_user_permission against the target model's view role. Any authenticated account - including one with no roles or only unrelated roles - can enumerate object primary keys and render them through the default templates InvenTree ships for major business models, then retrieve the resulting artifact from DataOutput, obtaining purchase, sales, part, bill-of-materials, stock, build, supplier, customer, pricing, and inventory data that the corresponding detail APIs would correctly deny. Fixed in 1.4.0; no public exploit code or confirmed active exploitation was identified at time of analysis, and the EPSS-style risk is modest because valid credentials are required and impact is limited to confidentiality (CVSS 4.3, CWE-639).
RemediationAI
Vendor-released patch: upgrade to InvenTree 1.4.0, which contains the upstream fix (commit 73bfa53a35f67027132b9ef053d82aef033f7175, PR #12142, API version 502) that calls users.permissions.check_user_permission for the view role on the resolved model before evaluating any queryset on both /api/report/print/ and /api/report/label/print/, and that restricts selectable templates to enabled=True. See https://github.com/inventree/InvenTree/security/advisories/GHSA-7w96-99fj-8g7x and https://github.com/inventree/InvenTree/releases/tag/1.4.0. If an immediate upgrade is not possible, apply compensating controls with the following trade-offs: disable or delete the built-in default report and label templates for sensitive models such as purchase order, sales order, part, BOM, pricing and stock, which removes the rendering primitives the attack relies on but degrades legitimate reporting until templates are recreated with appropriate scoping; restrict network access to the reporting endpoints via reverse-proxy rules or a WAF so only trusted administrative subnets or trusted roles can reach /api/report/print/ and /api/report/label/print/, which is effective but blocks normal reporting workflows for remote users; and audit user accounts to remove role-less or unrelated-role logins, since the flaw requires only a valid authenticated session and no elevated privilege (CVSS PR:L). Because DataOutput stores rendered artifacts for the requesting user, also review and purge retained report outputs, as hardening the endpoint alone does not invalidate data already generated. No public exploit code was identified, so prioritization should be driven by the presence of untrusted or low-privilege accounts rather than by active exploitation.
Affected VersionsENISA
Affected Packages
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
InvenTree is a Django/Django REST Framework inventory management application whose reporting subsystem renders user-supplied or built-in templates against arbitrary business model instances. The vulnerable code path in src/backend/InvenTree/report/api.py resolved the target model with template.get_model() and then selected records via template.get_model().objects.filter(pk__in=items) without first calling users.permissions.check_user_permission(request.user, model_class, 'view'). This is a classic CWE-639 authorization-through-user-controlled-key flaw: authorization was enforced on the existence of an authenticated session and on the template selection, but never on the per-model role of the caller, so the object lookup itself acted as an oracle. The failure was compounded by two design details - InvenTree ships default report and label templates for major business models (parts, stock, build orders, purchase/sales/return orders, companies and suppliers), and DataOutput persists the generated artifact for the requesting user, meaning the rendered PDF/data could simply be downloaded rather than only observed in the response. The upstream fix (PR #12142, commit 73bfa53a35f67027132b9ef053d82aef033f7175, released in 1.4.0 with API version bump to v502) adds an explicit check_user_permission(..., 'view') guard that raises PermissionDenied before any queryset is evaluated on both print endpoints, and additionally restricts the serializer querysets for ReportTemplate and LabelTemplate to enabled=True records so disabled templates can no longer be referenced. Test coverage was added via ReportPrintPermissionTest and role fixtures such as part.view. The CPE cpe:2.3:a:inventree:inventree:*:*:*:*:*:*:*:* reflects that all releases before 1.4.0 are in scope.
Know when Inventree 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
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Network API reachable with low complexity, requires an authenticated low-privilege account (PR:L), and yields only partial confidentiality via report data (C:L) with no integrity or availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
InvenTree is an Open Source Inventory Management System. Prior to 1.4.0, ReportPrint at POST /api/report/print/ and LabelPrint at POST /api/report/label/print/ require authentication but do not call users.permissions.check_user_permission for the caller's per-model view role before selecting objects by primary key and rendering them with a chosen template. Because default templates exist for major business models and DataOutput stores the generated artifact for the requesting user, a role-less or unrelated-role account can enumerate object identifiers and download reports containing purchase, sales, part, bill-of-materials, stock, build, supplier, customer, pricing, and inventory data that the corresponding detail APIs would deny. This issue is fixed in version 1.4.0.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Improper Neutralization of Formula Elements in a CSV File in GitHub repository inventree/inventree prior to 0.7.2. Rated
Unrestricted Upload of File with Dangerous Type in GitHub repository inventree/inventree prior to 0.7.2. Rated high seve
Allocation of Resources Without Limits or Throttling in GitHub repository inventree/inventree prior to 0.8.0. Rated medi
Remote code execution in InvenTree 1.2.3 through 1.2.6 allows staff users with settings access to execute arbitrary code
Cross-site Scripting (XSS) - Stored in GitHub repository inventree/inventree prior to 0.8.3. Rated medium severity (CVSS
Cross-site Scripting (XSS) - Stored in GitHub repository inventree/inventree prior to 0.7.2. Rated medium severity (CVSS
Authentication bypass in InvenTree open source inventory management system allows any authenticated user to generate API
Broken object-level authorization in InvenTree prior to 1.4.0 allows any authenticated low-privilege user - or any holde
InvenTree versions prior to 1.4.0 render report and label templates with WeasyPrint's default URL fetcher, so an authent
Authenticated attackers with low-level privileges can exfiltrate sensitive database information from InvenTree open sour
InvenTree prior to version 1.2.3 allows authenticated staff users to inject malicious Jinja2 template code into batch co
InvenTree is an Open Source Inventory Management System. Rated medium severity (CVSS 5.4), this vulnerability is remotel
EUVD-2026-84058
NVD
CVE.org
EPSS
GitHub
Exploit-DB