Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as organization member
-
ExploitSubmit Django template tags in email body
-
ExecutionSSTI compiled in send_email Celery task
-
ImpactDisclose rendering context or block shared worker
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V1 - Encoding and Sanitization Template injection prevention
|
| Exploitation Conditions | Requires an authenticated account that is a member of the target organization (CVSS PR:L) with permission to call POST /api/accounts/<id>/create_mail/ and set the AccountEmail message_body; no victim user interaction is needed. Exploitation is further constrained by the Django template engine itself - because the body is compiled with django.template.Template() rather than Jinja2, the attacker is limited to disclosing the template rendering context and loaded Python modules or exhausting the Celery worker via nested loops, and cannot (per available data) achieve arbitrary code execution. Impact is tenant-scoped to the shared Celery worker, and no non-default configuration is indicated as necessary. |
| Impact | This is a genuine but moderate-priority issue, not a high-impact emergency. The reporter-supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:L) scores 5.3 (Medium) and is internally consistent with the description: a network-reachable but authenticated (PR:L) SSTI yielding low confidentiality (context/module disclosure) and low availability (worker blocking) impact, with no integrity impact. The low integrity rating and absence of a 'High' confidentiality rating are credible because the sink is django.template.Template(), whose sandboxed tag/filter language does not expose the __globals__/__builtins__ pivots that make Jinja2 SSTI trivially RCE - so this is information disclosure and denial-of-service, not remote code execution. No EPSS score, KEV listing, or POC was provided in the input; there is no public exploit identified at time of analysis and no evidence of active exploitation, so EPSS/KEV signals cannot corroborate or contradict the CVSS rating. The requirement for an authenticated organization member materially lowers real-world risk, making this primarily an insider/compromised-account or post-authentication concern rather than an internet-wide mass-exploitation threat. Data note: the CPE and advisory name the product 'micropyramid:bottlecrm', yet the code references point to the Django-CRM/Django-CRM repository (tasks.py at v1.14.5) - verify the exact affected product/repository with the vendor/VulnCheck advisory. |
| Exploit ScenarioDerived | An authenticated organization member (or an attacker using a compromised low-privilege account) submits an email whose message_body contains Django template syntax via POST /api/accounts/<id>/create_mail/. When the asynchronous send_email Celery task compiles the body with django.template.Template(), the injected tags render - leaking rendering-context variables and loaded Python module information, or, using nested {% for %} loops, tying up the shared Celery worker and degrading email delivery for the whole tenant. No public exploit code was identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 14, 2026
Server-side template injection in BottleCRM (Django-CRM) through 1.14.5 allows an authenticated member of an organization to have attacker-controlled text compiled as a Django template by the send_email Celery task, exposing the template rendering context and the Python modules loaded in the worker, or tying up the shared worker with nested loops. The flaw is reachable remotely without any victim interaction through POST /api/accounts/<id>/create_mail/ by supplying a crafted AccountEmail message_body, and it requires a valid account that belongs to the target organization (the CVSS vector specifies PR:L). Because the sink is django.template.Template() rather than Jinja2, the assessed impact is confined to tenant-scoped information disclosure and denial of service against the shared Celery worker, with no public exploit identified at time of analysis and no confirmed path to arbitrary code execution.
RemediationAI
No vendor-released patch identified at time of analysis; the upstream issue and the VulnCheck advisory linked in the references should be monitored for a fixed release, and upgrading past 1.14.5 is the primary action once a patched version is published. Until then, the most effective control is to stop compiling untrusted input as template source: change the send_email task to render AccountEmail.message_body as plain text or escape it before any template processing, so template tags in the body are never evaluated. Because that requires a code change, operators can layer compensating controls - restrict POST /api/accounts/<id>/create_mail/ to a minimal set of trusted roles or gate it behind an internal-only network path, accepting the trade-off that legitimate mail composition is also narrowed; disable Django's built-in {% debug %} tag so context and loaded-module disclosure is no longer reachable through rendered mail bodies, at the cost of losing that diagnostic output; and harden the Celery deployment with task_time_limit and task_soft_time_limit, low prefetch multipliers, and a dedicated queue or worker pool for send_email, so a nested-loop payload consumes bounded CPU and cannot starve other tenants' jobs - the trade-offs being additional latency, extra worker capacity, and the possibility of legitimate long-running email jobs being killed at the limit. Combine these with alerting on unusually long-running send_email tasks and on template-tag syntax appearing in stored message bodies, which provides detection coverage while a code-level fix is still being deployed.
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
The issue is classified as CWE-1336, improper neutralization of special elements used in a template engine, more commonly called server-side template injection (SSTI). In the affected code path (backend/accounts/tasks.py line 45 in v1.14.5), the send_email Celery task takes the user-supplied AccountEmail message_body and passes it directly to django.template.Template(), so the string is parsed and executed as template source rather than treated as inert message text. Django's template language is deliberately restricted compared with Jinja2: it does not expose arbitrary attribute traversal, method invocation, or object instantiation from template markup, which is why the practical consequences here are bounded rather than leading directly to remote code execution. What it does expose is the rendering context itself - the built-in {% debug %} tag renders the full context and the list of Python modules already imported into the worker process, which is exactly the information disclosure described - and unrestricted loop constructs, which can be nested to burn CPU indefinitely inside the task. Since the task runs on a shared Celery worker, the denial-of-service effect is not contained to the attacker's own tenant but competes for the same queue and process capacity as other tenants' email jobs. The CPE string cpe:2.3:a:micropyramid:bottlecrm:*:*:*:*:*:*:*:* indicates every released version through the fix threshold is potentially affected, and the PR:L component of the assessed vector reflects that an attacker must already hold an account and organization membership, so this is a post-authentication, tenant-scoped weakness rather than a pre-auth remote compromise.
Know when Bottlecrm 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:L/SC:N/SI:N/SA:N
Network-reachable API needing an authenticated org member (PR:L) and no interaction; Django-sandboxed SSTI yields only context/module disclosure (C:L) and worker DoS (A:L), no integrity impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
BottleCRM through 1.14.5 contains a server-side template injection vulnerability in the send_email Celery task, which compiles the user-supplied AccountEmail message_body with django.template.Template(). Authenticated organization members can submit template tags through POST /api/accounts/<id>/create_mail/ to disclose the rendering context and loaded Python modules, or block the shared Celery worker with nested loops.
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
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Case routing rule conditions in BottleCRM 0.43 through 1.14.5 accept unbounded regular expressions that are evaluated by
Uncontrolled memory allocation in BottleCRM 0.45 through 1.14.5 lets an authenticated user who also holds the applicatio
HTML injection in BottleCRM 0.30 through 1.14.5 lets an authenticated organization member embed arbitrary markup and CSS
EUVD-2026-101221
GHSA-j2m5-qh4m-hfjr
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB