REPORT / 01
Analysis Report · Folder Analysis cache/wp-ultimate-csv-importer_7.35 → cache/wp-ultimate-csv-importer_7.36 — CVE-2025-14627
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-14627
NVD
AI-Generated Analysis
05 ·
Findings
filter · search · paginate
Showing 0 to 0 of 0 results
uploadModules/UrlUpload.php
AI: 1 vulnerabilities
1 true positive
CVE-2025-14627
--- cache/wp-ultimate-csv-importer_7.35/uploadModules/UrlUpload.php 2026-01-03 00:35:25.666624232 +0000+++ cache/wp-ultimate-csv-importer_7.36/uploadModules/UrlUpload.php 2026-01-03 00:36:09.813355538 +0000@@ -57,6 +57,20 @@ check_ajax_referer('smack-ultimate-csv-importer', 'securekey'); $file_url = esc_url_raw($_POST['url']); $file_url = wp_http_validate_url($file_url);+$host = wp_parse_url($file_url, PHP_URL_HOST);+$ip = gethostbyname($host);++if (!filter_var(+ $ip,+ FILTER_VALIDATE_IP,+ FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE+)) {+ $response['success'] = false;+ $response['message'] = 'Download Failed. Invalid or restricted URL destination.';+ echo wp_json_encode($response);+ die();+}+ $media_type = ''; if (isset($_POST['MediaType'])) { $media_type = sanitize_key($_POST['MediaType']);@@ -70,9 +84,33 @@ $response = []; global $wpdb; $file_table_name = $wpdb->prefix ."smackcsv_file_events"; - if(strstr($file_url, 'https://bit.ly/')){- $file_url = $this->unshorten_bitly_url($file_url);- }+ if (strstr($file_url, 'https://bit.ly/')) {++ $file_url = $this->unshorten_bitly_url($file_url);++ $file_url = wp_http_validate_url($file_url);+ if (!$file_url) {+ $response['success'] = false;+ $response['message'] = 'Download Failed. Resolved URL is not valid.';+ echo wp_json_encode($response);+ die();+ }++ $host = wp_parse_url($file_url, PHP_URL_HOST);+ $ip = gethostbyname($host);++ if (!filter_var(+ $ip,+ FILTER_VALIDATE_IP,+ FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE+ )) {+ $response['success'] = false;+ $response['message'] = 'Download Failed. Invalid or restricted URL destination.';+ echo wp_json_encode($response);+ die();+ }+}+ $pub = substr($file_url, strrpos($file_url, '/') + 1); /*Added support for google addon & dropbox*/
AI Analysis
Vulnerability Existed: yes
TRUE POSITIVE
[CWE Name] Server-Side Request Forgery (SSRF) - [CWE ID] CWE-918 - [File] uploadModules/UrlUpload.php [Lines 60-72, 87-111]
[Old Code]
```php
check_ajax_referer('smack-ultimate-csv-importer', 'securekey');
$file_url = esc_url_raw($_POST['url']);
$file_url = wp_http_validate_url($file_url);
$media_type = '';
...
if(strstr($file_url, 'https://bit.ly/')){
$file_url = $this->unshorten_bitly_url($file_url);
}
```
[Fixed Code]
```php
check_ajax_referer('smack-ultimate-csv-importer', 'securekey');
$file_url = esc_url_raw($_POST['url']);
$file_url = wp_http_validate_url($file_url);
$host = wp_parse_url($file_url, PHP_URL_HOST);
$ip = gethostbyname($host);
if (!filter_var(
$ip,
FILTER_VALIDATE_IP,
FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE
)) {
$response['success'] = false;
$response['message'] = 'Download Failed. Invalid or restricted URL destination.';
echo wp_json_encode($response);
die();
}
...
if (strstr($file_url, 'https://bit.ly/')) {
$file_url = $this->unshorten_bitly_url($file_url);
$file_url = wp_http_validate_url($file_url);
if (!$file_url) {
$response['success'] = false;
$response['message'] = 'Download Failed. Resolved URL is not valid.';
echo wp_json_encode($response);
die();
}
$host = wp_parse_url($file_url, PHP_URL_HOST);
$ip = gethostbyname($host);
if (!filter_var(
$ip,
FILTER_VALIDATE_IP,
FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE
)) {
$response['success'] = false;
$response['message'] = 'Download Failed. Invalid or restricted URL destination.';
echo wp_json_encode($response);
die();
}
}
```
Explanation:
The original code was vulnerable to SSRF attacks. While `wp_http_validate_url()` performs basic URL validation, it does not restrict access to private IP ranges or reserved addresses. An attacker could craft URLs pointing to internal infrastructure (e.g., `http://127.0.0.1`, `http://192.168.x.x`, `http://10.x.x.x`) or metadata services (e.g., AWS EC2 metadata endpoints at `http://169.254.169.254`). The fix adds IP validation using `filter_var()` with `FILTER_FLAG_NO_PRIV_RANGE` and `FILTER_FLAG_NO_RES_RANGE` flags to block requests to private and reserved IP address ranges. Additionally, after URL shortener resolution (bit.ly), the code now re-validates the resolved URL and re-checks the IP, preventing attackers from using URL shorteners to bypass the initial SSRF protection.
CVE Analysis Results:
CVE-2025-14627: Yes
View CVE Description
The WP Import – Ultimate CSV XML Importer for WordPress plugin for WordPress is vulnerable to Server-Side Request Forgery in all versions up to, and including, 7.35. This is due to inadequate validation of the resolved URL after following Bitly shortlink redirects in the `upload_function()` method. While the initial URL is validated using `wp_http_validate_url()`, when a Bitly shortlink is detected, the `unshorten_bitly_url()` function follows redirects to the final destination URL without re-validating it. This makes it possible for authenticated attackers with Contributor-level access or higher to make the server perform HTTP requests to arbitrary internal endpoints, including localhost, private IP ranges, and cloud metadata services (e.g., 169.254.169.254), potentially exposing sensitive internal data.
Showing 1 to 1 of 1 results