<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Thu, 01 Oct 2026 15:58:16 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-102270 — PyJWT: ReDoS vulnerability when calling the `is_pem_format` function.</title>
      <link>https://db.gcve.eu/vuln/cve-2026-102270</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; jpadilla pyjwt&lt;/p&gt;
&lt;p&gt;PyJWT is a Python implementation of JSON Web Token standards. Prior to 2.14.0, PyJWT is_pem_format is affected because lazy PEM regular expression backtracks extensively. This occurs when a certificate-like input contains repeated BEGIN markers without a matching END marker. As a result, is_pem_format performs unbounded backtracking while searching for a PEM end marker. Consequently, an attacker can cause intensive CPU consumption. This issue is fixed in version 2.14.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; jpadilla pyjwt&lt;/p&gt;
&lt;p&gt;PyJWT is a Python implementation of JSON Web Token standards. Prior to 2.14.0, PyJWT is_pem_format is affected because lazy PEM regular expression backtracks extensively. This occurs when a certificate-like input contains repeated BEGIN markers without a matching END marker. As a result, is_pem_format performs unbounded backtracking while searching for a PEM end marker. Consequently, an attacker can cause intensive CPU consumption. This issue is fixed in version 2.14.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/cve-2026-102270</guid>
    </item>
    <item>
      <title>GHSA-jwrc-g2q2-pq5p — PyJWT: ReDoS vulnerability when calling the `is_pem_format` function.</title>
      <link>https://db.gcve.eu/vuln/ghsa-jwrc-g2q2-pq5p</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pyjwt&lt;/p&gt;
&lt;p&gt;### Summary
There is a Re-DoS vulnerability in the `is_pem_format` function which results in a intesive CPU usage if an attacker is been able to provide a custom certificate.&lt;/p&gt;
&lt;p&gt;### Details
The problem is that the lazy quantifier `.+?` will always first try to match as little as possible until it finds a `---- END`. Normally this means the complexity of this should be O(N). However, by providing an input which consists only of `----BEGIN CERTIFICATE-----` lines and no `---- END` line, the regex algorithm will first try to match the first line and then, with the lazy quantifier, all the lines until the end O(N), which then fails since it is unable to find a `---- END` line. It will then jump to the next line, resulting in N re-scans of the whole string, which means the complexity basically results in O(N²).&lt;/p&gt;
&lt;p&gt;### PoC
```python
import time
import re&lt;/p&gt;
&lt;p&gt;BEGIN_LINE = b&amp;#34;-----BEGIN CERTIFICATE-----\n&amp;#34;&lt;/p&gt;
&lt;p&gt;_PEMS = {
    b&amp;#34;CERTIFICATE&amp;#34;,
    b&amp;#34;TRUSTED CERTIFICATE&amp;#34;,
    b&amp;#34;PRIVATE KEY&amp;#34;,
    b&amp;#34;PUBLIC KEY&amp;#34;,
    b&amp;#34;ENCRYPTED PRIVATE KEY&amp;#34;,
    b&amp;#34;OPENSSH PRIVATE KEY&amp;#34;,
    b&amp;#34;DSA PRIVATE KEY&amp;#34;,
    b&amp;#34;RSA PRIVATE KEY&amp;#34;,
    b&amp;#34;RSA PUBLIC KEY&amp;#34;,
    b&amp;#34;EC PRIVATE KEY&amp;#34;,
    b&amp;#34;DH PARAMETERS&amp;#34;,
    b&amp;#34;NEW CERTIFICATE REQUEST&amp;#34;,
    b&amp;#34;CERTIFICATE REQUEST&amp;#34;,
    b&amp;#34;SSH2 PUBLIC KEY&amp;#34;,
    b&amp;#34;SSH2 ENCRYPTED PRIVATE KEY&amp;#34;,
    b&amp;#34;X509 CRL&amp;#34;,
}&lt;/p&gt;
&lt;p&gt;_PEM_RE = re.compile(
    b&amp;#34;----[- ]BEGIN (&amp;#34;
    + b&amp;#34;|&amp;#34;.join(_PEMS)
    + b&amp;#34;&amp;#34;&amp;#34;)[- ]----\r?
.+?\r?
----[- ]END \\1[- ]----\r?\n?&amp;#34;&amp;#34;&amp;#34;,
    re.DOTALL,
)&lt;/p&gt;
&lt;p&gt;def is_pem_format(key: bytes)…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pyjwt&lt;/p&gt;
&lt;p&gt;### Summary
There is a Re-DoS vulnerability in the `is_pem_format` function which results in a intesive CPU usage if an attacker is been able to provide a custom certificate.&lt;/p&gt;
&lt;p&gt;### Details
The problem is that the lazy quantifier `.+?` will always first try to match as little as possible until it finds a `---- END`. Normally this means the complexity of this should be O(N). However, by providing an input which consists only of `----BEGIN CERTIFICATE-----` lines and no `---- END` line, the regex algorithm will first try to match the first line and then, with the lazy quantifier, all the lines until the end O(N), which then fails since it is unable to find a `---- END` line. It will then jump to the next line, resulting in N re-scans of the whole string, which means the complexity basically results in O(N²).&lt;/p&gt;
&lt;p&gt;### PoC
```python
import time
import re&lt;/p&gt;
&lt;p&gt;BEGIN_LINE = b&amp;#34;-----BEGIN CERTIFICATE-----\n&amp;#34;&lt;/p&gt;
&lt;p&gt;_PEMS = {
    b&amp;#34;CERTIFICATE&amp;#34;,
    b&amp;#34;TRUSTED CERTIFICATE&amp;#34;,
    b&amp;#34;PRIVATE KEY&amp;#34;,
    b&amp;#34;PUBLIC KEY&amp;#34;,
    b&amp;#34;ENCRYPTED PRIVATE KEY&amp;#34;,
    b&amp;#34;OPENSSH PRIVATE KEY&amp;#34;,
    b&amp;#34;DSA PRIVATE KEY&amp;#34;,
    b&amp;#34;RSA PRIVATE KEY&amp;#34;,
    b&amp;#34;RSA PUBLIC KEY&amp;#34;,
    b&amp;#34;EC PRIVATE KEY&amp;#34;,
    b&amp;#34;DH PARAMETERS&amp;#34;,
    b&amp;#34;NEW CERTIFICATE REQUEST&amp;#34;,
    b&amp;#34;CERTIFICATE REQUEST&amp;#34;,
    b&amp;#34;SSH2 PUBLIC KEY&amp;#34;,
    b&amp;#34;SSH2 ENCRYPTED PRIVATE KEY&amp;#34;,
    b&amp;#34;X509 CRL&amp;#34;,
}&lt;/p&gt;
&lt;p&gt;_PEM_RE = re.compile(
    b&amp;#34;----[- ]BEGIN (&amp;#34;
    + b&amp;#34;|&amp;#34;.join(_PEMS)
    + b&amp;#34;&amp;#34;&amp;#34;)[- ]----\r?
.+?\r?
----[- ]END \\1[- ]----\r?\n?&amp;#34;&amp;#34;&amp;#34;,
    re.DOTALL,
)&lt;/p&gt;
&lt;p&gt;def is_pem_format(key: bytes)…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-jwrc-g2q2-pq5p</guid>
    </item>
  </channel>
</rss>
