Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as organization member
-
DeliveryInject HTML/CSS into invoice notes/terms/client fields
-
ExploitRender custom-template invoice PDF
-
ExecutionOverlay forged totals and payment details
-
ImpactDeliver via download, public link, or email
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding for downstream
|
| Exploitation Conditions | Requires an authenticated account with organization-member privileges that can create or edit invoices, AND the target must use a custom invoice template processed by render_invoice_template() (the HTML is injected via notes, terms, client name, or client address fields). Exploitation further depends on a victim viewing the rendered PDF - delivered by download, public link, or email (UI:P) - so it is a passive-interaction, fraud-oriented flaw rather than automatic server-side compromise. Limiting factors: valid credentials (PR:L) and the custom-template rendering path are prerequisites; default configurations not using custom templates or not exposing PDFs to external recipients substantially reduce realistic risk. |
| Impact | This is a genuinely medium/low-priority issue, not an inflated high-CVSS finding. The vendor-supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N) scores only 5.1, and the metrics are internally consistent with the description: network-reachable but requiring valid low-level authentication (PR:L - an organization member) and passive user interaction (UI:P - a victim must open/view the resulting PDF). Impact is limited to integrity (VI:L) with no confidentiality or availability effect, which matches CWE-116 output-encoding abuse rather than code execution or data theft. No EPSS score, CISA KEV listing, or public POC was provided in the input, so exploitation pressure appears low: this maps to 'no public exploit identified at time of analysis.' The realistic threat is social-engineering/fraud (forged invoice totals, payee and payment instructions) rather than server compromise. One signal to verify: the CPE identifies the product as micropyramid:bottlecrm, but all three references point to the Django-CRM/Django-CRM repository - confirm with the vendor whether BottleCRM and Django-CRM are the same codebase before acting on version ranges. |
| Exploit ScenarioDerived | A low-privileged but trusted member of an organization edits an invoice's notes, terms, client name or address fields, embedding HTML and CSS that the custom-template renderer in render_invoice_template() does not escape. When the generated PDF is downloaded, shared via a public link, or emailed to a client, the injected markup overlays the real totals, payee, and payment instructions, producing a fraudulent-but-authentic-looking invoice. No public exploit code was identified in the provided data; exploitation requires an authenticated account and a victim who opens the PDF (UI:P). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 14, 2026
HTML injection in BottleCRM 0.30 through 1.14.5 lets an authenticated organization member embed arbitrary markup and CSS into customized invoice PDFs by writing HTML into the notes, terms, client name, or client address fields that render_invoice_template() processes. The injected content can visually overlay totals, payee details, and payment instructions in the resulting PDF, which is then viewed by a victim through a direct download, a public link, or an email attachment (CVSS 4.0 base 5.1; assessed 3.1 vector AV:N/AC:L/PR:L/UI:R, integrity-only with low impact). Exploitation requires the deployment to actually use a custom invoice template and requires a victim to open the rendered document, making this a fraud-oriented, low-to-medium priority issue rather than automatic server-side compromise, and no public exploit code or confirmed active exploitation was identified at time of analysis.
RemediationAI
No vendor-released patch was identified at time of analysis, so the primary action is to treat the custom-template rendering path as untrusted: stop using custom invoice templates and fall back to the built-in default template, which does not expose the vulnerable interpolation, accepting the loss of branding and layout customization as the trade-off. Where custom templates are business-critical, apply strict output sanitization to the notes, terms, client name, and client address fields before they reach render_invoice_template() - HTML-escape them or run them through an allow-list sanitizer such as Bleach with a minimal tag set - and strip style attributes and positioning CSS, at the cost of losing any legitimate rich formatting in those fields. Additionally, restrict who holds organization-member privileges capable of creating or editing invoices (least privilege, since the assessed vector requires PR:L), and limit distribution of generated PDFs to verified internal or known recipients rather than open public links, which removes the UI:R delivery step and the realistic fraud path. Track the upstream issue at https://github.com/Django-CRM/Django-CRM/issues/825 and the advisory at https://www.vulncheck.com/advisories/bottlecrm-0.30-through-1.14.5-html-injection-via-custom-invoice-pdf-template for a fixed release, and re-validate these compensating controls once a patched version is published.
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 flaw is a CWE-116 improper output encoding / escaping issue in the Django-based BottleCRM (Django-CRM) invoicing subsystem. The vulnerable routine, render_invoice_template() in backend/invoices/pdf.py (referenced at lines 660-712 of the v1.14.5 source), assembles invoice data from user-controlled fields - notes, terms, client name, and client address - into HTML that is subsequently converted to PDF. Because those values are interpolated into the template without adequate context-aware escaping when a custom template is in use, an attacker with organization-member privileges who can create or edit invoices can supply tags, styles, and positioned elements that are preserved in the generated document. The impact class is therefore HTML/CSS injection into a generated document (defaced or spoofed invoice content) rather than script execution in a browser or command execution on the server; the CVSS 4.0 vector records no confidentiality or availability effect and only low integrity impact, and the CPE cpe:2.3:a:micropyramid:bottlecrm:*:*:*:*:*:*:*:* confirms the affected product family across the stated version span.
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:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
Network-reachable with valid low-privileged member access (PR:L); a victim must open the PDF (UI:R); integrity-only impact (I:L) from forged invoice content, no confidentiality or availability loss and no scope change.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
BottleCRM 0.30 through 1.14.5 contains an HTML injection vulnerability in render_invoice_template() that allows authenticated organization members to inject markup into custom-template invoice PDFs. Attackers can place HTML and CSS in notes, terms, client name or address fields to overlay totals, payee and payment instructions in PDFs served via download, public links and emails.
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
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
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
Server-side template injection in BottleCRM (Django-CRM) through 1.14.5 allows an authenticated member of an organizatio
EUVD-2026-101220
GHSA-mpf8-4qc8-mc43
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB