<?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://vulnerability.circl.lu</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>Sun, 04 Oct 2026 18:24:07 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-74878 — openssl_encrypt before 1.4.0 TOTP Rate Limiter Bypass</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-74878</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; jahlives openssl_encrypt&lt;/p&gt;
&lt;p&gt;openssl_encrypt versions before 1.4.0 use an in-memory rate limiter for TOTP brute-force protection that is not shared across workers and is lost on server restart. Attackers can distribute authentication attempts across multiple server instances or retry immediately after a restart to bypass rate limiting protections.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; jahlives openssl_encrypt&lt;/p&gt;
&lt;p&gt;openssl_encrypt versions before 1.4.0 use an in-memory rate limiter for TOTP brute-force protection that is not shared across workers and is lost on server restart. Attackers can distribute authentication attempts across multiple server instances or retry immediately after a restart to bypass rate limiting protections.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-74878</guid>
    </item>
    <item>
      <title>GHSA-h45m-mgcp-q388 — openssl-encrypt: TOTP rate limiter is in-memory only — not shared across workers, lost on restart</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-h45m-mgcp-q388</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: openssl-encrypt&lt;/p&gt;
&lt;p&gt;## Severity: HIGH&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The TOTP brute-force rate limiter in `openssl_encrypt_server/modules/pepper/totp.py` at **lines 47-98** uses an in-memory `defaultdict(list)` as a class variable.&lt;/p&gt;
&lt;p&gt;### Affected Code&lt;/p&gt;
&lt;p&gt;```python
class TOTPRateLimiter:
    def __init__(self, ...):
        self.attempts: Dict[str, List[datetime]] = defaultdict(list)
        self.lockouts: Dict[str, datetime] = {}&lt;/p&gt;
&lt;p&gt;class TOTPService:
    _rate_limiter = TOTPRateLimiter()  # Class variable, in-memory only
```&lt;/p&gt;
&lt;p&gt;### Impact&lt;/p&gt;
&lt;p&gt;1. Rate limit state is **not shared** across multiple server instances/workers — an attacker can distribute attempts
2. All rate limit state is **lost on server restart** — allows immediate retry
3. In multi-worker deployments, each worker has independent rate limit state&lt;/p&gt;
&lt;p&gt;### Recommended Fix&lt;/p&gt;
&lt;p&gt;- Use Redis or the database for rate limit state storage
- Or use a shared-memory approach for multi-worker deployments
- At minimum, persist lockout state to survive restarts&lt;/p&gt;
&lt;p&gt;### Fix&lt;/p&gt;
&lt;p&gt;Fixed in commit `2749bc0` on branch `releases/1.4.x` — added abstract RateLimitBackend with InMemoryBackend and DatabaseBackend implementations; defaults to DatabaseBackend when DB available.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: openssl-encrypt&lt;/p&gt;
&lt;p&gt;## Severity: HIGH&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The TOTP brute-force rate limiter in `openssl_encrypt_server/modules/pepper/totp.py` at **lines 47-98** uses an in-memory `defaultdict(list)` as a class variable.&lt;/p&gt;
&lt;p&gt;### Affected Code&lt;/p&gt;
&lt;p&gt;```python
class TOTPRateLimiter:
    def __init__(self, ...):
        self.attempts: Dict[str, List[datetime]] = defaultdict(list)
        self.lockouts: Dict[str, datetime] = {}&lt;/p&gt;
&lt;p&gt;class TOTPService:
    _rate_limiter = TOTPRateLimiter()  # Class variable, in-memory only
```&lt;/p&gt;
&lt;p&gt;### Impact&lt;/p&gt;
&lt;p&gt;1. Rate limit state is **not shared** across multiple server instances/workers — an attacker can distribute attempts
2. All rate limit state is **lost on server restart** — allows immediate retry
3. In multi-worker deployments, each worker has independent rate limit state&lt;/p&gt;
&lt;p&gt;### Recommended Fix&lt;/p&gt;
&lt;p&gt;- Use Redis or the database for rate limit state storage
- Or use a shared-memory approach for multi-worker deployments
- At minimum, persist lockout state to survive restarts&lt;/p&gt;
&lt;p&gt;### Fix&lt;/p&gt;
&lt;p&gt;Fixed in commit `2749bc0` on branch `releases/1.4.x` — added abstract RateLimitBackend with InMemoryBackend and DatabaseBackend implementations; defaults to DatabaseBackend when DB available.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-h45m-mgcp-q388</guid>
    </item>
  </channel>
</rss>
