CVE-2025-64707

5.4 MEDIUM

📋 TL;DR

CVE-2025-64707 is an access control vulnerability in Frappe Learning where role revocation isn't immediately effective due to caching issues. This allows users to retain privileges they should have lost, potentially accessing unauthorized content or functions. It affects all Frappe Learning instances running versions 2.0.0 through 2.40.0.

💻 Affected Systems

Products:
  • Frappe Learning (LMS)
Versions: 2.0.0 through 2.40.0
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: All deployments with caching enabled are affected. The vulnerability exists in the core role management system.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

A malicious user whose admin privileges were revoked could continue accessing sensitive administrative functions, modify course content, access student data, or escalate privileges.

🟠

Likely Case

Users retain access to learning materials or functions they should have lost after role changes, leading to unauthorized content access.

🟢

If Mitigated

Minimal impact with proper monitoring and quick patch deployment, though temporary privilege retention may occur.

🌐 Internet-Facing: MEDIUM
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: UNKNOWN
Unauthenticated Exploit: ✅ No
Complexity: LOW

Exploitation requires a user account that has had roles revoked. The vulnerability is inherent to the caching mechanism and doesn't require special techniques.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.41.0

Vendor Advisory: https://github.com/frappe/lms/security/advisories/GHSA-w2gf-rchw-x6vm

Restart Required: Yes

Instructions:

1. Backup your Frappe Learning instance. 2. Update to version 2.41.0 using the Frappe bench update command: bench update --apps lms. 3. Restart the application server. 4. Clear any remaining cache manually if needed.

🔧 Temporary Workarounds

Manual Cache Clearing

all

Manually clear the application cache after every role change operation

bench clear-cache

Disable Caching

all

Temporarily disable role caching in development settings

Set 'cache_roles' to false in site_config.json

🧯 If You Can't Patch

  • Implement strict monitoring of user activity logs for anomalous access patterns
  • Establish manual verification procedures for role changes until patching is possible

🔍 How to Verify

Check if Vulnerable:

Check if your Frappe Learning version is between 2.0.0 and 2.40.0 inclusive

Check Version:

bench version

Verify Fix Applied:

After updating to 2.41.0, test role revocation by removing a role from a test user and immediately verifying they cannot access restricted functions

📡 Detection & Monitoring

Log Indicators:

  • Users accessing resources after role revocation
  • Multiple failed access attempts from recently demoted users
  • Cache-related errors in application logs

Network Indicators:

  • Unusual API calls from users with recently changed roles
  • Access patterns inconsistent with current role assignments

SIEM Query:

source="frappe-lms" AND (event="access_denied" OR event="role_change") | stats count by user, resource

🔗 References

📤 Share & Export