<?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>Wed, 30 Sep 2026 21:20:33 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-57147 — praisonai-platform: default JWT signing secret 'dev-secret-change-me' enables token forgery</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-57147</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; MervinPraison PraisonAI, MervinPraison praisonai-platform&lt;/p&gt;
&lt;p&gt;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&amp;#39;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.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; MervinPraison PraisonAI, MervinPraison praisonai-platform&lt;/p&gt;
&lt;p&gt;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&amp;#39;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.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-57147</guid>
    </item>
    <item>
      <title>GHSA-cwj8-7gp2-ggcw — praisonai-platform: default JWT signing secret 'dev-secret-change-me' enables token forgery</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-cwj8-7gp2-ggcw</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: praisonai-platform&lt;/p&gt;
&lt;p&gt;# praisonai-platform: default JWT signing secret `dev-secret-change-me`&lt;/p&gt;
&lt;p&gt;**Researcher:** Kai Aizen — SnailSploit (@SnailSploit), Adversarial &amp;amp; Offensive Security Research
**Target:** https://github.com/MervinPraison/PraisonAI&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;**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.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## TL;DR&lt;/p&gt;
&lt;p&gt;`praisonai_platform/services/auth_service.py` lines 25-37:&lt;/p&gt;
&lt;p&gt;```python
_DEFAULT_SECRET = &amp;#34;dev-secret-change-me&amp;#34;
JWT_SECRET = os.environ.get(&amp;#34;PLATFORM_JWT_SECRET&amp;#34;, _DEFAULT_SECRET)
JWT_ALGORITHM = &amp;#34;HS256&amp;#34;
JWT_TTL_SECONDS = int(os.environ.get(&amp;#34;PLATFORM_JWT_TTL&amp;#34;, str(30 * 24 * 3600)))&lt;/p&gt;
&lt;p&gt;if JWT_SECRET == _DEFAULT_SECRET and os.environ.get(&amp;#34;PLATFORM_ENV&amp;#34;, &amp;#34;dev&amp;#34;) != &amp;#34;dev&amp;#34;:
    raise RuntimeError(
        &amp;#34;PLATFORM_JWT_SECRET must be set to a strong random value in production. &amp;#34;
        &amp;#34;Set PLATFORM_ENV=dev to suppress this check during development.&amp;#34;
    )
```&lt;/p&gt;
&lt;p&gt;The guard at line 33 is meant to catch the &amp;#34;deployed to production with the default secret&amp;#34; failure mode. But it only fires when **both**:&lt;/p&gt;
&lt;p&gt;- 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 `&amp;#34;dev&amp;#34;`.&lt;/p&gt;
&lt;p&gt;If the operator…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: praisonai-platform&lt;/p&gt;
&lt;p&gt;# praisonai-platform: default JWT signing secret `dev-secret-change-me`&lt;/p&gt;
&lt;p&gt;**Researcher:** Kai Aizen — SnailSploit (@SnailSploit), Adversarial &amp;amp; Offensive Security Research
**Target:** https://github.com/MervinPraison/PraisonAI&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;**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.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## TL;DR&lt;/p&gt;
&lt;p&gt;`praisonai_platform/services/auth_service.py` lines 25-37:&lt;/p&gt;
&lt;p&gt;```python
_DEFAULT_SECRET = &amp;#34;dev-secret-change-me&amp;#34;
JWT_SECRET = os.environ.get(&amp;#34;PLATFORM_JWT_SECRET&amp;#34;, _DEFAULT_SECRET)
JWT_ALGORITHM = &amp;#34;HS256&amp;#34;
JWT_TTL_SECONDS = int(os.environ.get(&amp;#34;PLATFORM_JWT_TTL&amp;#34;, str(30 * 24 * 3600)))&lt;/p&gt;
&lt;p&gt;if JWT_SECRET == _DEFAULT_SECRET and os.environ.get(&amp;#34;PLATFORM_ENV&amp;#34;, &amp;#34;dev&amp;#34;) != &amp;#34;dev&amp;#34;:
    raise RuntimeError(
        &amp;#34;PLATFORM_JWT_SECRET must be set to a strong random value in production. &amp;#34;
        &amp;#34;Set PLATFORM_ENV=dev to suppress this check during development.&amp;#34;
    )
```&lt;/p&gt;
&lt;p&gt;The guard at line 33 is meant to catch the &amp;#34;deployed to production with the default secret&amp;#34; failure mode. But it only fires when **both**:&lt;/p&gt;
&lt;p&gt;- 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 `&amp;#34;dev&amp;#34;`.&lt;/p&gt;
&lt;p&gt;If the operator…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-cwj8-7gp2-ggcw</guid>
    </item>
  </channel>
</rss>
