Skip to content
Heist/ feed
Back to feed
Critical

praisonai-platform: JWT signing key defaults to hardcoded "dev-secret-change-me", allowing token forgery for any user when PLATFORM_ENV is unset

Type: advisorySources: OSV

PraisonAI Platform is the platform layer for the PraisonAI multi-agent teams system. Versions prior to 0.1.4 have an insecure default cryptographic key. The JWT signing secret defaults to the hardcoded literal `"dev-secret-change-me"` when `PLATFORM_JWT_SECRET` is unset. A safety check exists but only fires when `PLATFORM_ENV != "dev"`; the default value of `PLATFORM_ENV` is `"dev"`, so the check is silently bypassed in any deployment that does not explicitly opt out. The attacker reads the literal from this public source file, mints a JWT with arbitrary `sub` and `email` claims, and authenticates as any existing user (including workspace owners and admins). PraisonAI Platform version 0.1.4 patches the issue.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-47410
Confirmed fixed CVEs
Not specified
Updated in this feed
2 Nov 2026, 16:59 UTC · Revision 1

Source evidence

praisonai-platform: JWT signing key defaults to hardcoded "dev-secret-change-me", allowing token forgery for any user when PLATFORM_ENV is unset

core-osv · Original source

Published 21 Jul 2026, 16:55 UTC

PraisonAI Platform is the platform layer for the PraisonAI multi-agent teams system. Versions prior to 0.1.4 have an insecure default cryptographic key. The JWT signing secret defaults to the hardcoded literal `"dev-secret-change-me"` when `PLATFORM_JWT_SECRET` is unset. A safety check exists but only fires when `PLATFORM_ENV != "dev"`; the default value of `PLATFORM_ENV` is `"dev"`, so the check is silently bypassed in any deployment that does not explicitly opt out. The attacker reads the literal from this public source file, mints a JWT with arbitrary `sub` and `email` claims, and authenticates as any existing user (including workspace owners and admins). PraisonAI Platform version 0.1.4 patches the issue.

osv:CVE-2026-47410
Complete source record
{
  "id": "85c2b81e02a3e9ac7ee7b0ff6ac52982e370c05d2412a9dcbf60d77066ff37fb",
  "url": "https://osv.dev/vulnerability/CVE-2026-47410",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "praisonai-platform: JWT signing key defaults to hardcoded \"dev-secret-change-me\", allowing token forgery for any user when PLATFORM_ENV is unset",
    "summary": "PraisonAI Platform is the platform layer for the PraisonAI multi-agent teams system. Versions prior to 0.1.4 have an insecure default cryptographic key. The JWT signing secret defaults to the hardcoded literal `\"dev-secret-change-me\"` when `PLATFORM_JWT_SECRET` is unset. A safety check exists but only fires when `PLATFORM_ENV != \"dev\"`; the default value of `PLATFORM_ENV` is `\"dev\"`, so the check is silently bypassed in any deployment that does not explicitly opt out. The attacker reads the literal from this public source file, mints a JWT with arbitrary `sub` and `email` claims, and authenticates as any existing user (including workspace owners and admins). PraisonAI Platform version 0.1.4 patches the issue.",
    "evidence": "osv:CVE-2026-47410",
    "products": [],
    "severity": "critical",
    "structured": {
      "id": "CVE-2026-47410",
      "aliases": [
        "CVE-2026-47410",
        "GHSA-3qg8-5g3r-79v5",
        "PYSEC-2026-479"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/mervinpraison/praisonai",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "b707fd0b27fb405ca03b9a210d6dcb0540774b1a"
                },
                {
                  "fixed": "ef79b7a0561796ad9807f0f09538c25cc78d3619"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "0.1.4"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "ef79b7a0561796ad9807f0f09538c25cc78d3619"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v0.1.3",
            "v0.1.2",
            "v0.1.1",
            "v0.1.0",
            "v0.0.74",
            "v0.0.73",
            "v0.0.72",
            "v0.0.71",
            "v0.0.70",
            "v0.0.69",
            "v0.0.68",
            "v0.0.67",
            "v0.0.66",
            "v0.0.65",
            "v0.0.64",
            "v0.0.63",
            "v0.0.62",
            "v0.0.61",
            "v0.0.59",
            "v0.0.59rc11",
            "v0.0.59rc9",
            "v0.0.59rc8",
            "v0.0.59rc7",
            "v0.0.59rc6",
            "0.0.59rc5",
            "v0.0.59rc5",
            "v0.0.59rc4",
            "v0.0.59rc3",
            "v0.0.59rc2",
            "v0.0.59rc1",
            "v0.0.58",
            "0.0.57",
            "0.0.56",
            "0.0.55",
            "v0.0.54",
            "v0.0.53",
            "v0.0.52",
            "v0.0.51",
            "v0.0.50",
            "v0.0.49",
            "v0.0.48",
            "v0.0.47",
            "v0.0.46",
            "v0.0.45",
            "v0.0.44",
            "v0.0.43",
            "v0.0.42",
            "v0.0.41",
            "v0.0.40",
            "v0.0.39",
            "v0.0.38",
            "v0.0.37",
            "v0.0.36",
            "v0.0.35",
            "v0.0.34",
            "v0.0.33",
            "v0.0.32",
            "v0.0.31",
            "v0.0.30",
            "v0.0.29",
            "v0.0.28",
            "v0.0.27",
            "v0.0.26",
            "v0.0.25",
            "v0.0.24",
            "v0.0.23",
            "v0.0.22",
            "v0.0.21",
            "v0.0.20",
            "v0.0.18",
            "v0.0.1"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-47410.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:21.345257587Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/47xxx/CVE-2026-47410.json",
        "https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-3qg8-5g3r-79v5",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-47410",
        "https://github.com/MervinPraison/PraisonAI/commit/ef79b7a0561796ad9807f0f09538c25cc78d3619",
        "https://github.com/MervinPraison/PraisonAI/pull/1685"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-321",
          "CWE-798"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/47xxx/CVE-2026-47410.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-47410",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 487433,
  "published_at": "2026-07-21T16:55:31.021+00:00"
}