CVE-2021-47839

7.2 HIGH

📋 TL;DR

CVE-2021-47839 is a persistent cross-site scripting (XSS) vulnerability in Marky 0.0.1 that allows attackers to inject malicious JavaScript into markdown files. When users open these crafted files, the embedded scripts execute in their browser context, potentially leading to session hijacking, data theft, or further attacks. Anyone using Marky 0.0.1 to process untrusted markdown files is affected.

💻 Affected Systems

Products:
  • Marky
Versions: 0.0.1
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Only affects Marky 0.0.1; any system processing markdown files with this version is vulnerable regardless of OS.

⚠️ Manual Verification Required

This CVE does not have specific version information in our database, so automatic vulnerability detection cannot determine if your system is affected.

Why? The CVE database entry doesn't specify which versions are vulnerable (no version ranges provided by the vendor/NVD).

🔒 Custom verification scripts are available for registered users. Sign up free to download automated test scripts.

Recommended Actions:
  1. Review the CVE details at NVD
  2. Check vendor security advisories for your specific version
  3. Test if the vulnerability is exploitable in your environment
  4. Consider updating to the latest version as a precaution

⚠️ Risk & Real-World Impact

🔴

Worst Case

Attackers achieve remote code execution on the server or client systems, steal sensitive data, hijack user sessions, or deploy ransomware through the compromised application.

🟠

Likely Case

Attackers steal session cookies, redirect users to malicious sites, deface content, or perform actions on behalf of authenticated users.

🟢

If Mitigated

Limited impact with proper input validation, output encoding, and Content Security Policy (CSP) headers preventing script execution.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

Exploit requires uploading a crafted markdown file; public proof-of-concept exists in Exploit-DB.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: N/A

Vendor Advisory: https://github.com/vesparny/marky

Restart Required: No

Instructions:

No official patch exists; upgrade to a different markdown processor or implement workarounds.

🔧 Temporary Workarounds

Input Validation and Sanitization

all

Implement server-side validation to strip or escape JavaScript from markdown files before processing.

# Use a library like DOMPurify or sanitize-html in Node.js
const createDOMPurify = require('dompurify');
const { JSDOM } = require('jsdom');
const window = new JSDOM('').window;
const DOMPurify = createDOMPurify(window);
const clean = DOMPurify.sanitize(markdownContent);

Content Security Policy (CSP)

all

Set CSP headers to restrict script execution, mitigating XSS impact even if payloads are injected.

# Example CSP header for Apache
Header set Content-Security-Policy "default-src 'self'; script-src 'self'"
# Example for Nginx
add_header Content-Security-Policy "default-src 'self'; script-src 'self';";

🧯 If You Can't Patch

  • Disable markdown file uploads or restrict to trusted sources only.
  • Use a web application firewall (WAF) with XSS protection rules to block malicious payloads.

🔍 How to Verify

Check if Vulnerable:

Check if Marky 0.0.1 is installed by reviewing package.json or dependencies; test by uploading a markdown file with <script>alert('XSS')</script> and observing if it executes.

Check Version:

npm list marky or check package.json for "marky": "0.0.1"

Verify Fix Applied:

After implementing workarounds, test with the same payload to ensure scripts are sanitized or blocked by CSP.

📡 Detection & Monitoring

Log Indicators:

  • Unusual markdown file uploads with script tags or JavaScript patterns in filenames or content.
  • Errors from CSP violations in server logs.

Network Indicators:

  • HTTP requests with markdown files containing script payloads in POST data.
  • Unexpected outbound connections from the application to external domains.

SIEM Query:

source="web_server" AND (url="*upload*" AND data="*<script>*") OR (csp_violation="script-src")

🔗 References

📤 Share & Export