---
id: "CVE-2026-110291"
page: "https://infrastack.ai/live/CVE-2026-110291"
kind: "vulnerability"
aliases: ["CVE-2026-110291"]
title: "Graphina Elementor charts plugin: stored XSS through chart font settings"
severity: "high"
cvss: 7.2
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["elementor", "graphina", "package", "self-hosted", "wordpress"]
not_affected_if: ["plugin-removed", "plugin-version-above-3.1.13"]
published_at: "2026-11-06T09:16:59+00:00"
first_seen_at: "2026-11-06T09:40:32+00:00"
updated_at: "2026-11-06T09:40:43+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-110291", "first_seen_at": "2026-11-06T09:40:32+00:00"}]
exploit_sources: []
---

# Graphina Elementor charts plugin: stored XSS through chart font settings

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

The Graphina charts plugin for WordPress, up to and including 3.1.13, fails to sanitize chart settings such as the tree chart font family, so injected script is saved into pages. The script runs in the browser of any user who opens an affected page, which can lead to session or account takeover of visitors and administrators.

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

## How to check

- Check the installed Graphina plugin version in the WordPress admin Plugins screen or with `wp plugin get graphina-elementor-charts-and-graphs` (slug unknown from sources)
- Look for Graphina chart widgets in Elementor pages whose settings contain quote characters or event-handler attributes such as `onerror` or `onmouseover`

## Fix

- Plugin versions up to and including `3.1.13` are affected; the sources do not state a fixed version

## Timeline

- 2026-11-06T09:40:32+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-110291

## From the sources

The Graphina – Charts and Graphs For Elementor plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'iq_tree_chart_node_font_family (and any text control serialized into chart_data['settings'])' parameter in all versions up to, and including, 3.1.13 due to insufficient input sanitization and output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. Elementor's Utils::kses_post_deep() does not strip the attack payload on save because the payload contains no disallowed HTML tags — only a single quote and an event-handler fragment — allowing the malicious value to survive persistence.

---

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