REPORT / 01
Analysis Report · Folder Analysis cache/ultimate-member_2.11.0 → cache/ultimate-member_2.11.1 — CVE-2025-13220
Shared security patch analysis results
02 ·
Lifecycle actions
cancel · resume · skip · regenerate
03 ·
Share this analysis
copy link · embed report
03 ·
CVE Security Analysis & Writeups
ai-generated · per cve
Comprehensive security analysis generated by AI for each confirmed CVE match. Click on a CVE to view the detailed writeup including vulnerability background, technical details, patch analysis, and PoC guide.
CVE-2025-13220
NVD
AI-Generated Analysis
05 ·
Findings
filter · search · paginate
Showing 0 to 0 of 0 results
includes/core/um-filters-fields.php
AI: 3 vulnerabilities
3 true positives
CVE-2025-13220
--- cache/ultimate-member_2.11.0/includes/core/um-filters-fields.php 2025-12-21 09:36:27.838831857 +0000+++ cache/ultimate-member_2.11.1/includes/core/um-filters-fields.php 2025-12-21 09:36:33.971212975 +0000@@ -76,15 +76,15 @@ } $value = ( strstr( $value, 'http' ) || strstr( $value, '://' ) ) ? um_youtube_id_from_url( $value ) : $value; if ( false !== $value ) {+ $value = 'https://www.youtube.com/embed/' . $value; $value = '<div class="um-youtube">'- . '<iframe width="600" height="450" src="https://www.youtube.com/embed/' . $value . '" frameborder="0" allowfullscreen></iframe>'+ . '<iframe width="600" height="450" src="' . esc_url( $value ) . '" frameborder="0" allowfullscreen></iframe>' . '</div>'; } return $value; } add_filter( 'um_profile_field_filter_hook__youtube_video', 'um_profile_field_filter_hook__youtube_video', 99, 2 ); - /** * Outputs a spotify iframe *@@ -127,8 +127,9 @@ } $value = ! is_numeric( $value ) ? (int) substr( parse_url( $value, PHP_URL_PATH ), 1 ) : $value;+ $value = 'https://player.vimeo.com/video/' . $value; $value = '<div class="um-vimeo">- <iframe src="https://player.vimeo.com/video/' . $value . '" width="600" height="450" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>+ <iframe src="' . esc_url( $value ) . '" width="600" height="450" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> </div>'; return $value; }@@ -199,14 +200,14 @@ if ( ! $value ) { return ''; }+ $value = 'https://maps.google.it/maps?q=' . urlencode( $value ) . '&output=embed'; $value = '<div class="um-googlemap">- <iframe width="600" height="450" frameborder="0" style="border:0" src="https://maps.google.it/maps?q=' . urlencode( $value ) . '&output=embed"></iframe>+ <iframe width="600" height="450" frameborder="0" style="border:0" src="' . esc_url( $value ) . '"></iframe> </div>'; return $value; } add_filter( 'um_profile_field_filter_hook__googlemap', 'um_profile_field_filter_hook__googlemap', 99, 2 ); - /** * User's registration date *
AI Analysis
I'll analyze the provided code diff for security fixes.
---
**Vulnerability 1:**
Vulnerability Existed: yes
TRUE POSITIVE
Cross-Site Scripting (XSS) - CWE-79 - includes/core/um-filters-fields.php lines 79-81
**Old Code:**
```php
$value = '<div class="um-youtube">'
. '<iframe width="600" height="450" src="https://www.youtube.com/embed/' . $value . '" frameborder="0" allowfullscreen></iframe>'
. '</div>';
```
**Fixed Code:**
```php
$value = 'https://www.youtube.com/embed/' . $value;
$value = '<div class="um-youtube">'
. '<iframe width="600" height="450" src="' . esc_url( $value ) . '" frameborder="0" allowfullscreen></iframe>'
. '</div>';
```
**Explanation:**
The original code directly concatenated the `$value` variable into the `src` attribute without proper escaping. Although `um_youtube_id_from_url()` likely extracts a clean video ID, the lack of output escaping creates an XSS vulnerability if the function fails to sanitize properly or if the video ID could be manipulated. The fix uses `esc_url()` to escape the URL before output, preventing malicious JavaScript from being injected into the iframe src attribute.
---
**Vulnerability 2:**
Vulnerability Existed: yes
TRUE POSITIVE
Cross-Site Scripting (XSS) - CWE-79 - includes/core/um-filters-fields.php lines 130-131
**Old Code:**
```php
$value = '<div class="um-vimeo">
<iframe src="https://player.vimeo.com/video/' . $value . '" width="600" height="450" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
</div>';
```
**Fixed Code:**
```php
$value = 'https://player.vimeo.com/video/' . $value;
$value = '<div class="um-vimeo">
<iframe src="' . esc_url( $value ) . '" width="600" height="450" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
</div>';
```
**Explanation:**
Similar to the YouTube vulnerability, the Vimeo iframe src attribute was not properly escaped. Although the value should be numeric (from `parse_url`), the direct concatenation without escaping violates secure output practices. The fix applies `esc_url()` to properly escape the URL, preventing XSS attacks through the iframe src attribute.
---
**Vulnerability 3:**
Vulnerability Existed: yes
TRUE POSITIVE
Cross-Site Scripting (XSS) - CWE-79 - includes/core/um-filters-fields.php lines 203-204
**Old Code:**
```php
$value = '<div class="um-googlemap">
<iframe width="600" height="450" frameborder="0" style="border:0" src="https://maps.google.it/maps?q=' . urlencode( $value ) . '&output=embed"></iframe>
</div>';
```
**Fixed Code:**
```php
$value = 'https://maps.google.it/maps?q=' . urlencode( $value ) . '&output=embed';
$value = '<div class="um-googlemap">
<iframe width="600" height="450" frameborder="0" style="border:0" src="' . esc_url( $value ) . '"></iframe>
</div>';
```
**Explanation:**
While `urlencode()` is used to encode the value, it does not escape HTML entities. The URL was directly concatenated into the src attribute without proper output escaping. The fix constructs the complete URL first, then applies `esc_url()` for proper escaping before output, preventing XSS through the iframe src attribute.
CVE Analysis Results:
CVE-2025-13220: Yes
View CVE Description
The Ultimate Member – User Profile, Registration, Login, Member Directory, Content Restriction & Membership Plugin plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the plugin's shortcode attributes in all versions up to, and including, 2.11.0 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with Contributor-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.
Showing 1 to 1 of 1 results