← Back to CVE Explorer

CVE-2026-35565

Full vulnerability record from the local CVENow database.

Description

Stored Cross-Site Scripting (XSS) via Unsanitized Topology Metadata in Apache Storm UI Versions Affected: before 2.8.6 Description: The Storm UI visualization component interpolates topology metadata including component IDs, stream names, and grouping values directly into HTML via innerHTML in parseNode() and parseEdge() without sanitization at any layer. An authenticated user with topology submission rights could craft a topology containing malicious HTML/JavaScript in component identifiers (e.g., a bolt ID containing an onerror event handler). This payload flows through Nimbus → Thrift → the Visualization API → vis.js tooltip rendering, resulting in stored cross-site scripting.  In multi-tenant deployments where topology submission is available to less-trusted users but the UI is accessed by operators or administrators, this enables privilege escalation through script execution in an admin's browser session. Mitigation: 2.x users should upgrade to 2.8.6. Users who cannot upgrade immediately should monkey-patch the parseNode() and parseEdge() functions in the visualization JavaScript file to HTML-escape all API-supplied values including nodeId, :capacity, :latency, :component, :stream, and :grouping before interpolation into tooltip HTML strings, and should additionally restrict topology submission to trusted users via Nimbus ACLs as a defense-in-depth measure. A guide on how to do this is available in the release notes of 2.8.6. Credit: This issue was discovered while investigating another report by K.

Severity
MEDIUM
CVSS score
5.4 (v3.1)
Vulnerability status
Analyzed
Source identifier
Published
2026-04-13 10:16:11.770000
Last modified
2026-10-26 21:10:00.170000
View original CVE JSON
{
  "id": "CVE-2026-35565",
  "sourceIdentifier": "[email protected]",
  "published": "2026-04-13T10:16:11.770",
  "lastModified": "2026-10-26T21:10:00.170",
  "vulnStatus": "Analyzed",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "Stored Cross-Site Scripting (XSS) via Unsanitized Topology Metadata in Apache Storm UI\n\n\nVersions Affected: before 2.8.6\n\n\nDescription: The Storm UI visualization component interpolates topology metadata including component IDs, stream names, and grouping values directly into HTML via innerHTML in parseNode() and parseEdge() without sanitization at any layer. An authenticated user with topology submission rights could craft a topology containing malicious HTML/JavaScript in component identifiers (e.g., a bolt ID containing an onerror event handler). This payload flows through Nimbus → Thrift → the Visualization API → vis.js tooltip rendering, resulting in stored cross-site scripting. \n\nIn multi-tenant deployments where topology submission is available to less-trusted users but the UI is accessed by operators or administrators, this enables privilege escalation through script execution in an admin's browser session.\n\n\nMitigation: 2.x users should upgrade to 2.8.6. Users who cannot upgrade immediately should monkey-patch the parseNode() and parseEdge() functions in the visualization JavaScript file to HTML-escape all API-supplied values including nodeId, :capacity, :latency, :component, :stream, and :grouping before interpolation into tooltip HTML strings, and should additionally restrict topology submission to trusted users via Nimbus ACLs as a defense-in-depth measure. A guide on how to do this is available in the release notes of 2.8.6.\n\nCredit: This issue was discovered while investigating another report by K."
    },
    {
      "lang": "es",
      "value": "Cross-Site Scripting (XSS) Almacenado a través de Metadatos de Topología No Saneados en la Interfaz de Usuario de Apache Storm\n\nVersiones afectadas: anteriores a 2.8.6\n\nDescripción: El componente de visualización de la interfaz de usuario de Storm interpola metadatos de topología, incluyendo IDs de componentes, nombres de flujos y valores de agrupación, directamente en HTML a través de innerHTML en parseNode() y parseEdge() sin saneamiento en ninguna capa. Un usuario autenticado con derechos de envío de topología podría crear una topología que contenga HTML/JavaScript malicioso en identificadores de componentes (por ejemplo, un ID de bolt que contenga un gestor de eventos onerror). Esta carga útil fluye a través de Nimbus ? Thrift ? la API de visualización ? la renderización de tooltips de vis.js, lo que resulta en cross-site scripting almacenado.\n\nEn implementaciones multi-inquilino donde el envío de topologías está disponible para usuarios menos confiables pero la interfaz de usuario es accedida por operadores o administradores, esto permite la escalada de privilegios a través de la ejecución de scripts en la sesión del navegador de un administrador.\n\nMitigación: Los usuarios de 2.x deberían actualizar a 2.8.6. Los usuarios que no puedan actualizar inmediatamente deberían aplicar un monkey-patch a las funciones parseNode() y parseEdge() en el archivo JavaScript de visualización para escapar en HTML todos los valores proporcionados por la API, incluyendo nodeId, :capacity, :latency, :component, :stream y :grouping, antes de la interpolación en cadenas HTML de tooltip, y deberían restringir adicionalmente el envío de topologías a usuarios de confianza a través de ACL de Nimbus como medida de defensa en profundidad. Una guía sobre cómo hacer esto está disponible en las notas de la versión 2.8.6.\n\nCrédito: Este problema fue descubierto mientras se investigaba otro informe de K."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "Apache Software Foundation",
          "product": "Apache Storm UI",
          "defaultStatus": "unaffected",
          "collectionURL": "https://repo.maven.apache.org/maven2/",
          "packageName": "org.apache.storm:storm-webapp",
          "versions": [
            {
              "version": "0",
              "lessThan": "2.8.6",
              "versionType": "semver",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N",
          "baseScore": 5.4,
          "baseSeverity": "MEDIUM",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "LOW",
          "userInteraction": "REQUIRED",
          "scope": "CHANGED",
          "confidentialityImpact": "LOW",
          "integrityImpact": "LOW",
          "availabilityImpact": "NONE"
        },
        "exploitabilityScore": 2.3,
        "impactScore": 2.7
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-04-13T14:09:39.740938Z",
          "id": "CVE-2026-35565",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-79"
        }
      ]
    }
  ],
  "configurations": [
    {
      "nodes": [
        {
          "operator": "OR",
          "negate": false,
          "cpeMatch": [
            {
              "vulnerable": true,
              "criteria": "cpe:2.3:a:apache:storm:*:*:*:*:*:*:*:*",
              "versionStartIncluding": "2.0.0",
              "versionEndExcluding": "2.8.6",
              "matchCriteriaId": "52FAF08F-1AE5-4EC5-BBA7-393B88FC8AD1"
            }
          ]
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://storm.apache.org/2026/04/12/storm286-released.html",
      "source": "[email protected]",
      "tags": [
        "Release Notes",
        "Vendor Advisory"
      ]
    },
    {
      "url": "http://www.openwall.com/lists/oss-security/2026/04/12/7",
      "source": "af854a3a-2127-422b-91ae-364da2661108",
      "tags": [
        "Mailing List",
        "Third Party Advisory"
      ]
    }
  ]
}