Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privilege customer_user
-
DeliveryDelete and replace default report template with Jinja2 payload
-
ExploitCreate a case to be reported on
-
ExecutionAdmin/analyst generates DOCX/PDF report
-
PersistNon-sandboxed Jinja2 executes payload as root
-
ImpactCross-tenant data and connector credentials exposed
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Code injection prevention, sandbox exec
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires (1) a valid customer_user portal account - the lowest-privilege role - which can reach the upload/list/download/delete siblings of /case-report-template because they are all scoped to admin/analyst/customer_user, and the global template store has no customer_code scoping; and (2) a privileged admin or analyst to subsequently call POST /api/incidents/report/generate-report-docx or /generate-report-pdf against a case using the poisoned template (this satisfies UI:R and makes it a stored second-order injection, not direct self-service RCE). Limiting factors: the attacker cannot detonate the payload alone - a privileged user's routine report generation is the trigger - and valid low-privilege credentials are needed. Aggravating factors in the reported deployment: no content validation (filename-only MIME check), no Jinja2 sandbox or autoescape on either render path, the backend process runs as root, and wkhtmltopdf runs without --disable-local-file-access, adding local-file read and SSRF. |
| Impact | This is a genuine high-priority issue, not an inflated CVSS score. The signals converge: the vuln.today decision label is act_now, the vendor has shipped a fix (0.1.76), and the GHSA advisory contains a proof-of-concept the reporter states was confirmed live against the official ghcr.io/socfortress/copilot-backend:latest image, achieving uid=0(root) command execution. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H = 9.0) is internally consistent with the mechanism: network-reachable upload endpoint, low complexity, PR:L because the attacker needs only the lowest-privilege customer_user portal role, UI:R because a privileged admin/analyst must generate the report to detonate the stored payload, and S:C because execution escapes the application's authorization scope to run as root across all tenants. No EPSS score and no CISA KEV status are provided in the input, so widespread-exploitation probability cannot be quantified and active in-the-wild exploitation is NOT confirmed. The tension to flag: this is a stored/second-order injection requiring a privileged user's routine action plus valid low-privilege credentials, so despite the critical impact it is not a point-and-click remote-unauthenticated RCE - realistic risk is highest in multi-tenant deployments where untrusted customer_user accounts coexist with admins who generate reports. |
| Exploit ScenarioDerived | A customer_user authorized only for one tenant deletes the organization's default case-report template and re-uploads a malicious .html or .docx under the same name containing a Jinja2 gadget (e.g. {{ lipsum.__globals__["os"].popen(...) }}); the filename-only MIME check passes. When an admin or analyst later runs the routine POST /generate-report-pdf or /generate-report-docx, the non-sandboxed Jinja2 engine evaluates the payload as Python on the backend. A working PoC confirmed live in the GHSA advisory demonstrates arbitrary command execution as root, and the wkhtmltopdf path additionally allows local-file reads and SSRF to internal services. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 29, 2026
Stored server-side template injection in SOCFortress CoPilot before 0.1.76 allows a customer_user - the lowest-privilege portal role - to upload a malicious DOCX or HTML case-report template into a global, unscoped store and replace a legitimate default template under the same name. When an admin or analyst later generates a report through /api/incidents/report/generate-report-docx or /generate-report-pdf, the non-sandboxed Jinja2 engine evaluates the attacker's expressions as Python, yielding remote code execution that the advisory confirms as root in the reported deployment. The advisory includes a confirmed live proof-of-concept against the published backend image, the issue is prioritized as act_now, and no CISA KEV entry is provided.
RemediationAI
Vendor-released patch: upgrade to SOCFortress CoPilot 0.1.76. The upstream fix in PR 936 and commit a5ed4a250094d1b6d15ba0ec088dbd773ab1b4e0 restricts the case-report-template upload, list, download, and delete routes to admin and analyst roles, validates file extension and content rather than only a filename-derived MIME type, renders DOCX through SandboxedEnvironment(autoescape=True), renders HTML through SandboxedEnvironment with select_autoescape, and runs wkhtmltopdf with disable-local-file-access. See the vendor advisory at https://github.com/socfortress/CoPilot/security/advisories/GHSA-7q83-228r-wfh5. If upgrading immediately is not possible, remove customer_user access to the /api/incidents/db_operations/case-report-template upload, list, download, and delete routes; the trade-off is that customer portal users lose self-service template management. Because RBAC changes alone do not neutralize templates already placed in the global store, also apply or backport the sandbox, autoescape, and wkhtmltopdf --disable-local-file-access changes before relying on access restrictions.
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 root cause is CWE-94 code injection realized as stored, second-order server-side template injection in Jinja2. The upload route at backend/app/incidents/routes/db_operations.py validates only a MIME type guessed from the filename, so a plain .html or .docx file can carry attacker-controlled Jinja expressions. Templates are held in one global store without customer_code scoping, and the list, download, and delete siblings are reachable by customer_user, allowing replacement of a legitimate default template under the same name. Both render paths are unsafe: render_document_with_context uses DocxTemplate without a sandbox, and render_html_template uses a standard Jinja2 Environment without autoescaping. A routine privileged report generation therefore evaluates the template body as Python. The assessed vector is CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H, confirming that a low-privileged authenticated account supplies the payload while a privileged user's report generation provides the required user interaction. In the reported deployment the backend runs as root, and the HTML/PDF path also runs wkhtmltopdf without --disable-local-file-access, adding local-file read and SSRF from inside the renderer.
Know when Copilot 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:R/S:C/C:H/I:H/A:H
PR:L for the customer_user role and UI:R because a privileged user must generate the report; S:C and C/I/A:H because sandbox-less Jinja2 yields root RCE escaping tenant scope.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
SOCFortress CoPilot focuses on providing a single pane of glass for all your security operations needs. Prior to 0.1.76, in the reported deployment, case-report templates uploaded by customer_user, the lowest-privilege portal role, are later executed by non-sandboxed Jinja2 engines when an admin or analyst generates a report. The /case-report-template/upload route in backend/app/incidents/routes/db_operations.py validates only the filename-derived MIME type, not the template content. Templates share a global store without customer_code scoping, and customer_user can also list, download and delete them, allowing an attacker to replace a legitimate default template under the same name. In backend/app/incidents/services/reports.py, render_document_with_context uses DocxTemplate without a sandbox; in backend/app/incidents/services/reports_pdf.py, render_html_template uses a non-sandboxed Environment without autoescaping. Normal privileged requests to POST /api/incidents/report/generate-report-docx or /generate-report-pdf therefore evaluate attacker-controlled Jinja expressions as Python on the backend. The reported deployment executes commands as root, exposing all tenants' incident and SIEM data and stored connector credentials. The HTML/PDF wkhtmltopdf renderer additionally permits local-file reads and requests to internal services. This issue is fixed in version 0.1.76.
Articles & Coverage 1
Technical POC Analysis
Stored server-side template injection leading to code injection, CWE-94 (with template-engine CWE-1336 also applicable).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A critical stored template injection vulnerability in SOCFortress CoPilot (CVE-2026-61707) allows the lowest-privileged user to upload a malicious template that, when used by an administrator to generate a report, executes arbitrary code as root. This exposes the entire CoPilot backend and potentially connected incident systems to full compromise. Leadership should prioritize immediate remediation because the flaw is trivial to exploit with a live proof-of-concept, and any customer-facing portal account could be a doorway to total system takeover.
Apply vendor patch.
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.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Authentication bypass in SOCFortress CoPilot versions prior to 0.1.57 allows remote unauthenticated attackers to forge a
Arbitrary host file write as root in SOCFortress CoPilot prior to 0.1.77: the ScoutSuite GCP report upload endpoint acce
Stored cross-site scripting in SOCFortress CoPilot lets any authenticated portal user, including the lowest-privilege cu
Unauthenticated active-response invocation and alert injection affect SOCFortress CoPilot deployments prior to 0.1.76 th
Unauthenticated disclosure of cloud credentials and audit data in SOCFortress CoPilot stems from the `/scoutsuite-report
Cross-tenant object-store writes in SOCFortress CoPilot before 0.1.76 let any authenticated customer_user (customer-port
Unauthenticated attackers can install detection-suppression rules in SOCFortress CoPilot deployments before 0.1.77 becau
Command injection in Microsoft Copilot allows an attacker to disclose confidential information when a victim invokes Cop
EUVD-2026-113399
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB