CVE-2026-77421
JLine: ReDoS in Nano Editor Regex Search Mode
CVE-2026-77421 is a medium vulnerability (CVSS 6.5) in Jline Jline3, published September 23, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.43%, the 37th percentile. Fixed in org.jline:jline-builtins 4.3.1.
JLine is a Java library for handling console input. From 3.0.0 until 3.30.15 and 4.3.1, the JLine built-in nano editor's regex search mode passes a user-controlled search term from doSearch(String text) in builtins/src/main/java/org/jline/builtins/Nano.java to Java's backtracking regular expression engine without a timeout or backtracking bound. A nested-quantifier expression evaluated against non-matching buffer content can consume excessive CPU and indefinitely block the editor session thread, and remote multi-user deployments can lose a worker thread for each affected session. This issue is fixed in versions 3.30.15 and 4.3.1.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
6.5
JLine: ReDoS in Nano Editor Regex Search Mode
JLine is a Java library for handling console input. From 3.0.0 until 3.30.15 and 4.3.1, the JLine built-in nano editor's regex search mode passes a user-controlled search term from doSearch(String text) in builtins/src/main/java/org/jline/builtins/Nano.java to Java's backtracking regular expression engine without a timeout or backtracking bound. A nested-quantifier expression evaluated against non-matching buffer content can consume excessive CPU and indefinitely block the editor session thread, and remote multi-user deployments can lose a worker thread for each affected session. This issue is fixed in versions 3.30.15 and 4.3.1.
- Record
CVE-2026-77421- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-1333
- Updated
- 2026-11-02
EUVDEUVD-2026-85522
6.5
JLine is a Java library for handling console input. From 3.0.0 until 3.30.15 and 4.3.1, the JLine built-in nano editor's regex search mode passes a user-controlled search term from doSearch(String text) in builtins/src/main/java/org/jline/builtins/Nano.java to Java's backtracking regular expression engine without a timeout or backtracking bound. A nested-quantifier expression evaluated against non-matching buffer content can consume excessive CPU and indefinitely block the editor session thread, and remote multi-user deployments can lose a worker thread for each affected session. This issue is fixed in versions 3.30.15 and 4.3.1.
- Record
EUVD-2026-85522- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-ph9c-7hw9-vhhw
6.5
JLine: ReDoS in Nano Editor Regex Search Mode
Summary
When regex search mode is enabled in the JLine3 nano editor, the user-supplied
search term is compiled directly as a Java regular expression with no timeout or
backtracking bound. A crafted pattern such as (a+)+b can hang the editor session
thread at high CPU, causing a denial of service for that session.
Details
In builtins/src/main/java/org/jline/builtins/Nano.java, the search implementation
uses Pattern.LITERAL only when regex mode is disabled. When regex mode is enabled,
the search term is compiled as a raw Java regex:
Pattern pat = Pattern.compile(
searchTerm,
(searchCaseSensitive ? 0 : Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE)
| (searchRegexp ? 0 : Pattern.LITERAL));
This regex is then applied to buffer content. Because Java's regex engine is backtracking-based, nested-quantifier patterns can take exponential time on non-matching input.
Affected source location:
builtins/src/main/java/org/jline/builtins/Nano.javadoSearch(String text)
PoC
- Create a file containing a long run of
acharacters and open it in the JLine3nanoeditor. - Enable regex search mode with the editor's regex toggle.
- Start a search and enter the pattern
(a+)+b.
Expected result:
- The editor stops responding.
- The session thread consumes high CPU.
Reproduction environment:
- JLine3 on x86_64 Linux
- OpenJDK 25.0.2
Impact
This is a denial-of-service vulnerability caused by catastrophic regex backtracking.
Applications embedding org.jline:jline-builtins and exposing the nano editor are
impacted. In local use, the user can hang their own session. In remote multi-user
deployments, an attacker can occupy a server worker thread indefinitely.
Suggested Fix
The preferred fix for the current git head is to use a linear-time regex engine for regex search mode while preserving literal matching behavior when regex mode is off.
Suggested patch:
diff --git a/builtins/pom.xml b/builtins/pom.xml
--- a/builtins/pom.xml
+++ b/builtins/pom.xml
@@
<dependency>
+ <groupId>com.google.re2j</groupId>
+ <artifactId>re2j</artifactId>
+ <version>1.8</version>
+ </dependency>
+ <dependency>
<groupId>org.jline</groupId>
<artifactId>jline-reader</artifactId>
</dependency>
diff --git a/builtins/src/main/java/org/jline/builtins/Nano.java b/builtins/src/main/java/org/jline/builtins/Nano.java
--- a/builtins/src/main/java/org/jline/builtins/Nano.java
+++ b/builtins/src/main/java/org/jline/builtins/Nano.java
@@
-import java.util.regex.Pattern;
+import com.google.re2j.Pattern;
If a dependency change is not acceptable, a fallback mitigation is to reject dangerous regex constructs or execute regex matching with a strict timeout, but that is weaker than replacing the backtracking engine.
Credits
This issue was identified by Michał Majchrowicz and Marcin Wyczechowski, members of the AFINE Team.
- Record
GHSA-ph9c-7hw9-vhhw- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-1333
- Updated
- 2026-11-02
NVD
6.5
JLine is a Java library for handling console input. From 3.0.0 until 3.30.15 and 4.3.1, the JLine built-in nano editor's regex search mode passes a user-controlled search term from doSearch(String text) in builtins/src/main/java/org/jline/builtins/Nano.java to Java's backtracking regular expression engine without a timeout or backtracking bound. A nested-quantifier expression evaluated against non-matching buffer content can consume excessive CPU and indefinitely block the editor session thread, and remote multi-user deployments can lose a worker thread for each affected session. This issue is fixed in versions 3.30.15 and 4.3.1.
- Record
CVE-2026-77421- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-1333
- Updated
- 2026-11-02
OSV
6.5
JLine: ReDoS in Nano Editor Regex Search Mode
JLine is a Java library for handling console input. From 3.0.0 until 3.30.15 and 4.3.1, the JLine built-in nano editor's regex search mode passes a user-controlled search term from doSearch(String text) in builtins/src/main/java/org/jline/builtins/Nano.java to Java's backtracking regular expression engine without a timeout or backtracking bound. A nested-quantifier expression evaluated against non-matching buffer content can consume excessive CPU and indefinitely block the editor session thread, and remote multi-user deployments can lose a worker thread for each affected session. This issue is fixed in versions 3.30.15 and 4.3.1.
- Record
CVE-2026-77421- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-1333
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-77421
6.5
JLine is a Java library for handling console input. From 3.0.0 until 3.30.15 and 4.3.1, the JLine built-in nano editor's regex search mode passes a user-controlled search term from doSearch(String text) in builtins/src/main/java/org/jline/builtins/Nano.java to Java's backtracking regular expression engine without a timeout or backtracking bound. A nested-quantifier expression evaluated against non-matching buffer content can consume excessive CPU and indefinitely block the editor session thread, and remote multi-user deployments can lose a worker thread for each affected session. This issue is fixed in versions 3.30.15 and 4.3.1.
- Record
DEBIAN-CVE-2026-77421- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVGHSA-ph9c-7hw9-vhhw
6.5
JLine: ReDoS in Nano Editor Regex Search Mode
Summary
When regex search mode is enabled in the JLine3 nano editor, the user-supplied
search term is compiled directly as a Java regular expression with no timeout or
backtracking bound. A crafted pattern such as (a+)+b can hang the editor session
thread at high CPU, causing a denial of service for that session.
Details
In builtins/src/main/java/org/jline/builtins/Nano.java, the search implementation
uses Pattern.LITERAL only when regex mode is disabled. When regex mode is enabled,
the search term is compiled as a raw Java regex:
Pattern pat = Pattern.compile(
searchTerm,
(searchCaseSensitive ? 0 : Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE)
| (searchRegexp ? 0 : Pattern.LITERAL));
This regex is then applied to buffer content. Because Java's regex engine is backtracking-based, nested-quantifier patterns can take exponential time on non-matching input.
Affected source location:
builtins/src/main/java/org/jline/builtins/Nano.javadoSearch(String text)
PoC
- Create a file containing a long run of
acharacters and open it in the JLine3nanoeditor. - Enable regex search mode with the editor's regex toggle.
- Start a search and enter the pattern
(a+)+b.
Expected result:
- The editor stops responding.
- The session thread consumes high CPU.
Reproduction environment:
- JLine3 on x86_64 Linux
- OpenJDK 25.0.2
Impact
This is a denial-of-service vulnerability caused by catastrophic regex backtracking.
Applications embedding org.jline:jline-builtins and exposing the nano editor are
impacted. In local use, the user can hang their own session. In remote multi-user
deployments, an attacker can occupy a server worker thread indefinitely.
Suggested Fix
The preferred fix for the current git head is to use a linear-time regex engine for regex search mode while preserving literal matching behavior when regex mode is off.
Suggested patch:
diff --git a/builtins/pom.xml b/builtins/pom.xml
--- a/builtins/pom.xml
+++ b/builtins/pom.xml
@@
<dependency>
+ <groupId>com.google.re2j</groupId>
+ <artifactId>re2j</artifactId>
+ <version>1.8</version>
+ </dependency>
+ <dependency>
<groupId>org.jline</groupId>
<artifactId>jline-reader</artifactId>
</dependency>
diff --git a/builtins/src/main/java/org/jline/builtins/Nano.java b/builtins/src/main/java/org/jline/builtins/Nano.java
--- a/builtins/src/main/java/org/jline/builtins/Nano.java
+++ b/builtins/src/main/java/org/jline/builtins/Nano.java
@@
-import java.util.regex.Pattern;
+import com.google.re2j.Pattern;
If a dependency change is not acceptable, a fallback mitigation is to reject dangerous regex constructs or execute regex matching with a strict timeout, but that is weaker than replacing the backtracking engine.
Credits
This issue was identified by Michał Majchrowicz and Marcin Wyczechowski, members of the AFINE Team.
- Record
GHSA-ph9c-7hw9-vhhw- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-1333
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-77421
6.5
JLine is a Java library for handling console input. From 3.0.0 until 3.30.15 and 4.3.1, the JLine built-in nano editor's regex search mode passes a user-controlled search term from doSearch(String text) in builtins/src/main/java/org/jline/builtins/Nano.java to Java's backtracking regular expression engine without a timeout or backtracking bound. A nested-quantifier expression evaluated against non-matching buffer content can consume excessive CPU and indefinitely block the editor session thread, and remote multi-user deployments can lose a worker thread for each affected session. This issue is fixed in versions 3.30.15 and 4.3.1.
- Record
UBUNTU-CVE-2026-77421- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
org.jline:jline-builtinsMaven |
4.0.0 up to 4.3.1 | 4.3.1 |
org.jline:jline-builtinsMaven |
3.0.0 up to 3.30.15 | 3.30.15 |
jline3Debian:12 |
All versions, plus listed versions 3.3.1-33.3.1-43.3.1-5 |
None known |
jline3Debian:13 |
All versions, plus listed versions 3.3.1-43.3.1-5 |
None known |
jline3Debian:14 |
All versions, plus listed versions 3.3.1-43.3.1-5 |
None known |
org.jline:jline-builtinsMaven |
4.0.0 up to 4.3.1, plus listed versions 4.0.104.0.114.0.124.0.134.0.14 Show 17 moreShow less4.0.154.0.164.0.24.0.34.0.44.0.54.0.64.0.74.0.84.0.94.1.04.1.14.1.24.1.34.2.04.2.14.3.0 |
4.3.1 |
org.jline:jline-builtinsMaven |
3.0.0 up to 3.30.15, plus listed versions 3.10.03.11.03.12.03.12.13.13.0 Show 45 moreShow less3.13.13.13.23.13.33.14.03.14.13.15.03.16.03.17.03.17.13.18.03.19.03.2.03.20.03.21.03.22.03.23.03.24.03.24.13.25.03.25.13.26.03.26.13.26.23.26.33.27.03.27.13.28.03.29.03.3.03.3.13.30.03.30.13.30.103.30.113.30.123.30.133.30.143.30.23.30.33.30.43.30.53.30.63.30.73.30.83.30.9 |
3.30.15 |
jlineUbuntu:14.04:LTS |
All versions, plus listed versions 1.0-2 |
None known |
jline2Ubuntu:14.04:LTS |
All versions, plus listed versions 2.11-12.11-2 |
None known |
jlineUbuntu:16.04:LTS |
All versions, plus listed versions 1.0-2 |
None known |
Show 17 moreShow less
| Package | Affected | Fixed |
|---|---|---|
jline2Ubuntu:16.04:LTS |
All versions, plus listed versions 2.11-4 |
None known |
jlineUbuntu:18.04:LTS |
All versions, plus listed versions 1.0-2 |
None known |
jline2Ubuntu:18.04:LTS |
All versions, plus listed versions 2.11-42.12.1-12.14.6-1 |
None known |
jlineUbuntu:20.04:LTS |
All versions, plus listed versions 1.0-2 |
None known |
jline2Ubuntu:20.04:LTS |
All versions, plus listed versions 2.14.6-3 |
None known |
jlineUbuntu:22.04:LTS |
All versions, plus listed versions 1.0-3 |
None known |
jline2Ubuntu:22.04:LTS |
All versions, plus listed versions 2.14.6-4 |
None known |
jline3Ubuntu:22.04:LTS |
All versions, plus listed versions 3.3.1-2 |
None known |
jlineUbuntu:24.04:LTS |
All versions, plus listed versions 1.0-3 |
None known |
jline2Ubuntu:24.04:LTS |
All versions, plus listed versions 2.14.6-5 |
None known |
jline3Ubuntu:24.04:LTS |
All versions, plus listed versions 3.3.1-33.3.1-3ubuntu1 |
None known |
jlineUbuntu:26.10 |
All versions, plus listed versions 1.0-3build1 |
None known |
jline2Ubuntu:26.10 |
All versions, plus listed versions 2.14.6-6 |
None known |
jline3Ubuntu:26.10 |
All versions, plus listed versions 3.3.1-4build13.3.1-5 |
None known |
jlineUbuntu:26.04:LTS |
All versions, plus listed versions 1.0-31.0-3build1 |
None known |
jline2Ubuntu:26.04:LTS |
All versions, plus listed versions 2.14.6-6 |
None known |
jline3Ubuntu:26.04:LTS |
All versions, plus listed versions 3.3.1-43.3.1-4build1 |
None known |
History
| When | Changed | Sources |
|---|---|---|
| 2026-11-02 | created | CVE List, EUVD, GitHub Advisories, NVD, OSV |
References
github.com/jline/jline3/security/advisories/GHSA-ph9c-7hw9-vhhw
github.com/jline/jline3/pull/2012
github.com/jline/jline3/pull/2018
github.com/jline/jline3/commit/1d5fc3099e77938b971e197211cad2d4fbb17541
github.com/jline/jline3/commit/341ee69ccc57b7733c1b40d6993219b64b3206ae
github.com/jline/jline3/releases/tag/4.3.1
Show 8 moreShow less
github.com/jline/jline3/releases/tag/jline-3.30.15
github.com/advisories/GHSA-ph9c-7hw9-vhhw
github.com/CVEProject/cvelistV5/tree/main/cves/2026/77xxx/CVE-2026-77421.json
nvd.nist.gov/vuln/detail/CVE-2026-77421
security-tracker.debian.org/tracker/CVE-2026-77421
github.com/jline/jline3
ubuntu.com/security/CVE-2026-77421
cve.org/CVERecord?id=CVE-2026-77421
Left out here: 13 versions. The JSON record has them.