CVE-2020-13665
📋 TL;DR
This vulnerability allows attackers to bypass access controls in Drupal Core's JSON:API module when configured in read/write mode. Attackers could potentially perform unauthorized operations like creating, updating, or deleting content. Only Drupal sites with JSON:API configured with read_only set to FALSE are affected.
💻 Affected Systems
- Drupal Core
📦 What is this software?
Drupal by Drupal
Drupal by Drupal
Drupal by Drupal
⚠️ Risk & Real-World Impact
Worst Case
Complete site compromise allowing attackers to modify any content, inject malicious code, or delete critical data through unauthorized API operations.
Likely Case
Unauthorized content manipulation, data corruption, or privilege escalation through the JSON:API endpoints.
If Mitigated
Limited impact with proper network segmentation and API monitoring, though access bypass could still occur.
🎯 Exploit Status
The vulnerability is in access control logic, making exploitation straightforward once identified. Public advisories provide technical details.
🛠️ Fix & Mitigation
✅ Official Fix
Patch Version: Drupal 8.8.8, 8.9.1, or 9.0.1
Vendor Advisory: https://www.drupal.org/sa-core-2020-006
Restart Required: No
Instructions:
1. Update Drupal Core to the patched version using Composer or Drupal's update mechanism. 2. Clear all caches. 3. Verify JSON:API functionality remains operational.
🔧 Temporary Workarounds
Disable JSON:API write mode
allSet JSON:API to read-only mode to prevent write operations while maintaining read functionality.
drush config-set jsonapi.settings read_only true
Disable JSON:API module
allCompletely disable the JSON:API module if not required.
drush pm-uninstall jsonapi
🧯 If You Can't Patch
- Implement strict network access controls to limit JSON:API endpoint exposure
- Enable detailed logging of all JSON:API requests and monitor for unauthorized operations
🔍 How to Verify
Check if Vulnerable:
Check Drupal version and JSON:API configuration: drush status and drush config-get jsonapi.settings read_only
Check Version:
drush status | grep 'Drupal version'
Verify Fix Applied:
Confirm Drupal version is 8.8.8, 8.9.1, or 9.0.1 or higher using drush status
📡 Detection & Monitoring
Log Indicators:
- Unusual POST/PATCH/DELETE requests to /jsonapi endpoints
- Failed access control checks in Drupal logs
- Unexpected content modifications via API
Network Indicators:
- Unusual traffic patterns to JSON:API endpoints
- API requests from unexpected sources or user agents
SIEM Query:
source="drupal.log" AND ("jsonapi" AND ("POST" OR "PATCH" OR "DELETE")) AND NOT user="authenticated"