---
id: "CVE-2026-61707"
kind: "vulnerability"
aliases: ["CVE-2026-61707"]
title: "SOCFortress CoPilot: low-privilege users can run code via report templates"
severity: "critical"
cvss: 9.0
epss: null
exploited: false
status: "open"
category: "other"
products: []
ecosystems: []
tags: ["incident-response", "other", "python", "self-hosted", "socfortress-copilot"]
not_affected_if: ["no-customer-portal-users", "version-0.1.76-or-later"]
published_at: "2026-10-29T22:17:05+00:00"
first_seen_at: "2026-10-29T22:27:07+00:00"
updated_at: "2026-10-29T22:28:43+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-61707", "first_seen_at": "2026-10-29T22:27:07+00:00"}]
---

# SOCFortress CoPilot: low-privilege users can run code via report templates

SOCFortress CoPilot, a security operations dashboard, runs case-report templates through unsandboxed Jinja2 engines, and the upload route does not check template content. A customer-level portal user can upload a malicious template that executes Python on the backend when an admin or analyst generates a report.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the installed CoPilot version and confirm it is below `0.1.76`.
- Check whether customer_user accounts can reach `/case-report-template/upload` in `backend/app/incidents/routes/db_operations.py`.
- Look for uploaded case-report templates that were not created by an administrator.

## Fix

- SOCFortress CoPilot: upgrade to `0.1.76`.

## Timeline

- 2026-10-29T22:27:07+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-61707

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
