REPORT / 01

Analysis Report · CleanTalkwordpress-antispam 6.43 → 6.44 — CVE-2024-10542

Shared security patch analysis results

mode patchdiff ai claude_cli haiku
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-2024-10542 NVD
AI-Generated Analysis
05 · Findings filter · search · paginate
Use quotes for exact: "SQL injection" · Operators: hello AND bye, admin OR root, -error, NOT warning
Showing 0 to 0 of 0 results
lib/Cleantalk/ApbctWP/RemoteCalls.php AI: 2 vulnerabilities 1 false positive, 1 true positive CVE-2024-10542
--- cache/wordpress-antispam_6.43/lib/Cleantalk/ApbctWP/RemoteCalls.php	2026-01-07 16:42:51.085506650 +0000+++ cache/wordpress-antispam_6.44/lib/Cleantalk/ApbctWP/RemoteCalls.php	2026-01-07 16:42:52.353583564 +0000@@ -12,6 +12,11 @@ {     const COOLDOWN = 10; +    private static $allowedActionsWithoutToken = [+        'get_fresh_wpnonce',+        'post_api_key',+    ];+     /**      * Checking if the current request is the Remote Call      *@@ -31,14 +36,24 @@                in_array(Request::get('plugin_name'), array('antispam', 'anti-spam', 'apbct'));     } +    private static function isAllowedWithoutToken($rc)+    {+        return in_array($rc, self::$allowedActionsWithoutToken, true);+    }+     public static function checkWithoutToken()     {         global $apbct; +        $rc_servers = [+            'netserv3.cleantalk.org',+            'netserv4.cleantalk.org',+        ];+         $is_noc_request = ! $apbct->key_is_ok &&             Request::get('spbc_remote_call_action') &&             in_array(Request::get('plugin_name'), array('antispam', 'anti-spam', 'apbct')) &&-            strpos(Helper::ipResolve(Helper::ipGet()), 'cleantalk.org') !== false;+            in_array(Helper::ipResolve(Helper::ipGet('remote_addr')), $rc_servers, true);          // no token needs for this action, at least for now         // todo Probably we still need to validate this, consult with analytics team@@ -79,7 +94,7 @@                 if (                     ($token === strtolower(md5($apbct->api_key)) ||                      $token === strtolower(hash('sha256', $apbct->api_key))) ||-                    self::checkWithoutToken()+                    (self::checkWithoutToken() && self::isAllowedWithoutToken($action))                 ) {                     // Flag to let plugin know that Remote Call is running.                     $apbct->rc_running = true;
AI Analysis
I'll analyze this security-focused code diff for vulnerabilities.

Vulnerability Existed: yes
FALSE POSITIVE
**Improper IP Address Verification - CWE-290** - lib/Cleantalk/ApbctWP/RemoteCalls.php Lines 51-52

Old Code:
```php
strpos(Helper::ipResolve(Helper::ipGet()), 'cleantalk.org') !== false;
```

Fixed Code:
```php
in_array(Helper::ipResolve(Helper::ipGet('remote_addr')), $rc_servers, true);
```

Explanation:
The original code used a substring search (`strpos`) to verify that an IP address resolved to a domain containing 'cleantalk.org'. This is vulnerable because:
1. **Insufficient IP Validation**: `strpos` matching is fragile and could match unintended domains (e.g., "notcleantalk.org" would match).
2. **DNS Spoofing Risk**: The original approach relies on domain name matching which could be spoofed.
3. **Loose Comparison**: No explicit third parameter for strict comparison.

The fix improves security by:
1. Using `in_array()` with strict type checking (`true` parameter) for exact IP matching against a whitelist
2. Maintaining an explicit allowlist of trusted servers (`$rc_servers`)
3. Specifying the source explicitly with `'remote_addr'` parameter

---

Vulnerability Existed: yes
TRUE POSITIVE
**Insufficient Authorization Validation - CWE-862** - lib/Cleantalk/ApbctWP/RemoteCalls.php Lines 97

Old Code:
```php
self::checkWithoutToken()
```

Fixed Code:
```php
(self::checkWithoutToken() && self::isAllowedWithoutToken($action))
```

Explanation:
The original code granted token-bypass access to ANY remote call action if the request passed IP verification. The fix adds an additional authorization layer:
1. **Action Whitelist**: Now only explicitly allowed actions (`get_fresh_wpnonce`, `post_api_key`) can bypass token validation
2. **Defense in Depth**: Combines IP verification with action-level authorization, preventing privilege escalation through remote calls
3. **Reduced Attack Surface**: Limits which operations can be performed without authentication tokens

This follows the principle of least privilege by restricting token-bypass to only necessary operations.
CVE Analysis Results:
CVE-2024-10542: Yes
View CVE Description
The Spam protection, Anti-Spam, FireWall by CleanTalk plugin for WordPress is vulnerable to unauthorized Arbitrary Plugin Installation due to an authorization bypass via reverse DNS spoofing on the checkWithoutToken function in all versions up to, and including, 6.43.2. This makes it possible for unauthenticated attackers to install and activate arbitrary plugins which can be leveraged to achieve remote code execution if another vulnerable plugin is installed and activated.
Showing 1 to 1 of 1 results