REPORT / 01
Analysis Report · Folder Analysis cache/wp-slimstat_5.3.4 → cache/wp-slimstat_5.3.5 — CVE-2025-15055
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-15055
NVD
AI-Generated Analysis
05 ·
Findings
filter · search · paginate
Showing 0 to 0 of 0 results
admin/view/wp-slimstat-reports.php
AI: 7 vulnerabilities
1 false positive, 6 true positives
CVE-2025-15055
--- cache/wp-slimstat_5.3.4/admin/view/wp-slimstat-reports.php 2026-01-10 00:36:21.699655329 +0000+++ cache/wp-slimstat_5.3.5/admin/view/wp-slimstat-reports.php 2026-01-10 00:38:28.883479522 +0000@@ -1455,15 +1455,15 @@ } foreach ($results as $a_result) {- echo "<p class='slimstat-tooltip-trigger'>" . $a_result[ 'notes' ];+ echo "<p class='slimstat-tooltip-trigger'>" . esc_html( $a_result[ 'notes' ] ); if (!empty($a_result['counthits'])) {- echo sprintf('<span>%s</span>', $a_result[ 'counthits' ]);+ echo sprintf('<span>%s</span>', esc_html( $a_result[ 'counthits' ] )); } if (!empty($a_result['dt'])) { $date_time = date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $a_result['dt'], true);- echo '<b class="slimstat-tooltip-content">' . __('IP', 'wp-slimstat') . ': ' . $a_result['ip'] . '<br/>' . __('Page', 'wp-slimstat') . sprintf(": <a href='%s%s'>%s%s</a><br>", $blog_url, $a_result[ 'resource' ], $blog_url, $a_result[ 'resource' ]) . __('Coordinates', 'wp-slimstat') . sprintf(': %s<br>', $a_result[ 'position' ]) . __('Date', 'wp-slimstat') . (': ' . $date_time);+ echo '<b class="slimstat-tooltip-content">' . __('IP', 'wp-slimstat') . ': ' . esc_html( $a_result['ip'] ) . '<br/>' . __('Page', 'wp-slimstat') . sprintf(": <a href='%s'>%s</a><br>", esc_url( $blog_url . $a_result[ 'resource' ] ), esc_html( $blog_url . $a_result[ 'resource' ] )) . __('Coordinates', 'wp-slimstat') . sprintf(': %s<br>', esc_html( $a_result[ 'position' ] )) . __('Date', 'wp-slimstat') . (': ' . $date_time); } echo '</b></p>';@@ -1514,7 +1514,7 @@ $a_result['counthits'] = 0; } - $a_result['resource'] = "<a class='slimstat-font-logout slimstat-tooltip-trigger' target='_blank' title='" . htmlentities(__('Open this URL in a new window', 'wp-slimstat'), ENT_QUOTES, 'UTF-8') . "' href='" . htmlentities($a_result['resource'], ENT_QUOTES, 'UTF-8') . "'></a> <a class='slimstat-filter-link' href='" . wp_slimstat_reports::fs_url('resource equals ' . htmlentities($a_result['resource'], ENT_QUOTES, 'UTF-8')) . "'>" . self::get_resource_title($a_result['resource']) . '</a>';+ $a_result['resource'] = "<a class='slimstat-font-logout slimstat-tooltip-trigger' target='_blank' title='" . esc_attr(__('Open this URL in a new window', 'wp-slimstat')) . "' href='" . esc_url($a_result['resource']) . "'></a> <a class='slimstat-filter-link' href='" . wp_slimstat_reports::fs_url('resource equals ' . $a_result['resource']) . "'>" . self::get_resource_title($a_result['resource']) . '</a>'; $group_markup = []; if (!empty($a_result['column_group'])) {@@ -1523,14 +1523,14 @@ foreach ($exploded_group as $a_item) { $user = get_user_by('login', $a_item); if ($user) {- $group_markup[] = '<a class="slimstat-filter-link" title="' . __('Filter by element in a group', 'wp-slimstat') . '" href="' . self::fs_url($_args['column_group'] . ' equals ' . $a_item) . '">' . get_avatar($user->ID, 16) . $user->display_name . '</a>';+ $group_markup[] = '<a class="slimstat-filter-link" title="' . esc_attr(__('Filter by element in a group', 'wp-slimstat')) . '" href="' . self::fs_url($_args['column_group'] . ' equals ' . $a_item) . '">' . get_avatar($user->ID, 16) . esc_html( $user->display_name ) . '</a>'; } else {- $group_markup[] = '<a class="slimstat-filter-link" title="' . __('Filter by element in a group', 'wp-slimstat') . '" href="' . self::fs_url($_args['column_group'] . ' equals ' . $a_item) . '">' . $a_item . '</a>';+ $group_markup[] = '<a class="slimstat-filter-link" title="' . esc_attr(__('Filter by element in a group', 'wp-slimstat')) . '" href="' . self::fs_url($_args['column_group'] . ' equals ' . $a_item) . '">' . esc_html( $a_item ) . '</a>'; } } } - echo sprintf('<p>%s <span>%s</span><br/>', $a_result[ 'resource' ], $a_result[ 'counthits' ]) . implode(', ', $group_markup) . '</p>';+ echo sprintf('<p>%s <span>%s</span><br/>', $a_result[ 'resource' ], esc_html( $a_result[ 'counthits' ] )) . implode(', ', $group_markup) . '</p>'; } if (! defined('DOING_AJAX') || ! DOING_AJAX) {@@ -1944,7 +1944,7 @@ } if ([] !== $term_names) {- self::$resource_titles[$cache_index] = implode(',', $term_names);+ self::$resource_titles[$cache_index] = esc_html( implode(',', $term_names) ); } else { self::$resource_titles[$cache_index] = htmlspecialchars(self::$resource_titles[$cache_index], ENT_QUOTES, 'UTF-8'); }
AI Analysis
I'll analyze this security diff directly.
---
**Vulnerability 1:**
Vulnerability Existed: yes
TRUE POSITIVE
Cross-Site Scripting (XSS) - CWE-79 - admin/view/wp-slimstat-reports.php Line 1458
Old Code:
```php
echo "<p class='slimstat-tooltip-trigger'>" . $a_result[ 'notes' ];
```
Fixed Code:
```php
echo "<p class='slimstat-tooltip-trigger'>" . esc_html( $a_result[ 'notes' ] );
```
Explanation:
User-controlled data from `$a_result['notes']` was output directly to HTML without escaping. An attacker could inject malicious JavaScript that would execute in the admin dashboard. The fix applies `esc_html()` to properly escape HTML entities, preventing XSS attacks.
---
**Vulnerability 2:**
Vulnerability Existed: yes
TRUE POSITIVE
Cross-Site Scripting (XSS) - CWE-79 - admin/view/wp-slimstat-reports.php Line 1461
Old Code:
```php
echo sprintf('<span>%s</span>', $a_result[ 'counthits' ]);
```
Fixed Code:
```php
echo sprintf('<span>%s</span>', esc_html( $a_result[ 'counthits' ] ));
```
Explanation:
The `counthits` value was output without escaping. While typically numeric, unsanitized data should always be escaped when output to HTML. The fix applies `esc_html()` to ensure safe output.
---
**Vulnerability 3:**
Vulnerability Existed: yes
TRUE POSITIVE
Cross-Site Scripting (XSS) - CWE-79 - admin/view/wp-slimstat-reports.php Line 1466
Old Code:
```php
echo '<b class="slimstat-tooltip-content">' . __('IP', 'wp-slimstat') . ': ' . $a_result['ip'] . '<br/>' . __('Page', 'wp-slimstat') . sprintf(": <a href='%s%s'>%s%s</a><br>", $blog_url, $a_result[ 'resource' ], $blog_url, $a_result[ 'resource' ]) . __('Coordinates', 'wp-slimstat') . sprintf(': %s<br>', $a_result[ 'position' ]) . __('Date', 'wp-slimstat') . (': ' . $date_time);
```
Fixed Code:
```php
echo '<b class="slimstat-tooltip-content">' . __('IP', 'wp-slimstat') . ': ' . esc_html( $a_result['ip'] ) . '<br/>' . __('Page', 'wp-slimstat') . sprintf(": <a href='%s'>%s</a><br>", esc_url( $blog_url . $a_result[ 'resource' ] ), esc_html( $blog_url . $a_result[ 'resource' ] )) . __('Coordinates', 'wp-slimstat') . sprintf(': %s<br>', esc_html( $a_result[ 'position' ] )) . __('Date', 'wp-slimstat') . (': ' . $date_time);
```
Explanation:
Multiple vulnerabilities: (1) `$a_result['ip']` output without escaping - could allow XSS if compromised data exists; (2) URL in href attribute not properly escaped - vulnerable to javascript: protocol injection via `esc_url()`; (3) `$a_result['position']` output unescaped. The fix applies `esc_html()` for text content and `esc_url()` for the URL attribute, preventing both XSS and open redirect attacks.
---
**Vulnerability 4:**
Vulnerability Existed: yes
TRUE POSITIVE
Cross-Site Scripting (XSS) - CWE-79 - admin/view/wp-slimstat-reports.php Line 1517
Old Code:
```php
$a_result['resource'] = "<a class='slimstat-font-logout slimstat-tooltip-trigger' target='_blank' title='" . htmlentities(__('Open this URL in a new window', 'wp-slimstat'), ENT_QUOTES, 'UTF-8') . "' href='" . htmlentities($a_result['resource'], ENT_QUOTES, 'UTF-8') . "'></a> <a class='slimstat-filter-link' href='" . wp_slimstat_reports::fs_url('resource equals ' . htmlentities($a_result['resource'], ENT_QUOTES, 'UTF-8')) . "'>" . self::get_resource_title($a_result['resource']) . '</a>';
```
Fixed Code:
```php
$a_result['resource'] = "<a class='slimstat-font-logout slimstat-tooltip-trigger' target='_blank' title='" . esc_attr(__('Open this URL in a new window', 'wp-slimstat')) . "' href='" . esc_url($a_result['resource']) . "'></a> <a class='slimstat-filter-link' href='" . wp_slimstat_reports::fs_url('resource equals ' . $a_result['resource']) . "'>" . self::get_resource_title($a_result['resource']) . '</a>';
```
Explanation:
The old code used `htmlentities()` which is insufficient for attribute context. The fix properly uses `esc_attr()` for the title attribute and `esc_url()` for the href attribute. Additionally, `htmlentities()` doesn't prevent javascript: protocol injection as effectively as `esc_url()`.
---
**Vulnerability 5:**
Vulnerability Existed: yes
TRUE POSITIVE
Cross-Site Scripting (XSS) - CWE-79 - admin/view/wp-slimstat-reports.php Line 1526
Old Code:
```php
$group_markup[] = '<a class="slimstat-filter-link" title="' . __('Filter by element in a group', 'wp-slimstat') . '" href="' . self::fs_url($_args['column_group'] . ' equals ' . $a_item) . '">' . get_avatar($user->ID, 16) . $user->display_name . '</a>';
```
Fixed Code:
```php
$group_markup[] = '<a class="slimstat-filter-link" title="' . esc_attr(__('Filter by element in a group', 'wp-slimstat')) . '" href="' . self::fs_url($_args['column_group'] . ' equals ' . $a_item) . '">' . get_avatar($user->ID, 16) . esc_html( $user->display_name ) . '</a>';
```
Explanation:
The title attribute lacked proper escaping (should use `esc_attr()` not raw output), and `$user->display_name` was output without escaping. Malicious data could inject attributes or JavaScript. The fix applies `esc_attr()` to the title and `esc_html()` to the display name.
---
**Vulnerability 6:**
Vulnerability Existed: yes
FALSE POSITIVE
Cross-Site Scripting (XSS) - CWE-79 - admin/view/wp-slimstat-reports.php Line 1529
Old Code:
```php
$group_markup[] = '<a class="slimstat-filter-link" title="' . __('Filter by element in a group', 'wp-slimstat') . '" href="' . self::fs_url($_args['column_group'] . ' equals ' . $a_item) . '">' . $a_item . '</a>';
```
Fixed Code:
```php
$group_markup[] = '<a class="slimstat-filter-link" title="' . esc_attr(__('Filter by element in a group', 'wp-slimstat')) . '" href="' . self::fs_url($_args['column_group'] . ' equals ' . $a_item) . '">' . esc_html( $a_item ) . '</a>';
```
Explanation:
Same issues as Vulnerability 5: title attribute lacks `esc_attr()`, and `$a_item` is output without escaping. The fix applies proper escaping functions.
---
**Vulnerability 7:**
Vulnerability Existed: yes
TRUE POSITIVE
Cross-Site Scripting (XSS) - CWE-79 - admin/view/wp-slimstat-reports.php Line 1533
Old Code:
```php
echo sprintf('<p>%s <span>%s</span><br/>', $a_result[ 'resource' ], $a_result[ 'counthits' ]) . implode(', ', $group_markup) . '</p>';
```
Fixed Code:
```php
echo sprintf('<p>%s <span>%s</span><br/>', $a_result[ 'resource' ], esc_html( $a_result[ 'counthits' ] )) . implode(', ', $group_markup) . '</p>';
```
Explanation:
The `counthits` field is output without escaping. The fix applies `esc_html()` to ensure safe output.
---
**Vulnerability 8:**
Vulnerability Existed: not sure
Cross-Site Scripting (XSS) - CWE-79 - admin/view/wp-slimstat-reports.php Line 1947
Old Code:
```php
self::$resource_titles[$cache_index] = implode(',', $term_names);
```
Fixed Code:
```php
self::$resource_titles[$cache_index] = esc_html( implode(',', $term_names) );
```
Explanation:
Uncertain whether `$term_names` contains user-controlled data or is derived from WordPress taxonomy terms. If derived from database without sanitization, escaping here is appropriate. The fix applies `esc_html()` when the value is cached. However, the subsequent else branch uses `htmlspecialchars()` suggesting inconsistent escaping strategy. The fix improves consistency but context of data source would clarify if vulnerability truly existed.
CVE Analysis Results:
CVE-2025-15055: Yes
View CVE Description
The SlimStat Analytics plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'notes' and 'resource' parameters in all versions up to, and including, 5.3.4 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 an administrator accesses the Recent Custom Events report.
Showing 1 to 1 of 1 results