REPORT / 01

Analysis Report · Folder Analysis cache/tutor_3.9.3 → cache/tutor_3.9.4 — CVE-2025-13628

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-2025-13628 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
ecommerce/CouponController.php AI: 1 vulnerabilities 1 true positive CVE-2025-13628
--- cache/tutor_3.9.3/ecommerce/CouponController.php	2026-01-09 00:38:03.500150409 +0000+++ cache/tutor_3.9.4/ecommerce/CouponController.php	2026-01-09 00:39:33.457629644 +0000@@ -577,10 +577,7 @@ 	 */ 	public function bulk_action_handler() { 		tutor_utils()->checking_nonce();--		if ( ! current_user_can( 'manage_options' ) ) {-			tutor_utils()->error_message();-		}+		tutor_utils()->check_current_user_capability();  		// Get and sanitize input data. 		$request     = Input::sanitize_array( $_POST ); //phpcs:ignore --sanitized already@@ -630,9 +627,7 @@ 	public function coupon_permanent_delete() { 		tutor_utils()->checking_nonce(); -		if ( ! current_user_can( 'manage_options' ) ) {-			tutor_utils()->error_message();-		}+		tutor_utils()->check_current_user_capability();  		// Get and sanitize input data. 		$id = Input::post( 'id', 0, Input::TYPE_INT );
AI Analysis
I'll analyze this code diff for security fixes.

Vulnerability Existed: yes
TRUE POSITIVE
[Improper Authorization Check] - [CWE-862] - [ecommerce/CouponController.php] [Lines 580-583, 630-633]

Old Code:
```php
if ( ! current_user_can( 'manage_options' ) ) {
    tutor_utils()->error_message();
}
```

Fixed Code:
```php
tutor_utils()->check_current_user_capability();
```

Explanation:
The old code had a critical authorization bypass vulnerability. When the authorization check failed (user did not have 'manage_options' capability), the code only called `error_message()` but then **continued execution** of the subsequent function logic. This is a classic authorization bypass - the function would proceed to process the bulk action or permanent delete operation even though the user was not authorized.

The fix replaces this with a call to `tutor_utils()->check_current_user_capability()`, which appears to be a centralized authorization check that likely terminates execution with an error response when the capability check fails, preventing unauthorized operations from proceeding.

This vulnerability affected two methods:
1. `bulk_action_handler()` - could allow unauthorized bulk coupon operations
2. `coupon_permanent_delete()` - could allow unauthorized coupon deletion

The impact is **high severity** as it allows privilege escalation and unauthorized data modification/deletion operations.
CVE Analysis Results:
CVE-2025-13628: Yes
View CVE Description
The Tutor LMS – eLearning and online course solution plugin for WordPress is vulnerable to unauthorized modification and deletion of data due to a missing capability check on the 'bulk_action_handler' and 'coupon_permanent_delete' functions in all versions up to, and including, 3.9.3. This makes it possible for authenticated attackers, with subscriber level access and above, to delete, activate, deactivate, or trash arbitrary coupons.
Showing 1 to 1 of 1 results