---
id: "CVE-2026-115946"
kind: "vulnerability"
aliases: ["CVE-2026-115946"]
title: "XS::libbrotli for Perl: decoder out-of-bounds write from bundled brotli"
severity: "unknown"
cvss: null
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["brotli", "package", "perl", "xs-libbrotli"]
not_affected_if: ["no-untrusted-brotli-input"]
published_at: "2026-11-01T00:16:34+00:00"
first_seen_at: "2026-11-01T00:46:59+00:00"
updated_at: "2026-11-01T00:47:16+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-115946", "first_seen_at": "2026-11-01T00:46:59+00:00"}]
---

# XS::libbrotli for Perl: decoder out-of-bounds write from bundled brotli

XS::libbrotli versions before 1.2.1.0 bundle a brotli library whose decoder has an out-of-bounds write. A crafted compressed stream sent to a Perl module that decompresses untrusted data can corrupt memory, leak data, crash the process, or potentially run arbitrary code.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the installed XS::libbrotli version with `perl -MXS::libbrotli -e 'print $XS::libbrotli::VERSION'` or the module's entry in the Perl dependency list.
- Find dependent XS modules that decompress untrusted brotli data (`perl -MModule::Name` in the dependency tree).
- Upgrading the system brotli does not remediate this, per the sources.

## Fix

- XS::libbrotli: upgrade to `1.2.1.0` or later (bundles brotli `1.2.1`).

## Timeline

- 2026-11-01T00:46:59+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-115946

## From the sources

XS::libbrotli versions before 1.2.1.0 for Perl bundle a brotli library with an out-of-bounds write in the decoder.

Affected versions compile a bundled brotli into static archives that dependent XS modules link against at build time, rather than using the system library. The bundled copy, 1.0.7 or 1.1.0 across the range, carries the decoder out-of-bounds write described in CVE-2026-111497. Version 1.2.1.0 updates it to brotli 1.2.1.

XS::libbrotli has no Perl interface, so the decoder is reached through any dependent module that decompresses untrusted data with it. An attacker supplying a crafted brotli stream can corrupt decoder state, disclose memory, crash the process, or potentially execute arbitrary code. Upgrading the system brotli does not remediate this.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
