---
id: CVE-2026-93747
title: >-
  The wpForo Forum plugin for WordPress is vulnerable to Stored Cross-Site
  Scripting via the 'telegram' profile field in versions up to, and including,
  3.1.6
summary: >-
  The wpForo Forum plugin for WordPress is vulnerable to Stored Cross-Site
  Scripting via the 'telegram' profile field in versions up to, and including,
  3.1.6. This is due to insufficient input sanitization and output escaping in
  the profil…
severity: medium
cvss: 6.4
cvssVector: 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N'
cwe:
  - CWE-79
vendor: tomdever
product: wpForo Forum
affected:
  - wpforo_forum <= 3.1.6
published: '2026-09-25'
updated: '2026-09-25'
sourceUpdated: '2026-09-25T14:17:23.930'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2026-93747'
references:
  - url: >-
      https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.5/classes/Actions.php#L711
    label: security@wordfence.com
  - url: >-
      https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.5/classes/Forms.php#L1074
    label: security@wordfence.com
  - url: >-
      https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.5/classes/Forms.php#L324
    label: security@wordfence.com
  - url: >-
      https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.5/classes/Members.php#L1157
    label: security@wordfence.com
  - url: >-
      https://plugins.trac.wordpress.org/browser/wpforo/tags/3.1.5/classes/Members.php#L906
    label: security@wordfence.com
  - url: >-
      https://plugins.trac.wordpress.org/changeset?reponame=&old=3706608%40wpforo&new=3706608%40wpforo
    label: security@wordfence.com
  - url: >-
      https://www.wordfence.com/threat-intel/vulnerabilities/id/15dc1661-793a-43dd-8a12-8f51da6cb304?source=cve
    label: security@wordfence.com
tags:
  - nvd
  - cve.org
epss: 0.00201
epssPercentile: 0.08858
ingestedAt: '2026-09-25T08:01:56.749Z'
---

## Overview

The wpForo Forum plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'telegram' profile field in versions up to, and including, 3.1.6. This is due to insufficient input sanitization and output escaping in the profile_update action — the raw $_POST['data'] array is copied into a $custom_fields variable before validate() and sanitize() run, both of which operate only on a parallel $user reference, leaving $custom_fields unsanitized when it is persisted via update_custom_fields(); on render, wpforo_decode() reverses the entity encoding and the value is echoed without escaping in field_wrap_profile(). This makes it possible for authenticated attackers, with subscriber-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
