CVE-2021-31875

9.8 CRITICAL

📋 TL;DR

CVE-2021-31875 is an off-by-one heap-based buffer overflow vulnerability in mjs_json_parse function of Cesanta MongooseOS mJS 1.26. A malicious JSON string can trigger this overflow, potentially allowing attackers to redirect control flow and execute arbitrary code. This affects systems using vulnerable versions of mJS for JSON parsing.

💻 Affected Systems

Products:
  • Cesanta MongooseOS mJS
Versions: Version 1.26 specifically
Operating Systems: All platforms running mJS
Default Config Vulnerable: ⚠️ Yes
Notes: Only affects systems that process JSON input using the vulnerable mjs_json_parse function.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Remote code execution leading to complete system compromise, data theft, or ransomware deployment.

🟠

Likely Case

Application crash (denial of service) due to memory corruption; reliable code execution is difficult per reporter's assessment.

🟢

If Mitigated

Application crash with no data loss if proper sandboxing and memory protections are in place.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: UNKNOWN
Unauthenticated Exploit: ⚠️ Yes
Complexity: HIGH

Original reporter disputes exploit reliability; exploitation requires precise memory manipulation.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Fixed in versions after 1.26

Vendor Advisory: https://github.com/cesanta/mjs/releases/tag/1.26

Restart Required: Yes

Instructions:

1. Update mJS to version after 1.26. 2. Recompile applications using mJS. 3. Restart affected services.

🔧 Temporary Workarounds

Input Validation

all

Implement strict JSON input validation and size limits before passing to mjs_json_parse.

Memory Protection

all

Enable ASLR and DEP/stack protection on systems to reduce exploit success probability.

🧯 If You Can't Patch

  • Isolate affected systems from untrusted networks
  • Implement network filtering to block malicious JSON payloads

🔍 How to Verify

Check if Vulnerable:

Check mJS version: if using exactly version 1.26, system is vulnerable.

Check Version:

Check application dependencies or build configuration for mjs version

Verify Fix Applied:

Verify mJS version is greater than 1.26 and applications have been recompiled.

📡 Detection & Monitoring

Log Indicators:

  • Application crashes with memory access violations
  • Unexpected process termination

Network Indicators:

  • Unusually large or malformed JSON payloads

SIEM Query:

Process termination events from mjs-based applications

🔗 References

📤 Share & Export