← Back to CVE Explorer

CVE-2026-66296

Full vulnerability record from the local CVENow database.

Description

Improper Neutralization of Input During Web Page Generation (XSS) vulnerability in lud oaskit allows reflected cross-site scripting via the default HTML error handler. Oaskit.ErrorHandler.Default.format_reason/4 and Oaskit.ErrorHandler.Default.reason_to_html/1 in lib/oaskit/error_handler/default.ex render request-validation failures as an HTML page whenever the request's Accept header contains html, interpolating request-controlled strings into that page without HTML escaping. The unescaped values are object keys taken from a request body or from an object or deepObject query parameter, which appear in the JSON Schema error's instance path when a schema rejects them (for example under additionalProperties: false), and the raw Content-Type header, reflected in unsupported-media-type errors when it fails to parse. Because browsers send Accept: text/html on ordinary top-level navigation, a crafted GET link is sufficient to trigger the error page; no form submission, custom Content-Type, or attacker-controlled script on the victim's side is required. A payload such as filter[</code></h2><script>alert(document.domain)</script>]=x terminates the enclosing markup and the injected script executes in the origin of the application using oaskit, giving it access to that origin's cookies, session, and same-origin responses. Both HTML error rendering and the vulnerable handler are enabled by default: Oaskit.Plugs.ValidateRequest defaults :html_errors to true and :error_handler to Oaskit.ErrorHandler.Default, so applications following the documented usage are affected without any opt-in. This issue affects oaskit: from 0.1.0 before 0.14.1.

Severity
MEDIUM
CVSS score
5.1 (v4.0)
Vulnerability status
Analyzed
Source identifier
6b3ad84c-e1a6-4bf7-a703-f496b71e49db
Published
2026-08-03 20:17:25.720000
Last modified
2026-10-23 21:10:00.157000
View original CVE JSON
{
  "id": "CVE-2026-66296",
  "sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
  "published": "2026-08-03T20:17:25.720",
  "lastModified": "2026-10-23T21:10:00.157",
  "vulnStatus": "Analyzed",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "Improper Neutralization of Input During Web Page Generation (XSS) vulnerability in lud oaskit allows reflected cross-site scripting via the default HTML error handler.\n\nOaskit.ErrorHandler.Default.format_reason/4 and Oaskit.ErrorHandler.Default.reason_to_html/1 in lib/oaskit/error_handler/default.ex render request-validation failures as an HTML page whenever the request's Accept header contains html, interpolating request-controlled strings into that page without HTML escaping. The unescaped values are object keys taken from a request body or from an object or deepObject query parameter, which appear in the JSON Schema error's instance path when a schema rejects them (for example under additionalProperties: false), and the raw Content-Type header, reflected in unsupported-media-type errors when it fails to parse.\n\nBecause browsers send Accept: text/html on ordinary top-level navigation, a crafted GET link is sufficient to trigger the error page; no form submission, custom Content-Type, or attacker-controlled script on the victim's side is required. A payload such as filter[</code></h2><script>alert(document.domain)</script>]=x terminates the enclosing markup and the injected script executes in the origin of the application using oaskit, giving it access to that origin's cookies, session, and same-origin responses.\n\nBoth HTML error rendering and the vulnerable handler are enabled by default: Oaskit.Plugs.ValidateRequest defaults :html_errors to true and :error_handler to Oaskit.ErrorHandler.Default, so applications following the documented usage are affected without any opt-in.\n\nThis issue affects oaskit: from 0.1.0 before 0.14.1."
    },
    {
      "lang": "es",
      "value": "Vulnerabilidad de Neutralización Incorrecta de Entrada Durante la Generación de Páginas Web (XSS) en lud oaskit permite cross-site scripting reflejado a través del gestor de errores HTML predeterminado.\n\nOaskit.ErrorHandler.Default.format_reason/4 y Oaskit.ErrorHandler.Default.reason_to_html/1 en lib/oaskit/error_handler/default.ex renderizan fallos de validación de solicitudes como una página HTML siempre que el encabezado Accept de la solicitud contenga html, interpolando cadenas controladas por la solicitud en esa página sin escape HTML. Los valores sin escape son claves de objeto tomadas de un cuerpo de solicitud o de un parámetro de consulta de tipo object o deepObject, que aparecen en la ruta de instancia del error de JSON Schema cuando un esquema los rechaza (por ejemplo, bajo additionalProperties: false), y el encabezado Content-Type sin procesar, reflejado en errores de tipo de medio no compatible (unsupported-media-type) cuando falla al analizarse.\n\nDebido a que los navegadores envían Accept: text/html en la navegación de nivel superior ordinaria, un enlace GET manipulado es suficiente para activar la página de error; no se requiere el envío de formularios, un Content-Type personalizado o un script controlado por el atacante en el lado de la víctima. Una carga útil como filter[[/code][/h2][script_tag]alert(document.domain)[/script]]=x termina el marcado envolvente y el script inyectado se ejecuta en el origen de la aplicación que utiliza oaskit, dándole acceso a las cookies, la sesión y las respuestas del mismo origen de ese origen.\n\nTanto la renderización de errores HTML como el gestor vulnerable están habilitados por defecto: Oaskit.Plugs.ValidateRequest establece por defecto :html_errors en true y :error_handler en Oaskit.ErrorHandler.Default, por lo que las aplicaciones que siguen el uso documentado se ven afectadas sin necesidad de una activación explícita.\n\nEste problema afecta a oaskit: desde 0.1.0 antes de 0.14.1."
    }
  ],
  "affected": [
    {
      "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
      "affectedData": [
        {
          "vendor": "lud",
          "product": "oaskit",
          "defaultStatus": "unaffected",
          "collectionURL": "https://repo.hex.pm",
          "packageName": "oaskit",
          "cpes": [
            "cpe:2.3:a:lud:oaskit:*:*:*:*:*:elixir:*:*"
          ],
          "modules": [
            "Elixir.Oaskit.ErrorHandler.Default"
          ],
          "programFiles": [
            "lib/oaskit/error_handler/default.ex"
          ],
          "programRoutines": [
            {
              "name": "'Elixir.Oaskit.ErrorHandler.Default':format_reason/4"
            },
            {
              "name": "'Elixir.Oaskit.ErrorHandler.Default':reason_to_html/1"
            }
          ],
          "repo": "https://github.com/lud/oaskit",
          "packageURL": "pkg:hex/oaskit",
          "versions": [
            {
              "version": "0.1.0",
              "lessThan": "0.14.1",
              "versionType": "semver",
              "status": "affected"
            }
          ]
        },
        {
          "vendor": "lud",
          "product": "oaskit",
          "defaultStatus": "unaffected",
          "collectionURL": "https://github.com",
          "packageName": "lud/oaskit",
          "cpes": [
            "cpe:2.3:a:lud:oaskit:*:*:*:*:*:elixir:*:*"
          ],
          "modules": [
            "Elixir.Oaskit.ErrorHandler.Default"
          ],
          "programFiles": [
            "lib/oaskit/error_handler/default.ex"
          ],
          "programRoutines": [
            {
              "name": "'Elixir.Oaskit.ErrorHandler.Default':format_reason/4"
            },
            {
              "name": "'Elixir.Oaskit.ErrorHandler.Default':reason_to_html/1"
            }
          ],
          "repo": "https://github.com/lud/oaskit",
          "packageURL": "pkg:github/lud/oaskit",
          "versions": [
            {
              "version": "552de8ca0ff60617bea58bcafa451892d61a161c",
              "lessThan": "b70c6b2eaf0b11bdd0bbb21b8a87dbb3d46918a1",
              "versionType": "git",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV40": [
      {
        "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "type": "Secondary",
        "cvssData": {
          "version": "4.0",
          "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
          "baseScore": 5.1,
          "baseSeverity": "MEDIUM",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "attackRequirements": "NONE",
          "privilegesRequired": "NONE",
          "userInteraction": "ACTIVE",
          "vulnConfidentialityImpact": "NONE",
          "vulnIntegrityImpact": "NONE",
          "vulnAvailabilityImpact": "NONE",
          "subConfidentialityImpact": "LOW",
          "subIntegrityImpact": "LOW",
          "subAvailabilityImpact": "NONE",
          "exploitMaturity": "NOT_DEFINED",
          "confidentialityRequirement": "NOT_DEFINED",
          "integrityRequirement": "NOT_DEFINED",
          "availabilityRequirement": "NOT_DEFINED",
          "modifiedAttackVector": "NOT_DEFINED",
          "modifiedAttackComplexity": "NOT_DEFINED",
          "modifiedAttackRequirements": "NOT_DEFINED",
          "modifiedPrivilegesRequired": "NOT_DEFINED",
          "modifiedUserInteraction": "NOT_DEFINED",
          "modifiedVulnConfidentialityImpact": "NOT_DEFINED",
          "modifiedVulnIntegrityImpact": "NOT_DEFINED",
          "modifiedVulnAvailabilityImpact": "NOT_DEFINED",
          "modifiedSubConfidentialityImpact": "NOT_DEFINED",
          "modifiedSubIntegrityImpact": "NOT_DEFINED",
          "modifiedSubAvailabilityImpact": "NOT_DEFINED",
          "Safety": "NOT_DEFINED",
          "Automatable": "NOT_DEFINED",
          "Recovery": "NOT_DEFINED",
          "valueDensity": "NOT_DEFINED",
          "vulnerabilityResponseEffort": "NOT_DEFINED",
          "providerUrgency": "NOT_DEFINED"
        }
      }
    ],
    "cvssMetricV31": [
      {
        "source": "[email protected]",
        "type": "Primary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N",
          "baseScore": 6.1,
          "baseSeverity": "MEDIUM",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "NONE",
          "userInteraction": "REQUIRED",
          "scope": "CHANGED",
          "confidentialityImpact": "LOW",
          "integrityImpact": "LOW",
          "availabilityImpact": "NONE"
        },
        "exploitabilityScore": 2.8,
        "impactScore": 2.7
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-08-03T19:50:03.665445Z",
          "id": "CVE-2026-66296",
          "options": [
            {
              "exploitation": "poc"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-79"
        }
      ]
    }
  ],
  "configurations": [
    {
      "nodes": [
        {
          "operator": "OR",
          "negate": false,
          "cpeMatch": [
            {
              "vulnerable": true,
              "criteria": "cpe:2.3:a:lud:oaskit:*:*:*:*:*:*:*:*",
              "versionStartIncluding": "0.1.0",
              "versionEndExcluding": "0.14.1",
              "matchCriteriaId": "6A883114-0624-4C87-8FAF-B8C277AB8B61"
            }
          ]
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://cna.erlef.org/cves/CVE-2026-66296.html",
      "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
      "tags": [
        "Patch",
        "Third Party Advisory"
      ]
    },
    {
      "url": "https://github.com/lud/oaskit/commit/b70c6b2eaf0b11bdd0bbb21b8a87dbb3d46918a1",
      "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
      "tags": [
        "Patch"
      ]
    },
    {
      "url": "https://github.com/lud/oaskit/security/advisories/GHSA-h7xw-x8wr-xpcc",
      "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
      "tags": [
        "Exploit",
        "Vendor Advisory"
      ]
    },
    {
      "url": "https://osv.dev/vulnerability/EEF-CVE-2026-66296",
      "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
      "tags": [
        "Patch",
        "Third Party Advisory"
      ]
    },
    {
      "url": "https://github.com/lud/oaskit/security/advisories/GHSA-h7xw-x8wr-xpcc",
      "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
      "tags": [
        "Exploit",
        "Vendor Advisory"
      ]
    }
  ]
}