← Back to CVE Explorer

CVE-2026-33940

Full vulnerability record from the local CVENow database.

Description

Handlebars provides the power necessary to let users build semantic templates. In versions 4.0.0 through 4.7.8, a crafted object placed in the template context can bypass all conditional guards in `resolvePartial()` and cause `invokePartial()` to return `undefined`. The Handlebars runtime then treats the unresolved partial as a source that needs to be compiled, passing the crafted object to `env.compile()`. Because the object is a valid Handlebars AST containing injected code, the generated JavaScript executes arbitrary commands on the server. The attack requires the adversary to control a value that can be returned by a dynamic partial lookup. Version 4.7.9 fixes the issue. Some workarounds are available. First, use the runtime-only build (`require('handlebars/runtime')`). Without `compile()`, the fallback compilation path in `invokePartial` is unreachable. Second, sanitize context data before rendering: Ensure no value in the context is a non-primitive object that could be passed to a dynamic partial. Third, avoid dynamic partial lookups (`{{> (lookup ...)}}`) when context data is user-controlled.

Severity
HIGH
CVSS score
8.1 (v3.1)
Vulnerability status
Modified
Source identifier
Published
2026-03-27 22:16:21.030000
Last modified
2026-10-26 22:10:00.163000
View original CVE JSON
{
  "id": "CVE-2026-33940",
  "sourceIdentifier": "[email protected]",
  "published": "2026-03-27T22:16:21.030",
  "lastModified": "2026-10-26T22:10:00.163",
  "vulnStatus": "Modified",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "Handlebars provides the power necessary to let users build semantic templates. In versions 4.0.0 through 4.7.8, a crafted object placed in the template context can bypass all conditional guards in `resolvePartial()` and cause `invokePartial()` to return `undefined`. The Handlebars runtime then treats the unresolved partial as a source that needs to be compiled, passing the crafted object to `env.compile()`. Because the object is a valid Handlebars AST containing injected code, the generated JavaScript executes arbitrary commands on the server. The attack requires the adversary to control a value that can be returned by a dynamic partial lookup. Version 4.7.9 fixes the issue. Some workarounds are available. First, use the runtime-only build (`require('handlebars/runtime')`). Without `compile()`,  the fallback compilation path in `invokePartial` is unreachable. Second, sanitize context data before rendering: Ensure no value in the context is a non-primitive  object that could be passed to a dynamic partial. Third, avoid dynamic partial lookups (`{{> (lookup ...)}}`) when context data is user-controlled."
    },
    {
      "lang": "es",
      "value": "Handlebars proporciona la potencia necesaria para permitir a los usuarios construir plantillas semánticas. En las versiones 4.0.0 hasta la 4.7.8, un objeto especialmente diseñado colocado en el contexto de la plantilla puede eludir todas las protecciones condicionales en ’resolvePartial()’ y hacer que ’invokePartial()’ devuelva ’undefined’. El tiempo de ejecución de Handlebars entonces trata el parcial no resuelto como una fuente que necesita ser compilada, pasando el objeto especialmente diseñado a ’env.compile()’. Debido a que el objeto es un AST de Handlebars válido que contiene código inyectado, el JavaScript generado ejecuta comandos arbitrarios en el servidor. El ataque requiere que el adversario controle un valor que pueda ser devuelto por una búsqueda de parcial dinámico. La versión 4.7.9 corrige el problema. Algunas soluciones alternativas están disponibles. Primero, use la compilación solo en tiempo de ejecución (’require(’handlebars/runtime’)’). Sin ’compile()’, la ruta de compilación de respaldo en ’invokePartial’ es inalcanzable. Segundo, sanee los datos del contexto antes de renderizar: Asegúrese de que ningún valor en el contexto sea un objeto no primitivo que pueda ser pasado a un parcial dinámico. Tercero, evite las búsquedas de parciales dinámicos (’{{> (lookup ...)}}’) cuando los datos del contexto son controlados por el usuario."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "handlebars-lang",
          "product": "handlebars.js",
          "versions": [
            {
              "version": ">= 4.0.0, < 4.7.9",
              "status": "affected"
            }
          ]
        }
      ]
    },
    {
      "source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c",
      "affectedData": [
        {
          "vendor": "Red Hat",
          "product": "Cluster Observability Operator 1.5.0",
          "defaultStatus": "affected",
          "collectionURL": "https://catalog.redhat.com/software/containers/",
          "packageName": "cluster-observability-operator/logging-console-plugin-pf4-rhel9",
          "cpes": [
            "cpe:/a:redhat:cluster_observability_operator:1.5::el9"
          ],
          "versions": [
            {
              "version": "1782839279",
              "lessThan": "*",
              "versionType": "rpm",
              "status": "unaffected"
            }
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Cluster Observability Operator 1.5.0",
          "defaultStatus": "affected",
          "collectionURL": "https://catalog.redhat.com/software/containers/",
          "packageName": "cluster-observability-operator/logging-console-plugin-pf5-rhel9",
          "cpes": [
            "cpe:/a:redhat:cluster_observability_operator:1.5::el9"
          ],
          "versions": [
            {
              "version": "1782840539",
              "lessThan": "*",
              "versionType": "rpm",
              "status": "unaffected"
            }
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Cluster Observability Operator 1.5.0",
          "defaultStatus": "affected",
          "collectionURL": "https://catalog.redhat.com/software/containers/",
          "packageName": "cluster-observability-operator/troubleshooting-panel-console-plugin-pf6-rhel9",
          "cpes": [
            "cpe:/a:redhat:cluster_observability_operator:1.5::el9"
          ],
          "versions": [
            {
              "version": "1782839996",
              "lessThan": "*",
              "versionType": "rpm",
              "status": "unaffected"
            }
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat OpenShift Dev Spaces 3.27",
          "defaultStatus": "affected",
          "collectionURL": "https://catalog.redhat.com/software/containers/",
          "packageName": "devspaces/code-rhel9",
          "cpes": [
            "cpe:/a:redhat:openshift_devspaces:3.27::el9"
          ],
          "versions": [
            {
              "version": "1776744110",
              "lessThan": "*",
              "versionType": "rpm",
              "status": "unaffected"
            }
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Cryostat 4",
          "defaultStatus": "unaffected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "handlebars",
          "cpes": [
            "cpe:/a:redhat:cryostat:4"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Logging Subsystem for Red Hat OpenShift",
          "defaultStatus": "affected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "openshift-logging/elasticsearch6-rhel9",
          "cpes": [
            "cpe:/a:redhat:logging:5"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Logging Subsystem for Red Hat OpenShift",
          "defaultStatus": "affected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "openshift-logging/elasticsearch-operator-bundle",
          "cpes": [
            "cpe:/a:redhat:logging:5"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Logging Subsystem for Red Hat OpenShift",
          "defaultStatus": "affected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "openshift-logging/elasticsearch-proxy-rhel9",
          "cpes": [
            "cpe:/a:redhat:logging:5"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Logging Subsystem for Red Hat OpenShift",
          "defaultStatus": "affected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "openshift-logging/elasticsearch-rhel9-operator",
          "cpes": [
            "cpe:/a:redhat:logging:5"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Logging Subsystem for Red Hat OpenShift",
          "defaultStatus": "affected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "openshift-logging/kibana6-rhel8",
          "cpes": [
            "cpe:/a:redhat:logging:5"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Logging Subsystem for Red Hat OpenShift",
          "defaultStatus": "affected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "openshift-logging/logging-curator5-rhel9",
          "cpes": [
            "cpe:/a:redhat:logging:5"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat Data Grid 8",
          "defaultStatus": "unaffected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "handlebars",
          "cpes": [
            "cpe:/a:redhat:jboss_data_grid:8"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat Enterprise Linux 10",
          "defaultStatus": "unaffected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "firefox",
          "cpes": [
            "cpe:/o:redhat:enterprise_linux:10"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat Enterprise Linux 10",
          "defaultStatus": "affected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "thunderbird",
          "cpes": [
            "cpe:/o:redhat:enterprise_linux:10"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat Enterprise Linux 7",
          "defaultStatus": "unaffected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "firefox",
          "cpes": [
            "cpe:/o:redhat:enterprise_linux:7"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat Enterprise Linux 8",
          "defaultStatus": "affected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "389-ds:1.4/389-ds-base",
          "cpes": [
            "cpe:/o:redhat:enterprise_linux:8"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat Enterprise Linux 8",
          "defaultStatus": "unaffected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "firefox",
          "cpes": [
            "cpe:/o:redhat:enterprise_linux:8"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat Enterprise Linux 8",
          "defaultStatus": "unaffected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "grafana",
          "cpes": [
            "cpe:/o:redhat:enterprise_linux:8"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat Enterprise Linux 8",
          "defaultStatus": "unaffected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "mozjs60",
          "cpes": [
            "cpe:/o:redhat:enterprise_linux:8"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat Enterprise Linux 8",
          "defaultStatus": "unaffected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "thunderbird",
          "cpes": [
            "cpe:/o:redhat:enterprise_linux:8"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat Enterprise Linux 9",
          "defaultStatus": "affected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "firefox",
          "cpes": [
            "cpe:/o:redhat:enterprise_linux:9"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat Enterprise Linux 9",
          "defaultStatus": "unaffected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "thunderbird",
          "cpes": [
            "cpe:/o:redhat:enterprise_linux:9"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat OpenShift AI (RHOAI)",
          "defaultStatus": "unaffected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "rhoai/odh-workbench-codeserver-datascience-cpu-py312-rhel9",
          "cpes": [
            "cpe:/a:redhat:openshift_ai"
          ]
        },
        {
          "vendor": "Red Hat",
          "product": "Red Hat Process Automation 7",
          "defaultStatus": "unaffected",
          "collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
          "packageName": "handlebars",
          "cpes": [
            "cpe:/a:redhat:jboss_enterprise_bpms_platform:7"
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "[email protected]",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H",
          "baseScore": 8.1,
          "baseSeverity": "HIGH",
          "attackVector": "NETWORK",
          "attackComplexity": "HIGH",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "HIGH",
          "integrityImpact": "HIGH",
          "availabilityImpact": "HIGH"
        },
        "exploitabilityScore": 2.2,
        "impactScore": 5.9
      },
      {
        "source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H",
          "baseScore": 8.1,
          "baseSeverity": "HIGH",
          "attackVector": "NETWORK",
          "attackComplexity": "HIGH",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "HIGH",
          "integrityImpact": "HIGH",
          "availabilityImpact": "HIGH"
        },
        "exploitabilityScore": 2.2,
        "impactScore": 5.9
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-03-31T00:00:00+00:00",
          "id": "CVE-2026-33940",
          "options": [
            {
              "exploitation": "poc"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "total"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-94"
        },
        {
          "lang": "en",
          "value": "CWE-843"
        }
      ]
    },
    {
      "source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-94"
        }
      ]
    }
  ],
  "configurations": [
    {
      "nodes": [
        {
          "operator": "OR",
          "negate": false,
          "cpeMatch": [
            {
              "vulnerable": true,
              "criteria": "cpe:2.3:a:handlebarsjs:handlebars:*:*:*:*:*:node.js:*:*",
              "versionStartIncluding": "4.0.0",
              "versionEndExcluding": "4.7.9",
              "matchCriteriaId": "A9D1F9A7-8359-4C3F-9932-4A085094F388"
            }
          ]
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://github.com/handlebars-lang/handlebars.js/commit/68d8df5a88e0a26fe9e6084c5c6aaebe67b07da2",
      "source": "[email protected]",
      "tags": [
        "Patch"
      ]
    },
    {
      "url": "https://github.com/handlebars-lang/handlebars.js/releases/tag/v4.7.9",
      "source": "[email protected]",
      "tags": [
        "Release Notes"
      ]
    },
    {
      "url": "https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-xhpv-hc6g-r9c6",
      "source": "[email protected]",
      "tags": [
        "Exploit",
        "Vendor Advisory"
      ]
    },
    {
      "url": "https://access.redhat.com/errata/RHSA-2026:10175",
      "source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c"
    },
    {
      "url": "https://access.redhat.com/errata/RHSA-2026:34342",
      "source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c"
    },
    {
      "url": "https://access.redhat.com/security/cve/CVE-2026-33940",
      "source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c"
    },
    {
      "url": "https://bugzilla.redhat.com/show_bug.cgi?id=2452521",
      "source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c"
    },
    {
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-33940.json",
      "source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c"
    }
  ]
}