CVE-2026-103923
KaTeX: Existing prototype pollution can bypass trust restrictions
Reported by github_m · Published October 1, 2026
katex is fixed in 0.18.2 (npm)
KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web. From 0.11.0 until 0.18.2, KaTeX uses ordinary JavaScript property access for the renderer options object, the trust setting, default and processor setting metadata, and namespace lookup and group restoration, allowing inherited properties to be treated as explicitly supplied values. When Object.prototype is already polluted or an attacker controls the options object's prototype, attacker-controlled mathematical expressions can use an inherited trust value to enable trusted rendering and produce links capable of user-interaction cross-site scripting or loading attacker-selected external resources in a consuming application that inserts unsanitized KaTeX output into a page. KaTeX does not itself create the prototype pollution, and rendering an expression alone does not execute script. This issue is fixed in version 0.18.2.
Fixed versions
Upgrade to a fixed version or later. Language registries are listed first, then Linux distributions, then vendor products.
| Package | Ecosystem | Fixed in |
|---|---|---|
| katex | npm | 0.18.2 |
| tensorflow-gpu-jupyter | Chainguard | 2.21.0-r12 |
| gitlab-rails-ce-19.2 | Chainguard | 19.2.8-r3 |
| commercial-gitlab-rails-ee-19.3 | Chainguard | 19.3.3-r1 |
| code-server | Chainguard | 4.140.0-r4 |
| jupyter-base-notebook | Wolfi | 7.6.3-r2 |
| commercial-gitlab-rails-ee-19.4 | Chainguard | 19.4.1-r1 |
| langfuse-3 | Chainguard | 3.225.12-r2 |
| commercial-gitlab-rails-ee-fips-19.3 | Chainguard | 19.3.3-r1 |
| gitlab-rails-ce-fips-18.9 | Chainguard | 18.9.8-r8 |
| gitlab-rails-ce-fips-18.10 | Chainguard | 18.10.8-r8 |
| langfuse-4 | Chainguard | 4.55.0-r1 |
19 more packages have a fixed version. See every fix in Lookup.
Risk scores
Affected products
| Vendor | Product | Versions |
|---|---|---|
| KaTeX | KaTeX | >= 0.11.0, < 0.18.2 |
| chainguard | tensorflow-gpu-jupyter | 0 |
| chainguard | gitlab-rails-ce-19.2 | 0 |
| chainguard | commercial-gitlab-rails-ee-19.3 | 0 |
| chainguard | code-server | 0 |
| wolfi | jupyter-base-notebook | 0 |
| chainguard | commercial-gitlab-rails-ee-19.4 | 0 |
| chainguard | langfuse-3 | 0 |
| chainguard | commercial-gitlab-rails-ee-fips-19.3 | 0 |
| chainguard | gitlab-rails-ce-fips-18.9 | 0 |
| chainguard | gitlab-rails-ce-fips-18.10 | 0 |
| chainguard | langfuse-4 | 0 |
| chainguard | commercial-gitlab-rails-ee-fips-19.1 | 0 |
| chainguard | gitlab-rails-ce-19.4 | 0 |
| wolfi | langfuse-3 | 0 |
| chainguard | librechat | 0 |
| chainguard | jupyter-base-notebook | 0 |
| chainguard | gitlab-rails-ce-fips-19.3 | 0 |
| chainguard | gitlab-rails-ce-fips-19.0 | 0 |
| chainguard | commercial-gitlab-rails-ee-19.2 | 0 |
…and 14 more
Timeline
- Oct 1, 2026 CVE Published
- Oct 2, 2026 EPSS Score (10 in total, the first dated here)
- Oct 6, 2026 CVE Updated
- Oct 31, 2026 Security Advisory
Query this with the API
The same record, from the CLI:
vulnetix vdb vuln CVE-2026-103923
vulnetix vdb fixes CVE-2026-103923
Or with curl, using the org id and key from your account page:
curl -s -H "Authorization: ApiKey ${VULNETIX_ORG_ID}:${VULNETIX_API_KEY}" \
"https://api.vdb.vulnetix.com/v2/vuln/CVE-2026-103923/fixes/registry"
The Community plan is free and allows 50 queries a day. Get a free API key · API quickstart
References
- https://github.com/KaTeX/KaTeX/security/advisories/GHSA-238p-pmpm-9mq7 x_refsource_CONFIRM
- https://github.com/KaTeX/KaTeX/pull/4260 x_refsource_MISC
- https://github.com/KaTeX/KaTeX/commit/0adf7e77db6915d991803b29699f82b1ccf8d4f4 x_refsource_MISC
- https://github.com/KaTeX/KaTeX/releases/tag/v0.18.2 x_refsource_MISC
- https://nvd.nist.gov/vuln/detail/CVE-2026-103923 advisory
- https://github.com/advisories/GHSA-238p-pmpm-9mq7 advisory