Skip to main content

PCRE2 CVE-2026-103111

| EUVDEUVD-2026-89608 HIGH
Out-of-bounds Write (CWE-787)
2026-09-30 mitre GHSA-mq4r-p73m-gphj
7.6
CVSS 3.1 · Vendor: mitre
View

Attack ChainAIDerived

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

  1. Access
    Access app accepting user-supplied regex
  2. Delivery
    Submit crafted malicious pattern
  3. Exploit
    PCRE2 JIT compiles/executes it
  4. Execution
    Trigger out-of-bounds write with arbitrary data
  5. Persist
    Corrupt process memory
  6. Impact
    Crash or hijack control flow

Vulnerability Assessment

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

2 techniques across 2 tactics: Execution, Privilege Escalation

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

Exploitation Conditions

Exploitation requires two specific conditions stated in the advisory: (1) the regular expression pattern must be attacker-controlled - i.e., the consuming application must accept and compile untrusted, user-supplied regex rather than static developer-defined patterns; and (2) the application must use PCRE2's JIT (just-in-time) compilation API in a certain manner. Both must hold simultaneously. This significantly limits real-world exposure: the vast majority of PCRE2 integrations compile trusted, fixed patterns and never route untrusted input into the JIT pattern-compilation path, so default library presence alone does not imply exploitability. Only affects versions before 10.49; upgrading remediates.

Impact

This is a real but conditionally-gated memory-corruption flaw (CWE-787 out-of-bounds write with arbitrary data) in PCRE2, a ubiquitously-deployed regular-expression library embedded in PHP, Nginx, Apache HTTPD, Git, and countless language runtimes and tools. The vendor CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:L, 7.6) rates it network-reachable with low attack complexity and low privileges, driven by an arbitrary-data OOB write (I:H). However, the description explicitly bounds exploitation to two co-occurring conditions: the attacker must control the regular expression itself, AND the application must use PCRE2's JIT API in a certain way. This materially raises real-world complexity - most applications compile developer-defined, not attacker-supplied, regexes and do not expose the JIT compilation path to untrusted pattern input, so the practical attack surface is far narrower than the library's enormous install base would suggest. No EPSS score, no CISA KEV listing, and no public exploit are present in the input, so there is no signal of active or imminent exploitation; SSVC data was not provided. Net: high-value target library and arbitrary-data write make this worth prioritizing where the attacker-controlled-regex + JIT precondition genuinely exists, but for the overwhelming majority of PCRE2 consumers this is a low-real-risk issue despite the CWE-787 classification. Note the AC:L rating conflicts with the two-condition precondition in the description - an argument can be made for AC:H.

Exploit ScenarioDerived

An application (e.g., a search service, log-query tool, or WAF rule tester) lets an untrusted user submit a regular expression that is then compiled and executed via PCRE2's JIT compiler. The attacker crafts a malicious pattern that, under the specific vulnerable JIT API usage, triggers an out-of-bounds write of attacker-influenced data, corrupting adjacent memory to crash the process or potentially steer execution. No public exploit code is identified at time of analysis.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.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 30, 2026

Out-of-bounds write in PCRE2, the regular-expression library embedded in PHP, nginx, Apache httpd, Git and numerous language runtimes, allows memory corruption when a consuming application compiles an attacker-controlled pattern through the JIT compilation API in the manner described by the vendor advisory. Only releases before 10.49 are affected, and exploitation is gated on two conditions holding at once: the application must accept untrusted, user-supplied regexes and must route them through PCRE2's JIT path, so default library presence alone does not imply exploitability. The assessed vector is network-reachable with high attack complexity and no privileges required (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:L, base 7.6); no public exploit code and no CISA KEV entry were identified at time of analysis. A vendor patch is available per the advisory, so upgrading to a fixed release remediates.

RemediationAI

Upgrade PCRE2 to 10.49 or later, which is the first release outside the affected 'before 10.49' range and the remediation path identified by the advisory; the vendor patch is available, and the upstream GitHub security advisory GHSA-r9hj-j2rw-4q3m (https://github.com/PCRE2Project/pcre2/security/advisories/GHSA-r9hj-j2rw-4q3m) should be consulted for the definitive fixed-version statement. Because PCRE2 is frequently statically linked or vendored, patching the standalone library is often insufficient: rebuild and relink every application that ships its own copy (PHP builds, nginx modules, Apache httpd, Git, language runtimes and their packaged extensions) and confirm the embedded version actually reports 10.49 or newer. If immediate upgrade is not feasible, the highest-value compensating control is to stop routing untrusted input into JIT pattern compilation - do not call the JIT compile API on user-supplied patterns, keep JIT enabled only for trusted, developer-defined patterns, or disable JIT entirely for the affected code path, accepting the resulting match-performance regression on hot paths. As a secondary control with the trade-off of reduced application functionality, reject or strictly validate externally supplied regular expressions (length, grammar, character-class restrictions) or restrict the feature to trusted roles, since both the attacker-controlled pattern and the specific JIT API usage must hold simultaneously for exploitation. Monitor the upstream advisory for any backported fixes in distributions still carrying PCRE2 10.4x builds.

Affected VersionsENISA

pcre2 0 <10.49

Affected Packages

euvd pcre2 fix: 10.49

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 Perl-compatible regular-expression engine; the CPE cpe:2.3:a:pcre:pcre2:*:*:*:*:*:*:*:* with the EUVD range 'pcre2 0 <10.49' scopes the flaw to every release before 10.49. The root cause class is CWE-787 (out-of-bounds write): under specific JIT API usage, a pattern that the attacker controls causes the JIT compiler to write past the end of an allocated buffer, and the advisory characterizes the written data as arbitrary, meaning the contents are influenced rather than a fixed constant. This matters because PCRE2's JIT translates pattern bytecode into native machine code, so a mis-sized or mis-tracked JIT buffer can corrupt adjacent heap structures, producing integrity and availability impact (C:L/I:H/A:L in the assessed vector) and, depending on allocator layout and platform mitigations, a pathway toward code execution. The published NVD-style vector (AV:N/AC:L/PR:L/UI:N) and the assessed vector (AV:N/AC:H/PR:N/UI:N) differ on privilege requirements and complexity: the independent assessment treats the two exploitation prerequisites - attacker-controlled pattern plus a specific JIT compilation usage in the host application - as an attack-complexity gate (AC:H) rather than an authentication gate. In practice most PCRE2 integrations compile trusted, developer-defined patterns and never pass untrusted input into the JIT pattern-compilation path, which is why the vulnerability is real but conditionally gated rather than universally reachable.

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

Vendor (mitre) PRIMARY 7.6 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:L
vuln.today AI 7.0 HIGH

AC:H because exploitation needs both attacker-controlled regex and specific JIT API usage; PR:N as the regex may arrive via an unauthenticated feature; I:H reflects the arbitrary-data OOB write, with lower C/A impact.

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

Primary rating from Vendor (mitre).

CVSS VectorVendor: mitre

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

Lifecycle Timeline

2
Patch available
Sep 30, 2026 - 05:01 EUVD
CVE Published
Sep 30, 2026 - 04:13 cve.org
HIGH 7.6

DescriptionCVE.org

PCRE2 before 10.49, when there is an attacker-controlled regular expression and certain JIT API usage, allows an out-of-bounds write with arbitrary data.

Technical POC Analysis

CWE-787 out-of-bounds write in PCRE2's JIT, in the SLJIT stack-management code generated into JIT-compiled matching (the shared stack-resize stub reached from allocatestack()).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

CVE-2026-103111 is a high-severity memory-corruption flaw in PCRE2, the regex engine embedded in PHP, nginx, Apache httpd, Git and numerous language runtimes, putting a broad slice of the organization's web, application and developer tooling estate in scope for version review. It is unauthenticated and network-reachable, but exploitation is gated on two conditions holding simultaneously: the application must accept user-supplied regular expressions and must route them through PCRE2's JIT compiler, so only a narrow subset of deployments is realistically exposed. Leadership should treat this as a multi-layer patching and rebuild exercise rather than a single-product update, since the vulnerable library is inherited indirectly through many components and container images.

Business Impact: Medium
Compensating Controls

Apply vendor patch. Until patched, disable or avoid PCRE2 JIT compilation for untrusted patterns and do not accept user-supplied regular expressions from untrusted sources.

Threat Intelligence Overview

EPSS Score
0.2%
Top 90% exploitable
Prevalence
Ubiquitous
core regex library embedded in PHP, Nginx, Apache, Git, and many language runtimes
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment MSRC Vendor CIRCL 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.2%
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
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.

Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.

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-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

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