Skip to main content

django-shop CVE-2026-16212

| EUVDEUVD-2026-45423 LOW
Race Condition (CWE-362)
2026-07-19 VulDB GHSA-5982-pmj5-rx9v
1.3
CVSS 4.0 · Vendor: VulDB
View

Attack ChainAIDerived

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

  1. Access
    Register or obtain low-privilege customer account
  2. Delivery
    Script parallel concurrent purchase requests for same product
  3. Exploit
    Race condition window opens in inventory.py stock handler
  4. Execution
    Both requests pass availability check before decrement commits
  5. Impact
    Inventory count corrupted or driven negative

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Concurrency control, locking
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires an authenticated user session with at minimum a registered customer account (CVSS PR:L). The attacker must be able to submit concurrent HTTP purchase requests targeting the same inventory item - this requires coordinated timing, typically via scripted parallel requests, making reliable exploitation moderately difficult (CVSS AC:H). The race condition only manifests when the application is served with multi-threaded or multi-process workers (e.g., gunicorn with multiple workers, uWSGI in threaded mode); single-threaded development servers are not exploitable. No special administrative privileges, non-default configurations, or platform-specific conditions beyond a running django-shop instance serving concurrent requests are required. Exploitation is limited to integrity and availability impact on inventory data - no confidentiality breach is possible per the CVSS VC:N assessment.

Impact

The CVSS 4.0 vector (AV:N/AC:H/AT:N/PR:L/UI:N/VC:N/VI:L/VA:L) scores 2.3, reflecting high attack complexity - the race window must be precisely timed and reliably hitting it requires concurrent request coordination. PR:L confirms exploitation requires an authenticated session (at minimum a registered customer account). Impact is limited to low integrity (stock count manipulation, potential overselling) and low availability (inventory data inconsistency). No confidentiality impact is assessed. The vulnerability is not listed in CISA KEV, indicating no confirmed mass exploitation. A public proof-of-concept (GitHub issue #888) exists, elevating the threat above purely theoretical, but AC:H substantially limits practical exploitation at scale. The primary real-world risk is inventory fraud - malicious buyers exploiting the race to purchase out-of-stock items - rather than systemic compromise. The vendor's lack of response is a compounding factor with no timeline for a fix.

Exploit ScenarioDerived

An authenticated attacker (or coordinated pair of buyer accounts) submits rapid-fire concurrent purchase requests for a product with exactly one unit of remaining stock. The race window in shop/models/inventory.py allows both requests to pass the availability check before either commits the decrement, resulting in both orders succeeding and inventory dropping to -1. A publicly available proof-of-concept at the GitHub issue demonstrates this timing attack.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
No patch listed yet 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Jul 19, 2026

Race condition in awesto django-shop's Purchase Stock Handler allows a remotely authenticated attacker with low privileges to manipulate inventory data by triggering concurrent purchase requests. Affected versions span all releases up to and including 1.2.4. A publicly available proof-of-concept exists in the project's GitHub issue tracker, and the vendor has not responded to responsible disclosure - no patch has been released. EPSS data is absent, but the CVSS 4.0 score of 2.3 reflects the high attack complexity and limited impact scope.

RemediationAI

No vendor-released patch has been identified at time of analysis - the maintainer has not responded to the disclosure. As a primary compensating control, wrap stock decrement operations in database-level atomic transactions using Django's select_for_update() on the inventory queryset inside a transaction.atomic() block, which acquires a row-level lock and eliminates the TOCTOU window; this requires no framework changes and can be applied as a local patch. Alternatively, implement application-level distributed locking (e.g., Redis-based locks via django-redis) around the purchase stock handler to serialize concurrent requests for the same product. Restricting checkout concurrency via rate-limiting authenticated requests per user per product (e.g., using django-ratelimit on the purchase endpoint) reduces exploitation surface at the cost of degraded user experience under legitimate high load. Consider pinning to the most recently functional version and monitoring the upstream repository at https://github.com/awesto/django-shop/ for any future patch release.

Affected VersionsENISA

django-shop 1.2.4
django-shop 1.2.1
django-shop 1.2.3
django-shop 1.2.0
django-shop 1.2.2

Affected Packages

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

django-shop (CPE: cpe:2.3:a:awesto:django-shop:*:*:*:*:*:*:*:*) is a Python/Django-based e-commerce framework. The flaw resides in shop/models/inventory.py, specifically within the Purchase Stock Handler, which manages stock reservation and decrement during checkout. CWE-362 (Concurrent Execution Using Shared Resource with Improper Synchronization) identifies the root cause: the handler does not use atomic database operations or advisory locks to guard the read-modify-write sequence on inventory quantities, creating a classic time-of-check to time-of-use (TOCTOU) window. In a concurrent web environment served by multiple Django workers or threads, two simultaneous requests can both read the same stock quantity, both pass the availability check, and both decrement, resulting in oversold inventory or corrupted stock counts.

Know when Django Shop 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 (VulDB) PRIMARY 1.3 LOW
CVSS:4.0/AV:N/AC:H/AT:N/PR:L/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N/E:P
vuln.today AI 4.2 MEDIUM

Network vector with high complexity reflects the race timing requirement; PR:L for required authenticated session; no confidentiality impact per VC:N in source vector.

3.1 AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:L
4.0 AV:N/AC:H/AT:N/PR:L/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (VulDB).

CVSS VectorVendor: VulDB

Attack Vector
Network
Attack Complexity
High
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

Lifecycle Timeline

2
CVSS changed
Jul 19, 2026 - 05:22 NVD
2.3 (LOW) 1.3 (LOW)
CVE Published
Jul 19, 2026 - 03:45 cve.org
LOW 2.3

DescriptionCVE.org

A vulnerability was identified in awesto django-shop up to 1.2.4. Affected is an unknown function of the file shop/models/inventory.py of the component Purchase Stock Handler. The manipulation leads to race condition. The attack is possible to be carried out remotely. The attack is considered to have high complexity. The exploitability is told to be difficult. The exploit is publicly available and might be used. The project was informed of the problem early through an issue report but has not responded yet.

Threat Intelligence Overview

EPSS Score
0.2%
Top 92% exploitable
Prevalence
Low
niche Django e-commerce package, limited enterprise adoption
Exploit
POC
Public exploit code exists
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High

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 LOW
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.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
Poc
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Low

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

Race conditions occur when multiple concurrent requests exploit the brief time gap between checking a condition and acting upon it (TOCTOU - Time of Check, Time of Use).

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