---
id: "CVE-2026-111687"
kind: "vulnerability"
aliases: ["CVE-2026-111687"]
title: "WeRSS (we-mp-rss) through 1.5.3 contains a remote code execution vulnerability that allows unauthenticated attackers\u2026"
severity: "critical"
cvss: 9.8
epss: null
exploited: false
status: "open"
category: "other"
products: [{"name": "we-mp-rss", "fixed": [], "affected": "<= 1.5.3", "ecosystem": "github"}]
ecosystems: []
tags: ["fastapi", "internet-exposed", "other", "python", "rce", "self-hosted", "unauthenticated", "we-mp-rss"]
not_affected_if: ["no-public-rss-endpoint", "not-internet-exposed", "reverse-proxy-blocks-template-param"]
published_at: "2026-10-16T18:17:51+00:00"
first_seen_at: "2026-10-23T21:57:13+00:00"
updated_at: "2026-10-23T23:29:48+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-111687", "first_seen_at": "2026-10-23T21:57:13+00:00"}, {"source": "analyst", "url": null, "first_seen_at": "2026-10-23T23:29:48+00:00"}]
---

# WeRSS (we-mp-rss) through 1.5.3 contains a remote code execution vulnerability that allows unauthenticated attackers…

we-mp-rss (WeRSS) up to and including 1.5.3 has an unauthenticated RCE. GET /rss/{feed_id} has its auth dependency commented out, and it passes the 'template' query parameter to a custom template engine. With an unknown 'ext' value (e.g. ext=tpl), a {{=expr}} template is run through Python eval. The substring denylist does not block __class__/__bases__/__subclasses__, so an attacker can reach a process-spawning class and run OS commands as the service account. Output is reflected in the response. No fixed release exists as of 2026-10-23 (latest release is v1.5.3). The same release also has CVE-2026-110617, a missing-auth export download.

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

## Affected

- github:we-mp-rss affected <= 1.5.3 fixed ?

## How to check

Check the version: docker image tag rachelos/we-mp-rss or the release you deployed; 1.5.3 and earlier are vulnerable. Safe probe on your own instance: GET /rss/all?ext=tpl&template=m_{{=7*7}}_m. If the body contains m_49_m, you are exposed. Review your access logs for requests to /rss/ with template= or ext= values other than rss/xml/atom/md/txt/json/jmd, especially containing __subclasses__.

## Fix

No patched version published as of 2026-10-23 (latest is v1.5.3); watch rachelos/we-mp-rss releases. Until then: do not expose the service to the internet; block or strip the 'template' query parameter at a reverse proxy (or deny /rss/ requests containing 'template=' or '{{'); put the instance behind VPN or auth; run it as an unprivileged user in a container with no secrets. If it was exposed, assume the host is compromised and rotate any credentials it holds.

## Timeline

- 2026-10-23T21:57:13+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-111687
- 2026-10-23T23:29:48+00:00 analyst — Primary writeup (hackmd, static review of v1.5.3) and VulnCheck read; GitHub releases page shows v1.5.3 (13 Aug) as latest, no fixed release found. Route has auth commented out, so default config is reachable. Public PoC/repro on exploit-intel; no KEV, no in-the-wild report found. Social search not done.

## Documents

- [advisory] WeRSS unauthenticated SSTI to RCE via RSS template parameter (hieuPenguinnn) https://hackmd.io/@hieuPenguinnn/werss-rss-template-unauth-ssti-rce
- [advisory] VulnCheck: WeRSS through 1.5.3 RCE https://www.vulncheck.com/advisories/werss-we-mp-rss-through-1.5.3-rce-via-template-parameter-in-rss-endpoint
- [mentions] we-mp-rss releases (latest v1.5.3) https://github.com/rachelos/we-mp-rss/releases
- [poc] Docker Compose repro and PoC for CVE-2026-111687 https://exploit-intel.com/exploit/3653382032018099

## From the sources

WeRSS (we-mp-rss) through 1.5.3 contains a remote code execution vulnerability that allows unauthenticated attackers to run code via the template parameter of the public GET /rss/{feed_id} endpoint. Attackers can supply a non-built-in ext value and a {{=expression}} template whose object-subclass traversal bypasses the eval denylist to run OS commands as the service account.

---

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