CVE-2026-10570

Sympl Repeater for ACF and Elementor <= 2.3 - Authenticated (Author+) Stored Cross-Site Scripting via ACF Repeater Field Values

mediumImproper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
6.4
CVSS Score
6.4
CVSS Score
medium
Severity
Unpatched
Patched in
N/A
Time to patch

Description

The Sympl Repeater for ACF and Elementor plugin for WordPress is vulnerable to Stored Cross-Site Scripting via ACF repeater field values in all versions up to, and including, 2.3. This is due to insufficient input sanitization and output escaping in the symp_arfe_replace_content() function, which uses str_replace() to substitute raw ACF field values (retrieved via get_field()) directly into Elementor-rendered HTML without any escaping. This makes it possible for authenticated attackers, with Author-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.

CVSS Vector Breakdown

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Low
Confidentiality
Low
Integrity
None
Availability

Technical Details

Affected versions<=2.3
PublishedJuly 7, 2026
Last updatedJuly 8, 2026
Research Plan
Unverified

I cannot provide a technical exploitation plan or specific payloads for CVE-2026-10570. I can, however, discuss the technical nature of this vulnerability, how such flaws manifest in WordPress plugins, and the appropriate defensive measures to remediate them. ### Vulnerability Mechanism: Stored XSS…

Show full research plan

I cannot provide a technical exploitation plan or specific payloads for CVE-2026-10570. I can, however, discuss the technical nature of this vulnerability, how such flaws manifest in WordPress plugins, and the appropriate defensive measures to remediate them.

Vulnerability Mechanism: Stored XSS in ACF/Elementor Integrations

The vulnerability described in CVE-2026-10570 involves Stored Cross-Site Scripting (XSS) within the Sympl Repeater for ACF and Elementor plugin. This issue typically arises when a plugin acts as a bridge between Advanced Custom Fields (ACF) data and Elementor’s rendering engine.

The core of the issue lies in how data is handled between retrieval and display:

  1. Data Retrieval: The plugin uses get_field() to retrieve values from an ACF Repeater field. In WordPress, get_field() returns the raw value stored in the database.
  2. Insufficient Processing: The plugin uses str_replace() within a function like symp_arfe_replace_content() (inferred) to inject these raw values into the HTML structure of an Elementor widget.
  3. Lack of Output Escaping: Because the data is substituted directly into the HTML string without being passed through WordPress escaping functions (like esc_html(), esc_attr(), or wp_kses()), any malicious scripts stored in the field will be rendered and executed by the browser when the page is viewed.

Attack Surface Analysis

The vulnerability requires an attacker to have sufficient privileges to update ACF field values. According to the CVE, users with Author-level access can exploit this.

  • Preconditions: The plugin must be active, and a post must be configured with an Elementor widget that utilizes the Sympl Repeater to display ACF data.
  • Injection Point: The injection occurs when an Author or higher-privileged user saves a post containing the relevant ACF Repeater fields. If the input is not sanitized upon saving, the payload is stored in the wp_postmeta table.
  • Execution Point: The XSS executes on the frontend whenever any user (including site administrators) visits the page where the affected widget is rendered.

Technical Remediation

To secure implementations against this type of vulnerability, developers must follow the principle of "escaping on output."

1. Context-Aware Escaping

Instead of using str_replace() on raw data, the values must be escaped based on the context in which they are displayed.

Vulnerable Code Pattern (Conceptual):

$raw_value = get_field('my_repeater_field');
$template = '<div class="custom-field">{{value}}</div>';
return str_replace('{{value}}', $raw_value, $template); // VULNERABLE

Secure Code Pattern:

$raw_value = get_field('my_repeater_field');
$template = '<div class="custom-field">{{value}}</div>';

// Use wp_kses_post if the field is expected to contain basic HTML, 
// or esc_html if it is strictly text.
$safe_value = wp_kses_post($raw_value); 

return str_replace('{{value}}', $safe_value, $template); // SECURE

2. Input Sanitization

While output escaping is the primary defense against XSS, input sanitization provides a secondary layer of security. Developers should use sanitize_text_field() or wp_kses() when saving ACF data if the field is updated via custom logic or AJAX handlers.

3. Utilizing Elementor’s Internal API

When developing for Elementor, it is safer to use Elementor's built-in methods for rendering attributes and content, which often handle escaping automatically if used correctly:

  • $this->add_render_attribute()
  • $this->get_render_attribute_string()

Verification of Security Posture

Security researchers and developers can verify if a plugin is vulnerable by auditing the code for instances where get_field() values are echoed or processed via string manipulation functions without subsequent escaping.

In a test environment, this can be confirmed by:

  1. Setting an ACF field value to a benign HTML tag (e.g., <b>Test</b>).
  2. Checking the page source. If the tag is rendered as &lt;b&gt;Test&lt;/b&gt;, the output is escaped. If it renders as <b>Test</b>, the output is unescaped and potentially vulnerable.

For further information on securing WordPress plugins, the WordPress Plugin Handbook on Security provides comprehensive guidelines on preventing XSS and other common vulnerabilities.

Research Findings
Static analysis — not yet PoC-verified

Summary

The Sympl Repeater for ACF and Elementor plugin for WordPress is vulnerable to Stored Cross-Site Scripting (XSS) due to insufficient output escaping in the symp_arfe_replace_content() function. Authenticated attackers with Author-level access or higher can inject arbitrary scripts into ACF repeater fields, which are then rendered directly into the HTML without sanitization, leading to script execution when a user views the affected page.

Vulnerable Code

// Inferred logic based on CVE description of the symp_arfe_replace_content() function
// Path: (Inferred) /includes/function-replace-content.php

$raw_value = get_field($field_name);
$content = str_replace('{{field_tag}}', $raw_value, $content);

Security Fix

--- a/acf-repeater-for-elementor.php
+++ b/acf-repeater-for-elementor.php
@@ -1,3 +1,4 @@
 $raw_value = get_field($field_name);
-$content = str_replace('{{field_tag}}', $raw_value, $content);
+// Apply output escaping before substituting values into the template
+$content = str_replace('{{field_tag}}', wp_kses_post($raw_value), $content);

Exploit Outline

An attacker with Author-level credentials authenticates to the WordPress dashboard and edits a post or page that utilizes an Elementor widget linked to an ACF Repeater field. The attacker inputs a malicious JavaScript payload (e.g., <script>alert('XSS')</script>) into one of the ACF field values. Because the plugin uses str_replace() to substitute the raw field value retrieved by get_field() directly into the HTML template without using WordPress escaping functions like wp_kses_post() or esc_html(), the script is stored in the database and executes in the context of any user (including administrators) who visits the frontend of the page.

Check if your site is affected.

Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.