---
id: "CVE-2026-111070"
kind: "vulnerability"
aliases: ["CVE-2026-111070"]
title: "Content Pilot WordPress plugin: stored XSS via remotely fetched article metadata"
severity: "medium"
cvss: 5.4
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["content-pilot", "package", "wordpress"]
not_affected_if: ["no-rss-campaigns", "plugin-not-installed"]
published_at: "2026-10-31T08:16:48+00:00"
first_seen_at: "2026-10-31T08:34:28+00:00"
updated_at: "2026-10-31T08:35:14+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-111070", "first_seen_at": "2026-10-31T08:34:28+00:00"}]
---

# Content Pilot WordPress plugin: stored XSS via remotely fetched article metadata

Content Pilot, a WordPress autoblogging plugin, saves the meta description of remotely fetched articles into posts without sanitizing it, so injected HTML is stored. An attacker who controls an RSS source an administrator has configured can get scripts to run in pages visitors open.

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

## How to check

- Check whether the Content Pilot plugin is installed and its version in the WordPress plugins list (`wp plugin get content-pilot` if WP-CLI is used)
- Check whether any Content Pilot RSS campaigns are configured and which feeds they consume

## Fix

- Content Pilot plugin: versions up to and including `2.2.4` are affected; the sources do not name a fixed version

## Timeline

- 2026-10-31T08:34:28+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-111070

## From the sources

The Content Pilot – Autoblogging & Affiliate Marketing Suite plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to, and including, 2.2.4. This is due to the plugin extracting the HTML meta description from each remotely-fetched article (WPCP_Readability::parse_meta()), piping that value through the article template substitution and html_entity_decode() in WPCP_Module::insert_post(), and then calling wp_insert_post() after switching the current user to the configured campaign author (an Administrator with the unfiltered_html capability by default) — so no wp_kses_post sanitization is applied to the attacker-controlled HTML before it is persisted as post_content and rendered on the front end. This makes it possible for unauthenticated attackers who control the content of any RSS source an administrator has configured a Content Pilot RSS campaign to consume to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.

---

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