<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://vulnerability.circl.lu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-09-30T21:20:33.748304+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@circl.lu</email>
  </author>
  <link href="https://vulnerability.circl.lu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/cve-2026-57147</id>
    <title>CVE-2026-57147 — praisonai-platform: default JWT signing secret 'dev-secret-change-me' enables token forgery</title>
    <updated>2026-09-30T21:20:34.486930+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> MervinPraison PraisonAI, MervinPraison praisonai-platform</p>
<p>PraisonAI is a multi-agent teams system. Prior to 0.1.6, praisonai_platform/services/auth_service.py assigns the public dev-secret-change-me value to JWT_SECRET when PLATFORM_JWT_SECRET is unset, and its production guard does not run when PLATFORM_ENV is also unset because that setting defaults to dev. A remote unauthenticated attacker can mint an HS256 token with an arbitrary sub and email, and the platform's AuthService._verify_token() and get_current_user dependency accept the forged identity for protected API routes. This vulnerability is fixed in praisonai-platform 0.1.6.</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/cve-2026-57147"/>
  </entry>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/ghsa-cwj8-7gp2-ggcw</id>
    <title>GHSA-cwj8-7gp2-ggcw — praisonai-platform: default JWT signing secret 'dev-secret-change-me' enables token forgery</title>
    <updated>2026-09-30T21:20:34.487081+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: praisonai-platform</p>
<p># praisonai-platform: default JWT signing secret `dev-secret-change-me`</p>
<p>**Researcher:** Kai Aizen — SnailSploit (@SnailSploit), Adversarial &amp; Offensive Security Research
**Target:** https://github.com/MervinPraison/PraisonAI</p>
<p>---</p>
<p>**Package:** `praisonai-platform` on PyPI
**Latest version (and version tested):** `0.1.4`, current as of 2026-06-01.
**File:** `praisonai_platform/services/auth_service.py` (sha256 `cc29d43c5412da2c73c818859b8d8b146587842999b777336017ab9d9e509258`).
**Weakness:** CWE-798 Use of Hardcoded Credentials + CWE-1188 Insecure Default Initialization of Resource.</p>
<p>---</p>
<p>## TL;DR</p>
<p>`praisonai_platform/services/auth_service.py` lines 25-37:</p>
<p>```python
_DEFAULT_SECRET = "dev-secret-change-me"
JWT_SECRET = os.environ.get("PLATFORM_JWT_SECRET", _DEFAULT_SECRET)
JWT_ALGORITHM = "HS256"
JWT_TTL_SECONDS = int(os.environ.get("PLATFORM_JWT_TTL", str(30 * 24 * 3600)))</p>
<p>if JWT_SECRET == _DEFAULT_SECRET and os.environ.get("PLATFORM_ENV", "dev") != "dev":
    raise RuntimeError(
        "PLATFORM_JWT_SECRET must be set to a strong random value in production. "
        "Set PLATFORM_ENV=dev to suppress this check during development."
    )
```</p>
<p>The guard at line 33 is meant to catch the "deployed to production with the default secret" failure mode. But it only fires when **both**:</p>
<p>- the operator left `PLATFORM_JWT_SECRET` unset (so `JWT_SECRET` is the default literal), **and**
- the operator explicitly set `PLATFORM_ENV` to something other than `"dev"`.</p>
<p>If the operator…</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/ghsa-cwj8-7gp2-ggcw"/>
  </entry>
</feed>
