Skip to main content

PCRE2 EUVDEUVD-2026-75945

| CVE-2026-89160 MEDIUM
Out-of-bounds Read (CWE-125)
2026-09-11 cve@mitre.org GHSA-cv45-8fc2-7w58
Medium
Disputed · 6.5 NVD
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Supply invalid UTF-sequence subject string
  2. Delivery
    Application invokes pcre2_match() with PCRE2_MATCH_INVALID_UTF
  3. Exploit
    Backward UTF scan proceeds without lower-bound check
  4. Execution
    Out-of-bounds read occurs in pcre2_match
  5. Impact
    Process crash causes denial of service

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Bounds checking, read limits
MITRE ATT&CK

1 technique across 1 tactic: Collection

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires all three of the following: (1) the calling application must explicitly enable PCRE2_MATCH_INVALID_UTF when invoking pcre2_match() - this is a non-default, opt-in option that application code must deliberately set; (2) the subject string passed to pcre2_match() must contain invalid UTF byte sequences; and (3) the attacker must be able to supply or influence the content of that subject string (e.g., via a network-reachable input field). Standard PCRE2 usage - including default pcre2_match() calls without PCRE2_MATCH_INVALID_UTF - is not affected. The high attack complexity (AC:H in CVSS) reflects both the non-default flag requirement and the need to craft an invalid UTF sequence that hits the specific backward-scan boundary condition. Applications using PCRE2 for pattern matching on already-validated UTF input are not at risk.

Impact

The CVSS 3.1 vector AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L (score 3.7) accurately characterizes this as a low-severity, niche-exploitation flaw: the AC:H metric reflects that triggering the vulnerability requires an application that both explicitly enables PCRE2_MATCH_INVALID_UTF and accepts attacker-controlled input as the match subject, a non-default and relatively uncommon combination. No CISA KEV entry exists and no POC is referenced, indicating no public exploitation activity. EPSS data is not provided in the input, but given the specific trigger conditions, even a mid-sized municipal IT team in mielec running standard PHP or nginx deployments would be unaffected unless their application code specifically opts into PCRE2_MATCH_INVALID_UTF and processes untrusted strings through it. The impact ceiling is a process crash (partial availability loss), not persistent compromise or data exposure. Notably, PCRE2 10.48 bundles four additional security fixes - including a heap write on 32-bit platforms (GHSA-3r4p-g7gg-ppmf) and integer overflows during pattern compilation (GHSA-fmgr-6ggq-9859) - several of which appear more severe; the aggregate motivation to upgrade is therefore higher than this CVE's score alone suggests.

Exploit ScenarioDerived

An attacker submits a crafted string containing deliberate invalid UTF-8 sequences to a web application that passes user input directly as the subject argument to pcre2_match() with the PCRE2_MATCH_INVALID_UTF flag enabled. During backward UTF scanning, the engine reads below the lower bound of its internal buffer, causing a crash and transient denial of service for the affected process or thread. No public exploit code has been identified, and the high attack complexity reflects the need to both identify an application using this non-default flag and craft an input that triggers the specific boundary condition.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 11, 2026

Out-of-bounds read in PCRE2 before version 10.48 can be triggered in pcre2_match() when the PCRE2_MATCH_INVALID_UTF option is active and a subject string containing invalid UTF sequences is matched. The flaw occurs during backward scanning through invalid UTF data, where the lower buffer bound is not enforced, potentially crashing the calling application. The official CVSS score of 3.7 reflects high attack complexity and an impact limited to partial availability loss, with no confidentiality or integrity consequences confirmed. No public exploit has been identified at time of analysis.

RemediationAI

Upgrade to PCRE2 10.48, which applies the lower buffer bound guard fixing this issue along with four other bundled security fixes. The release is available at https://github.com/PCRE2Project/pcre2/releases/tag/pcre2-10.48 with a signed tarball and GitHub attestation for supply-chain verification. Linux distribution maintainers and application packagers should track their PCRE2 package update to 10.48 promptly. If an immediate upgrade is not feasible, applications can remove use of the PCRE2_MATCH_INVALID_UTF flag for code paths that process attacker-controlled input; this eliminates the vulnerable code path but trades off the ability to gracefully handle malformed UTF strings, which may require application-level input pre-validation instead. The GitHub Security Advisory https://github.com/PCRE2Project/pcre2/security/advisories/GHSA-9qww-pwc4-77qq provides additional upstream detail.

Affected VersionsENISA

pcre2 10.34 <10.48

Affected Packages

euvd pcre2 fix: 10.48

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

PCRE2 (Perl-Compatible Regular Expressions 2) is a widely embedded C library providing high-performance regex matching, used in PHP, nginx, grep, Python bindings, and many Linux distribution components. The PCRE2_MATCH_INVALID_UTF match-time option allows calling applications to pass subject strings that may contain ill-formed UTF sequences without triggering hard errors - a useful feature for processing untrusted or mixed-encoding data streams. CWE-125 (Out-of-bounds Read) describes the root cause: while scanning backwards through invalid UTF code units, the pcre2_match() engine does not apply the required lower-bound check to its internal buffer pointer, allowing a read below the valid buffer region. GHSA-9qww-pwc4-77qq identifies this specific issue, and the PCRE2 10.48 release changelog confirms the fix as 'applied lower buffer bound to prevent two out-of-bounds reads while scanning backwards through invalid UTF data with PCRE2_MATCH_INVALID_UTF.' No CPE string is supplied in the input data.

Know when Pcre2 gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Sources disagree (Low–High)
NVD PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L
vuln.today AI 3.7 LOW

High complexity reflects the mandatory PCRE2_MATCH_INVALID_UTF flag and invalid UTF subject requirement; impact is crash-only with no confidentiality or integrity effect.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
SUSE 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Red Hat 3.7 LOW

vuln.today treats the vendor’s rating as authoritative. A higher third-party CVSS (e.g. CISA-ADP) is shown for transparency but does not drive the headline severity.

CVSS VectorNVD

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
None
Availability
Low

Lifecycle Timeline

4
Severity Changed
Sep 16, 2026 - 19:22 NVD
LOW MEDIUM
CVSS changed
Sep 16, 2026 - 19:22 NVD
3.7 (LOW) 6.5 (MEDIUM)
Patch available
Sep 11, 2026 - 05:16 EUVD
CVE Published
Sep 11, 2026 - 04:18 cve.org
LOW 3.7

DescriptionNVD

PCRE2 before 10.48 has a pcre2_match out-of-bounds read during the PCRE2_MATCH_INVALID_UTF matching of an invalid UTF subject.

Threat Intelligence Overview

EPSS Score
0.2%
Top 87% exploitable
Prevalence
High
foundational regex library embedded in PHP, nginx, grep, and most Linux distributions
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
High

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

More in Pcre2

View all
CVE-2016-3191 CRITICAL POC
9.8 Mar 17

The compile_branch function in pcre_compile.c in PCRE 8.x before 8.39 and pcre2_compile.c in PCRE2 before 10.22 mishandl

CVE-2015-3210 CRITICAL POC
9.8 Dec 13

Heap-based buffer overflow in PCRE 8.34 through 8.37 and PCRE2 10.10 allows remote attackers to execute arbitrary code v

CVE-2017-8786 CRITICAL POC
9.8 May 05

pcre2test.c in PCRE2 10.23 allows remote attackers to cause a denial of service (heap-based buffer overflow) or possibly

CVE-2015-3217 HIGH POC
7.5 Dec 13

PCRE 7.8 and 8.32 through 8.37, and PCRE2 10.10 mishandle group empty matches, which might allow remote attackers to cau

CVE-2017-8399 CRITICAL
9.8 May 01

PCRE2 before 10.30 has an out-of-bounds write caused by a stack-based buffer overflow in pcre2_match.c, related to a "pa

CVE-2022-1587 CRITICAL
9.1 May 16

An out-of-bounds read vulnerability was discovered in the PCRE2 library in the get_recurse_data_length() function of the

CVE-2022-1586 CRITICAL
9.1 May 16

An out-of-bounds read vulnerability was discovered in the PCRE2 library in the compile_xclass_matchingpath() function of

CVE-2017-7186 HIGH
7.5 Mar 20

libpcre1 in PCRE 8.40 and libpcre2 in PCRE2 10.23 allow remote attackers to cause a denial of service (segmentation viol

CVE-2026-86145 HIGH
8.2 Sep 05

Out-of-bounds heap write in PCRE2 before 10.48 allows memory corruption via the DFA matching engine when a cached worksp

CVE-2026-89161 HIGH
7.8 Sep 11

An incorrect free in the PCRE2 JIT fast path (all versions before 10.48) can corrupt process memory when an application

CVE-2026-103111 HIGH
7.6 Sep 30

Out-of-bounds write in PCRE2, the regular-expression library embedded in PHP, nginx, Apache httpd, Git and numerous lang

CVE-2026-89157 HIGH
7.4 Sep 11

An out-of-bounds heap write in PCRE2's pcre2_convert() pattern-conversion API affects releases before 10.48, but only on

Vendor StatusVendor

SUSE

Severity: Important
Product Status
Container bci/bci-base-fips:15.7-23.13 Container bci/bci-busybox:15.7-25.28 Container bci/bci-init:15.7-53.56 Container bci/bci-micro-fips:15.7-27.20 Container bci/bci-micro:15.7-61.9 Container bci/bci-minimal:15.7-26.59 Container bci/bci-sle15-kernel-module-devel:15.7-61.21 Container bci/dotnet-aspnet:10.0.12-29.11 Container bci/dotnet-aspnet:8.0.31-99.11 Container bci/dotnet-aspnet:9.0.20-58.11 Container bci/dotnet-runtime:10.0.12-29.11 Container bci/dotnet-runtime:8.0.31-99.11 Container bci/dotnet-runtime:9.0.20-58.11 Container bci/dotnet-sdk:10.0.12-29.11 Container bci/dotnet-sdk:8.0.31-99.11 Container bci/dotnet-sdk:9.0.20-59.11 Container bci/golang:1.25.14-3.72.16 Container bci/golang:1.25.14-openssl-90.20 Container bci/golang:1.26.7-openssl-90.20 Container bci/golang:1.26.8-2.73.17 Container bci/nodejs:22.23.2-24.56 Container bci/openjdk-devel:17.0.20.1-21.65 Container bci/openjdk-devel:21.0.12.1-25.65 Container bci/openjdk-devel:25.0.4.1-9.66 Container bci/openjdk:17.0.20.1-20.56 Container bci/openjdk:21.0.12.1-24.55 Container bci/openjdk:25.0.4.1-9.55 Container bci/python:3.13.14-88.53 Container bci/python:3.6.15-84.52 Container bci/ruby:2.5-sles15 Container bci/ruby:3.4-27.5 Container bci/rust:1.97.1-2.2.13 Container bci/rust:1.98.0-1.2.13 Container bci/spack:0.23.1-25.62 Container private-registry/1.2/harbor-core:1.2.1-1.109 Container private-registry/1.2/harbor-exporter:1.2.1-1.109 Container private-registry/1.2/harbor-jobservice:1.2.1-1.107 Container private-registry/1.2/harbor-portal:1.2.1-1.118 Container private-registry/1.2/harbor-registry:1.2.1-1.109 Container private-registry/1.2/harbor-registryctl:1.2.1-1.109 Container private-registry/1.2/harbor-trivy-adapter:1.2.1-1.118 Container private-registry/harbor-core:latest Container private-registry/harbor-exporter:latest Container private-registry/harbor-jobservice:latest Container private-registry/harbor-portal:latest Container private-registry/harbor-registry:2.8.3-1.79 Container private-registry/harbor-registryctl:latest Container private-registry/harbor-trivy-adapter:0.35.1-1.82 Container suse/hpc/warewulf4-x86_64/sle-hpc-node:15.7.20.8.168 Container suse/ltss/sle15.6/bci-base-fips:15.6-35.104 Container suse/ltss/sle15.6/sle15:15.6-5.95 Container suse/sle15:15.7-5.23.38 Image SLES15-SP6 Image SLES15-SP6-Azure-Standard Image SLES15-SP6-BYOS Image SLES15-SP6-BYOS-Azure Image SLES15-SP6-BYOS-EC2 Image SLES15-SP6-EC2 Image SLES15-SP6-EC2-ECS-HVM Image SLES15-SP7-Azure-3P Image SLES15-SP7-Azure-Standard Image SLES15-SP7-BYOS-GCE Image SLES15-SP7-EC2 Image SLES15-SP7-GCE Affected
Container rancher/elemental-channel/sl-micro:6.0-baremetal Container rancher/elemental-channel/sl-micro:6.0-base Container rancher/elemental-channel/sl-micro:6.0-kvm Container rancher/elemental-channel/sl-micro:6.0-rt Container suse/sl-micro/6.0/baremetal-iso-image:2.1.4-6.240 Container suse/sl-micro/6.0/base-iso-image:2.1.4-5.240 Container suse/sl-micro/6.0/base-os-container:2.1.3-7.212 Container suse/sl-micro/6.0/kvm-iso-image:2.1.4-6.253 Container suse/sl-micro/6.0/kvm-os-container:2.1.3-6.221 Container suse/sl-micro/6.0/rt-iso-image:2.1.4-6.236 Container suse/sl-micro/6.0/rt-os-container:2.1.3-7.242 Container suse/sl-micro/6.0/toolbox:13.2-9.166 Container suse/sl-micro/6.1/baremetal-iso-image:2.2.1-5.182 Container suse/sl-micro/6.1/baremetal-os-container:2.2.1-7.108 Container suse/sl-micro/6.1/base-iso-image:2.2.1-5.199 Container suse/sl-micro/6.1/base-os-container:2.2.1-5.188 Container suse/sl-micro/6.1/kvm-iso-image:2.2.1-5.218 Container suse/sl-micro/6.1/kvm-os-container:2.2.1-5.190 Container suse/sl-micro/6.1/rt-iso-image:2.2.1-5.182 Container suse/sl-micro/6.1/rt-os-container:2.2.1-5.187 Image SL-Micro Image SL-Micro-Base Image SL-Micro-Base-RT Image SL-Micro-Base-RT-SelfInstall Image SL-Micro-Base-RT-encrypted Image SL-Micro-Base-SelfInstall Image SL-Micro-Base-encrypted Image SL-Micro-Base-qcow Image SL-Micro-Default Image SL-Micro-Default-SelfInstall Image SL-Micro-Default-encrypted Image SL-Micro-Default-qcow Image SLE-Micro Image SLE-Micro-Azure Image SLE-Micro-BYOS Image SLE-Micro-BYOS-Azure Image SLE-Micro-BYOS-EC2 Image SLE-Micro-BYOS-GCE Image SLE-Micro-EC2 Image SLE-Micro-GCE Affected
Container suse/mariadb-client:11.8.8-72.28 Container suse/mariadb:11.8.8-79.36 Affected
Container suse/sl-micro/6.0/baremetal-os-container:2.1.3-6.249 Affected
Image SLES15-SP6-SAP-BYOS Image SLES15-SP6-SAP-BYOS-GCE Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy