← Back to CVE Explorer

CVE-2026-111109

Full vulnerability record from the local CVENow database.

Description

The Webmention plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the Open Graph og:title meta tag of a webmention source URL in versions up to, and including, 5.10.1. This is due to insufficient input sanitization: Meta::add_properties() maps og:title to the Item::name property, but Item has no concrete set_name() method, so Item::__call() stores the value raw while sibling set_content()/set_summary() paths route through webmention_sanitize_html(); Item::get_content() then falls back to the raw name when content and summary are empty, and Receiver::process() explicitly removes the core wp_filter_kses / wp_filter_post_kses hooks on pre_comment_content before calling wp_new_comment(), so the payload is persisted to comment_content as-is. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page, after an administrator approves the resulting pending webmention comment. Successful exploitation additionally requires an action by an administrator — the attacker cannot trigger the vulnerability on their own.

Severity
MEDIUM
CVSS score
6.1 (v3.1)
Vulnerability status
Received
Source identifier
Published
2026-10-31 07:16:34.827000
Last modified
2026-10-31 07:16:34.827000
View original CVE JSON
{
  "id": "CVE-2026-111109",
  "sourceIdentifier": "[email protected]",
  "published": "2026-10-31T07:16:34.827",
  "lastModified": "2026-10-31T07:16:34.827",
  "vulnStatus": "Received",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "The Webmention plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the Open Graph og:title meta tag of a webmention source URL in versions up to, and including, 5.10.1. This is due to insufficient input sanitization: Meta::add_properties() maps og:title to the Item::name property, but Item has no concrete set_name() method, so Item::__call() stores the value raw while sibling set_content()/set_summary() paths route through webmention_sanitize_html(); Item::get_content() then falls back to the raw name when content and summary are empty, and Receiver::process() explicitly removes the core wp_filter_kses / wp_filter_post_kses hooks on pre_comment_content before calling wp_new_comment(), so the payload is persisted to comment_content as-is. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page, after an administrator approves the resulting pending webmention comment. Successful exploitation additionally requires an action by an administrator — the attacker cannot trigger the vulnerability on their own."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "pfefferle",
          "product": "Webmention",
          "defaultStatus": "unaffected",
          "versions": [
            {
              "version": "0",
              "lessThanOrEqual": "5.10.1",
              "versionType": "semver",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "[email protected]",
        "type": "Primary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N",
          "baseScore": 6.1,
          "baseSeverity": "MEDIUM",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "NONE",
          "userInteraction": "REQUIRED",
          "scope": "CHANGED",
          "confidentialityImpact": "LOW",
          "integrityImpact": "LOW",
          "availabilityImpact": "NONE"
        },
        "exploitabilityScore": 2.8,
        "impactScore": 2.7
      }
    ]
  },
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Primary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-79"
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://github.com/pfefferle/wordpress-webmention/pull/698",
      "source": "[email protected]"
    },
    {
      "url": "https://plugins.trac.wordpress.org/browser/webmention/tags/5.10.1/includes/class-receiver.php#L267",
      "source": "[email protected]"
    },
    {
      "url": "https://plugins.trac.wordpress.org/browser/webmention/tags/5.10.1/includes/class-receiver.php#L453",
      "source": "[email protected]"
    },
    {
      "url": "https://plugins.trac.wordpress.org/browser/webmention/tags/5.10.1/includes/entity/class-item.php#L125",
      "source": "[email protected]"
    },
    {
      "url": "https://plugins.trac.wordpress.org/browser/webmention/tags/5.10.1/includes/entity/class-item.php#L297",
      "source": "[email protected]"
    },
    {
      "url": "https://plugins.trac.wordpress.org/browser/webmention/tags/5.10.1/includes/handler/class-meta.php#L78",
      "source": "[email protected]"
    },
    {
      "url": "https://plugins.trac.wordpress.org/browser/webmention/tags/5.10.2/includes/class-receiver.php",
      "source": "[email protected]"
    },
    {
      "url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/0b283d17-b89f-467d-8a79-cdf7b9bfdb65?source=cve",
      "source": "[email protected]"
    }
  ]
}