---
id: "CVE-2026-129165"
page: "https://infrastack.ai/live/CVE-2026-129165"
kind: "vulnerability"
aliases: ["CVE-2026-129165"]
title: "Tactical RMM: report preview lets authenticated users read server files"
severity: "critical"
cvss: 9.4
epss: null
exploited: false
status: "open"
category: "other"
products: [{"name": "Tactical RMM", "fixed": [], "affected": ">= 0.17.0, <= 1.6.1", "ecosystem": "vendor"}]
ecosystems: []
tags: ["authenticated", "django", "nats", "other", "rmm", "self-hosted", "tactical-rmm"]
not_affected_if: ["version-outside-range"]
published_at: "2026-11-13T18:17:41+00:00"
first_seen_at: "2026-11-13T18:49:31+00:00"
updated_at: "2026-11-13T18:52:37+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-129165", "first_seen_at": "2026-11-13T18:49:31+00:00"}, {"source": "analyst", "url": "https://vul.yulun.ac.cn/20261028/tacticalrmm/", "first_seen_at": "2026-11-13T18:52:37+00:00", "cites": ["https://vul.yulun.ac.cn/20261028/tacticalrmm/", "https://github.com/amidaware/tacticalrmm/releases"]}]
exploit_sources: []
---

# Tactical RMM: report preview lets authenticated users read server files

Link for people: https://infrastack.ai/live/CVE-2026-129165 (this .md is for agents)

Tactical RMM versions 0.17.0 through 1.6.1 resolve file:// links in user-supplied report templates and embed the files in a returned PDF. A user with report management permission can read the Django SECRET_KEY, which is reused as the NATS password, and then send runscript commands to every managed agent.

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

## Affected

- vendor:Tactical RMM affected >= 0.17.0, <= 1.6.1 fixed no fixed version listed

## How to check

- Check the server's Tactical RMM version: 0.17.0 through 1.6.1 is affected.
- List which users or roles hold report management/generate permission (Settings > Permissions); treat each as able to read server files.
- Look for POST /reporting/templates/preview/ requests in API logs with file:// in template_md.
- If exposure is suspected, rotate the Django SECRET_KEY (which also changes the NATS password) and review runscript activity in the audit log.

## Timeline

- 2026-11-13T18:49:31+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-129165
- 2026-11-13T18:52:37+00:00 analyst https://vul.yulun.ac.cn/20261028/tacticalrmm/ — Researcher report (Wu Yulun) and VulnCheck advisory confirm the range 0.17.0-1.6.1 and the mechanism. Latest GitHub release is v1.6.1 (affected), no GitHub security advisory or fixed version found, so fix is none/unknown. No vendor statement, so nothing verified. No exploitation or PoC beyond the researcher's writeup. Recheck for a release after 1.6.1.

## Documents

- [advisory] Third-party advisory: www.vulncheck.com https://www.vulncheck.com/advisories/tactical-rmm-0.17.0-through-1.6.1-arbitrary-file-read-via-report-preview
- [describes] TacticalRMM Vulnerability Report (Wu Yulun) https://vul.yulun.ac.cn/20261028/tacticalrmm/
- [mentions] tacticalrmm releases (latest v1.6.1) https://github.com/amidaware/tacticalrmm/releases

## From the sources

Tactical RMM 0.17.0 through 1.6.1 contains an arbitrary file read in the /reporting/templates/preview/ endpoint because WeasyPrint resolves file:// links in user-supplied template_md and embeds the files in the returned PDF. Users with report management permission can read the Django SECRET_KEY, reused as the NATS password, and publish runscript commands to every managed agent.

---

_Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai_
