Skip to main content

PCRE2 CVE-2026-89161

| EUVDEUVD-2026-75946 HIGH
Free of Memory not on the Heap (CWE-590)
2026-09-11 cve@mitre.org GHSA-7g92-94jm-fx5f
7.8
CVSS 3.1 · NVD
View

Attack ChainAIDerived

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

  1. Access
    Reach app reusing PCRE2 match_data
  2. Delivery
    Supply subject via COPY_MATCHED_SUBJECT match
  3. Exploit
    Trigger JIT fast-path reuse (pcre2_jit_match)
  4. Execution
    Incorrect free of copied subject
  5. Impact
    Heap corruption or crash

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Free memory management
Exploitation Conditions

Exploitation requires a PCRE2-consuming application (version <10.48) built with JIT support that uses a specific, uncommon API sequence: call pcre2_match with the PCRE2_COPY_MATCHED_SUBJECT option on a match_data block, then reuse that same block on the JIT fast path via pcre2_jit_match. Only that reuse triggers the incorrect free of the previously copied subject buffer. Limiting factors: the pattern must be JIT-compiled, the match_data block must be reused across the two calls (many applications create fresh match data per call), and the CVSS vector is local (AV:L) with low privileges (PR:L) - the trigger is a program-logic prerequisite of the host application, not directly attacker-selectable, which sharply narrows realistic exposure.

Impact

Signals converge on this being a genuine but low-priority memory-safety bug rather than an urgent threat. The CVSS 7.8 (AV:L/AC:L/PR:L/UI:N/C:H/I:H/A:H) reflects local, low-privilege, high-impact memory corruption, and SSVC agrees the technical impact is 'total' - but SSVC also rates Exploitation as 'none' and Automatable as 'no', and EPSS is only 0.11% (1st percentile). There is no KEV listing and no public exploit identified at time of analysis. The most important nuance is that the 'high' impact is heavily gated by the trigger: the source diff (PR #937) shows the incorrect free only occurs when a match_data block previously used with PCRE2_COPY_MATCHED_SUBJECT is later reused via the JIT fast-path pcre2_jit_match, which did not release the copied subject and did not clear PCRE2_MD_COPIED_SUBJECT. This is a specific API-usage pattern the consuming application must exhibit, not an attacker-controllable condition - so while an incorrect/double free can in principle be steered toward corruption, most real deployments never hit the vulnerable path. Note also the CVSS AV:L: PCRE2 is a library, so the effective attack vector is inherited from the host application and could be remote if attacker-controlled subjects flow through this exact reuse pattern; verify against the specific consumer.

Exploit ScenarioDerived

An application links PCRE2 <10.48 and, for performance, reuses a single match_data block: it first calls pcre2_match with PCRE2_COPY_MATCHED_SUBJECT (heap-copying the subject), then reuses that same block with the JIT fast path pcre2_jit_match on a new subject. The stale PCRE2_MD_COPIED_SUBJECT state leads to an incorrect free of the copied subject buffer, corrupting heap allocator state and potentially escalating from a crash toward memory corruption. No public exploit code is identified and the pattern is uncommon, so practical exploitation depends entirely on the host application's PCRE2 usage.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.1% exploitation probability (EPSS)

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

Alert me

AnalysisAIv2 – Sep 16, 2026

An incorrect free in the PCRE2 JIT fast path (all versions before 10.48) can corrupt process memory when an application reuses a single match data block across a pcre2_match call made with the PCRE2_COPY_MATCHED_SUBJECT option and a subsequent pcre2_jit_match call against a JIT-compiled pattern, yielding high confidentiality, integrity, and availability impact on the host process. Exploitation requires local access with low privileges and depends on a specific, uncommon API sequence inside the PCRE2-consuming application rather than on attacker-controlled input, which sharply narrows realistic exposure; the assessed vector is CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H, CISA SSVC rates exploitation as none and automatable as no, no public exploit was identified at time of analysis, and EPSS is 0.11% (1st percentile). A vendor fix exists in PCRE2 10.48 (upstream PR #937), so the residual risk is low despite the total technical impact rating.

Earlier versions of this analysis (1)
v1 Sep 11, 2026 - 04:32 CVSS 7.4

Incorrect memory free (CWE-590) in PCRE2's JIT fast path allows heap corruption when match data previously used with PCRE2_COPY_MATCHED_SUBJECT is reused in a subsequent pcre2_jit_match() call. Affected versions are PCRE2 prior to 10.48. An attacker who can influence the sequence of PCRE2 API calls - for example, by triggering the vulnerable code path through a regex-consuming application - can potentially achieve memory corruption leading to code execution, data disclosure, or crash. No public exploit and no KEV listing have been identified at time of analysis.

RemediationAI

Vendor-released patch: upgrade to PCRE2 10.48 (release tag pcre2-10.48 at https://github.com/PCRE2Project/pcre2/releases/tag/pcre2-10.48, which contains the fix merged via pull request https://github.com/PCRE2Project/pcre2/pull/937); downstream distributions and language runtimes should track their packaged libpcre2 update, since third-party applications inherit the vulnerability through the shared library. For environments that cannot immediately upgrade, the most effective compensating control is to eliminate the triggering API sequence: ensure that no match data block created or last used with PCRE2_COPY_MATCHED_SUBJECT is subsequently passed to pcre2_jit_match - allocate a fresh match data block, or route those calls through pcre2_match instead, at the cost of losing the JIT fast-path speedup for that call. As a broader but heavier-handed option, rebuild PCRE2 with --disable-jit or stop calling pcre2_jit_compile, which removes the vulnerable code entirely but degrades regex performance, in some workloads substantially; disabling JIT across a shared system library also affects every consumer of that library, so it should be a last resort. Note that the trigger is a local, low-privilege code-path prerequisite inside the host application rather than a remotely invocable condition, and no public exploit was identified at time of analysis, so remediation can be scheduled with normal patch cadence rather than emergency response. Advisory references include https://nvd.nist.gov/vuln/detail/CVE-2026-89161 and https://vuldb.com/vuln/402343.

Affected VersionsENISA

pcre2 0 <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 is the widely embedded C regular-expression library used by PHP, Apache httpd, nginx, glib/GRegex, grep, and many other applications and languages. Its JIT compiler (pcre2_jit_compile) translates patterns into native machine code, and the JIT fast path entry point pcre2_jit_match is documented to ignore a set of unsupported option bits (historically PCRE2_ANCHORED, PCRE2_ENDANCHORED, and PCRE2_NO_JIT) because it bypasses the normal matching logic. The affected flow involves PCRE2_COPY_MATCHED_SUBJECT, which makes a match data block take its own private heap copy of the subject string and sets the internal PCRE2_MD_COPIED_SUBJECT flag so the buffer can later be released. Before the fix, when such a match data block was reused on the JIT fast path via pcre2_jit_match, the previously copied subject was not correctly released and the copied-subject bookkeeping was left inconsistent, producing an invalid free of a pointer that is not heap memory - the root cause class CWE-590, Free of Memory not on the Heap. The upstream patch (PR #937), incorporated in the pcre2-10.48 release, adds explicit handling in src/pcre2_jit_match_inc.h that frees the previously copied subject and clears the PCRE2_MD_COPIED_SUBJECT flag, updates the JIT documentation in doc/pcre2jit.3, doc/pcre2jit.html, and doc/pcre2.txt to list PCRE2_COPY_MATCHED_SUBJECT among the option bits the fast path ignores, and adds a regression test in src/pcre2test_inc.h covering the copy-then-JIT-match reuse sequence.

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

NVD PRIMARY 7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 7.0 HIGH

Library flaw with local host inheritance (AV:L) and low privilege (PR:L); AC:H because it fires only under a specific COPY_MATCHED_SUBJECT-then-JIT-reuse pattern; incorrect free can reach full memory corruption (C/I/A:H).

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:L/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/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 7.4 HIGH

Primary rating from NVD.

CVSS VectorNVD

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

Lifecycle Timeline

4
Analysis Updated
Sep 16, 2026 - 19:28 vuln.today
v2 - CVSS changed
CVSS changed
Sep 16, 2026 - 19:22 NVD
7.4 (HIGH) 7.8 (HIGH)
Patch available
Sep 11, 2026 - 05:16 EUVD
CVE Published
Sep 11, 2026 - 04:18 cve.org
HIGH 7.4

DescriptionNVD

In PCRE2 before 10.48, pcre2_jit_match mishandles a previously copied subject being passed in as a context. An incorrect free operation can occur.

Executive ViewAI

Why It Matters

A memory corruption vulnerability in the PCRE2 regular expression library (versions before 10.48) could allow an authenticated low-privileged local attacker to compromise the confidentiality, integrity, and availability of applications that use PCRE2 in a specific, uncommon API sequence. However, exploitation requires a precise sequence of API calls rather than attacker-controlled input, and no public exploit identified at time of analysis, so the realistic risk to most organizations is low. Vendor-released patch: PCRE2 10.48 is available and should be prioritized to eliminate residual risk.

Business Impact: Low
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.1%
Top 99% exploitable
Prevalence
Ubiquitous
PCRE2 regex library embedded across languages, servers, and countless applications
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment MSRC Vendor GitHub VulDB

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 HIGH
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Defer
Exploitation
None
System Exposure· derived
Small
Automatable
No
Human Impact
Low
Technical Impact
Total

Priority Score

39
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +39
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-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

CVE-2026-89160 MEDIUM
6.5 Sep 11

Out-of-bounds read in PCRE2 before version 10.48 can be triggered in pcre2_match() when the PCRE2_MATCH_INVALID_UTF opti

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