CWE-306
AllowedMissing Authentication for Critical Function
Abstraction: Base · Status: Draft
The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.
3487 vulnerabilities reference this CWE, most recent first.
GHSA-5PX4-2C29-6HFH
Vulnerability from github – Published: 2026-02-02 15:30 – Updated: 2026-02-02 15:30An unauthenticated remote attacker could potentially disrupt operations by switching between multiple configuration presets via HTTP.
{
"affected": [],
"aliases": [
"CVE-2022-50977"
],
"database_specific": {
"cwe_ids": [
"CWE-306"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-02-02T15:16:28Z",
"severity": "HIGH"
},
"details": "An unauthenticated remote attacker could potentially disrupt operations by switching\u00a0between multiple configuration presets via HTTP.",
"id": "GHSA-5px4-2c29-6hfh",
"modified": "2026-02-02T15:30:34Z",
"published": "2026-02-02T15:30:34Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2022-50977"
},
{
"type": "WEB",
"url": "https://www.innomic.com/.well-known/csaf/white/2026/ids-2026-0001.html"
},
{
"type": "WEB",
"url": "https://www.innomic.com/.well-known/csaf/white/2026/ids-2026-0001.json"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"type": "CVSS_V3"
}
]
}
GHSA-5Q43-WWHH-V8WH
Vulnerability from github – Published: 2023-07-18 21:30 – Updated: 2024-04-04 06:16Vulnerability in the PeopleSoft Enterprise PeopleTools product of Oracle PeopleSoft (component: Portal). Supported versions that are affected are 8.59 and 8.60. Easily exploitable vulnerability allows unauthenticated attacker with network access via HTTP to compromise PeopleSoft Enterprise PeopleTools. Successful attacks of this vulnerability can result in unauthorized access to critical data or complete access to all PeopleSoft Enterprise PeopleTools accessible data. CVSS 3.1 Base Score 7.5 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N).
{
"affected": [],
"aliases": [
"CVE-2023-22047"
],
"database_specific": {
"cwe_ids": [
"CWE-306"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2023-07-18T21:15:14Z",
"severity": "HIGH"
},
"details": "Vulnerability in the PeopleSoft Enterprise PeopleTools product of Oracle PeopleSoft (component: Portal). Supported versions that are affected are 8.59 and 8.60. Easily exploitable vulnerability allows unauthenticated attacker with network access via HTTP to compromise PeopleSoft Enterprise PeopleTools. Successful attacks of this vulnerability can result in unauthorized access to critical data or complete access to all PeopleSoft Enterprise PeopleTools accessible data. CVSS 3.1 Base Score 7.5 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N).",
"id": "GHSA-5q43-wwhh-v8wh",
"modified": "2024-04-04T06:16:21Z",
"published": "2023-07-18T21:30:38Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2023-22047"
},
{
"type": "WEB",
"url": "https://www.oracle.com/security-alerts/cpujul2023.html"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-5Q4J-M9XF-3H9Q
Vulnerability from github – Published: 2022-05-24 17:41 – Updated: 2022-05-24 17:41An issue was discovered in Epikur before 20.1.1. A Glassfish 4.1 server with a default configuration is running on TCP port 4848. No password is required to access it with the administrator account.
{
"affected": [],
"aliases": [
"CVE-2020-10537"
],
"database_specific": {
"cwe_ids": [
"CWE-306"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2021-02-05T14:15:00Z",
"severity": "HIGH"
},
"details": "An issue was discovered in Epikur before 20.1.1. A Glassfish 4.1 server with a default configuration is running on TCP port 4848. No password is required to access it with the administrator account.",
"id": "GHSA-5q4j-m9xf-3h9q",
"modified": "2022-05-24T17:41:09Z",
"published": "2022-05-24T17:41:09Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2020-10537"
},
{
"type": "WEB",
"url": "https://www.x41-dsec.de/lab/advisories/x41-2020-003-epikur"
}
],
"schema_version": "1.4.0",
"severity": []
}
GHSA-5Q53-766V-93H8
Vulnerability from github – Published: 2024-10-28 12:30 – Updated: 2026-04-01 18:32Authentication Bypass Using an Alternate Path or Channel vulnerability in Stacks Stacks Mobile App Builder stacks-mobile-app-builder allows Authentication Bypass.This issue affects Stacks Mobile App Builder: from n/a through 5.2.3.
{
"affected": [],
"aliases": [
"CVE-2024-50477"
],
"database_specific": {
"cwe_ids": [
"CWE-288",
"CWE-306"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2024-10-28T12:15:16Z",
"severity": "CRITICAL"
},
"details": "Authentication Bypass Using an Alternate Path or Channel vulnerability in Stacks Stacks Mobile App Builder stacks-mobile-app-builder allows Authentication Bypass.This issue affects Stacks Mobile App Builder: from n/a through 5.2.3.",
"id": "GHSA-5q53-766v-93h8",
"modified": "2026-04-01T18:32:09Z",
"published": "2024-10-28T12:30:54Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2024-50477"
},
{
"type": "WEB",
"url": "https://patchstack.com/database/Wordpress/Plugin/stacks-mobile-app-builder/vulnerability/wordpress-stacks-mobile-app-builder-plugin-5-2-3-account-takeover-vulnerability?_s_id=cve"
},
{
"type": "WEB",
"url": "https://patchstack.com/database/vulnerability/stacks-mobile-app-builder/wordpress-stacks-mobile-app-builder-plugin-5-2-3-account-takeover-vulnerability?_s_id=cve"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"type": "CVSS_V3"
}
]
}
GHSA-5QF8-7RM9-WFXP
Vulnerability from github – Published: 2025-07-01 15:31 – Updated: 2025-07-01 15:31A flaw was found in the authentication enforcement mechanism of a model inference API in ai-inference-server. All /v1/* endpoints are expected to enforce API key validation. However, the POST /invocations endpoint failed to do so, resulting in an authentication bypass. This vulnerability allows unauthorized users to access the same inference features available on protected endpoints, potentially exposing sensitive functionality or allowing unintended access to backend resources.
{
"affected": [],
"aliases": [
"CVE-2025-6920"
],
"database_specific": {
"cwe_ids": [
"CWE-306"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2025-07-01T14:15:41Z",
"severity": "MODERATE"
},
"details": "A flaw was found in the authentication enforcement mechanism of a model inference API in ai-inference-server. All /v1/* endpoints are expected to enforce API key validation. However, the POST /invocations endpoint failed to do so, resulting in an authentication bypass. This vulnerability allows unauthorized users to access the same inference features available on protected endpoints, potentially exposing sensitive functionality or allowing unintended access to backend resources.",
"id": "GHSA-5qf8-7rm9-wfxp",
"modified": "2025-07-01T15:31:09Z",
"published": "2025-07-01T15:31:09Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2025-6920"
},
{
"type": "WEB",
"url": "https://access.redhat.com/security/cve/CVE-2025-6920"
},
{
"type": "WEB",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2375522"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-5QV2-823H-CG9J
Vulnerability from github – Published: 2025-07-31 21:31 – Updated: 2025-08-15 21:31Güralp FMUS series seismic monitoring devices expose an unauthenticated Telnet-based command line interface that could allow an attacker to modify hardware configurations, manipulate data, or factory reset the device.
{
"affected": [],
"aliases": [
"CVE-2025-8286"
],
"database_specific": {
"cwe_ids": [
"CWE-306"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2025-07-31T20:15:46Z",
"severity": "CRITICAL"
},
"details": "G\u00fcralp FMUS series seismic monitoring devices\u00a0expose an unauthenticated Telnet-based command line interface that \ncould allow an attacker to modify hardware configurations, manipulate \ndata, or factory reset the device.",
"id": "GHSA-5qv2-823h-cg9j",
"modified": "2025-08-15T21:31:17Z",
"published": "2025-07-31T21:31:54Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2025-8286"
},
{
"type": "WEB",
"url": "https://www.cisa.gov/news-events/ics-advisories/icsa-25-212-01"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"type": "CVSS_V3"
},
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
"type": "CVSS_V4"
}
]
}
GHSA-5QW8-F2G9-FF29
Vulnerability from github – Published: 2026-06-18 13:52 – Updated: 2026-07-20 21:23PraisonAI recipe serve Typer command bypasses the non-localhost authentication guard
Summary
PraisonAI's installed console entrypoint is Typer-first. In current releases,
the recipe command is registered in the Typer app and
praisonai recipe serve dispatches to the deprecated Typer command in
src/praisonai/praisonai/cli/commands/recipe.py.
That Typer command can start the Recipe HTTP server on a non-localhost interface with no authentication:
praisonai recipe serve --host 0.0.0.0 --admin
It prints a deprecation warning, then launches the server with:
{
"host": "0.0.0.0",
"config": {
"cors_origins": "*",
"enable_admin": true
}
}
Because config.auth is absent, create_app() does not attach the API-key or
JWT middleware. Unauthenticated requests can then reach the recipe API and, when
enabled, /admin/reload.
This is an incomplete hardening / sibling-callsite issue. The legacy feature
handler in src/praisonai/praisonai/cli/features/recipe.py rejects the same
non-localhost/no-auth combination, and current create_auth_middleware() now
fails closed if API-key/JWT auth is selected without a secret. The installed
Typer command bypasses both expectations by never requiring or setting auth.
Affected product
- Repository:
MervinPraison/PraisonAI - Package:
praisonai - Component:
src/praisonai/praisonai/__main__.pysrc/praisonai/praisonai/cli/app.pysrc/praisonai/praisonai/cli/commands/recipe.pysrc/praisonai/praisonai/cli/features/recipe.pysrc/praisonai/praisonai/recipe/serve.py
Confirmed affected:
v4.6.58 1ad58ca02975ff1398efeda694ea2ab78f20cf3e
v4.6.57 e90d92231853161ad931f3498da57651a9f8b528
v4.6.56 d3c4a2afadfbf3a3e172e460e607ba4efad263a6
v4.6.34 e5928449f73f66cc8af1de61621aa974ab255133
v4.6.33 dfbb8d78ec7e8dc7118bc722ab1b2524bc98ddab
v4.6.10 4b1b17b963cbd0625e41394a30168c95b26429b2
v4.5.128 b4e3a8a84ade44ac3dd9102b792cdb4311a95937
v4.5.112 bfe3d94bad6db92fc2927c2e3c081ae8303e209e
Suggested affected range: praisonai >= 4.5.112, <= 4.6.58.
The lower bound is conservative and based on sampled tags. Maintainers should confirm the exact introduction point before publishing a final range.
Root cause
The installed entrypoint routes registered Typer commands before falling back to the legacy dispatcher:
if first_cmd in _get_typer_commands():
_run_typer(argv)
else:
_run_legacy(argv)
cli/app.py registers commands.recipe as the recipe Typer command:
from .commands.recipe import app as recipe_app
...
app.add_typer(recipe_app, name="recipe", help="Recipe management")
The deprecated Typer recipe serve implementation accepts a remote host,
defaults CORS to *, and only enables authentication when --api-key is
explicitly provided:
host: str = typer.Option("127.0.0.1", "--host", "-h", ...)
api_key: str = typer.Option(None, "--api-key", ...)
cors: str = typer.Option("*", "--cors", ...)
admin: bool = typer.Option(False, "--admin", ...)
...
serve_config = {}
...
if api_key:
serve_config["api_key"] = api_key
serve_config["auth"] = "api-key"
if cors:
serve_config["cors_origins"] = cors
if admin:
serve_config["enable_admin"] = True
...
serve(host=host, port=port, reload=reload, config=serve_config, workers=workers)
There is no equivalent to the hardened non-localhost guard in the legacy feature handler:
if host != "127.0.0.1" and host != "localhost" and auth == "none":
self._print_error("Auth required for non-localhost binding. Use --auth api-key or --auth jwt")
return self.EXIT_POLICY_DENIED
The Recipe server only installs auth middleware when config["auth"] is set:
auth_type = config.get("auth")
if auth_type and auth_type != "none":
auth_middleware = create_auth_middleware(...)
if auth_middleware:
middleware.append(Middleware(auth_middleware))
On current v4.6.58, the selected-auth paths fail closed correctly:
auth=api-keywith no key returns503.auth=api-keywith a key but no request header returns401.
The vulnerable Typer path does not select auth at all.
Local-only PoV
Run from the harness checkout:
uv run \
--with starlette --with httpx --with typer --with rich --with pyyaml \
--with sse-starlette --with click --with python-dotenv \
python submission-bundle/praisonai-prai-cand-016-recipe-serve-typer-auth-bypass/poc/pov_prai_cand_016_recipe_serve_typer_auth_bypass.py \
--repo artifacts/repos/praisonai-v4.6.58 \
--label v4.6.58
The PoV does not bind a socket. It monkey-patches the recipe server launcher,
invokes the real praisonai.__main__.main() entrypoint with
recipe serve --host 0.0.0.0 --admin, captures the launch config, and then
uses Starlette's in-process test client to exercise the resulting app.
Observed v4.6.58 result:
{
"candidate": "PRAI-CAND-016",
"entrypoint_exit_code": 0,
"typer_recipe_command_registered": true,
"captured_launch": {
"host": "0.0.0.0",
"port": 8765,
"config": {
"cors_origins": "*",
"enable_admin": true
}
},
"bypass": {
"admin_reload": {
"path": "/admin/reload",
"status": 200
},
"openapi": {
"path": "/openapi.json",
"status": 200
}
},
"controls": {
"auth_api_key_no_secret": {
"admin_reload": {
"status": 503
}
},
"auth_api_key_no_header": {
"admin_reload": {
"status": 401
}
}
},
"feature_handler_nonlocalhost_noauth_exit": 4,
"auth_fail_closed_current_control": true,
"ok": true
}
Stored evidence:
evidence/current-v4.6.58.jsonevidence/version-sweep.tsv
Why this is not intended behavior
This is not only a disagreement about whether operators should configure auth.
PraisonAI's current security documentation says recent hardening changed API
servers so anonymous requests return 401 and servers bind to 127.0.0.1 by
default. Recipe server docs say auth: api-key should be used for production,
admin endpoints require auth, and public servers should not run without
authentication.
The implementation also shows the intended boundary:
create_auth_middleware()now returns503if API-key/JWT auth is selected without a secret.RecipeHandler.cmd_serve()refuses non-localhost binding whenauthisnone.- The vulnerable Typer command is marked deprecated and tells users to use the
newer command, but the installed entrypoint still routes
praisonai recipeto that Typer command before the legacy handler can enforce the guard.
The official local HTTP sidecar docs describe the sidecar as communicating over localhost and "no external network required", but the Docker example still uses:
CMD ["praisonai", "recipe", "serve", "--host", "0.0.0.0", "--port", "8765"]
That command exposes the Typer path above and does not enable auth, even if
PRAISONAI_API_KEY is present in the environment, because this path only sets
auth when --api-key is passed or a config file sets auth.
Impact
If an operator follows the vulnerable command path on a reachable interface, any network caller that can reach the Recipe HTTP server can access recipe runner endpoints without credentials.
Affected endpoints include:
GET /v1/recipesPOST /v1/recipes/runPOST /v1/recipes/streamPOST /v1/recipes/validate- optional
POST /admin/reloadwhen admin endpoints are enabled
The exact impact depends on configured recipes and deployment context. At a minimum, an attacker can enumerate recipes and trigger recipe validation or execution flows intended for local or authenticated callers. In deployments with powerful recipes, tool-enabled recipes, or admin endpoints, this can cause unauthorized workflow execution, model/API spend, state changes, or recipe registry reload operations.
This report does not claim arbitrary code execution by default.
Suggested fix
Prefer one canonical Recipe server CLI path and enforce the same preflight for every wrapper.
Recommended changes:
- Remove or hard-disable the deprecated Typer
praisonai recipe servecommand, or make it delegate to the hardenedRecipeHandler.cmd_serve()code path. - Add the same non-localhost/no-auth guard to
cli/commands/recipe.py. - Treat
PRAISONAI_API_KEYas a secret only whenauth=api-keyis selected; do not rely on the env var's presence alone unless the command also enables auth explicitly. - Fix the deprecated command's help examples so remote binding always includes auth.
- Consider changing
--corsdefault from*to no CORS or localhost origins. - Add regression tests that invoke the installed
praisonai.__main__.main()entrypoint, not only the legacy feature handler: praisonai recipe serve --host 0.0.0.0fails before launch unless auth is selected and configured;praisonai recipe serve --host 0.0.0.0 --admincannot expose/admin/reloadwithout auth;- selected but misconfigured auth still returns
503; - configured auth with no header returns
401.
{
"affected": [
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 4.6.58"
},
"package": {
"ecosystem": "PyPI",
"name": "praisonai"
},
"ranges": [
{
"events": [
{
"introduced": "4.5.112"
},
{
"fixed": "4.6.59"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-56836"
],
"database_specific": {
"cwe_ids": [
"CWE-287",
"CWE-306",
"CWE-862"
],
"github_reviewed": true,
"github_reviewed_at": "2026-06-18T13:52:44Z",
"nvd_published_at": null,
"severity": "HIGH"
},
"details": "# PraisonAI `recipe serve` Typer command bypasses the non-localhost authentication guard\n\n## Summary\n\nPraisonAI\u0027s installed console entrypoint is Typer-first. In current releases,\nthe `recipe` command is registered in the Typer app and\n`praisonai recipe serve` dispatches to the deprecated Typer command in\n`src/praisonai/praisonai/cli/commands/recipe.py`.\n\nThat Typer command can start the Recipe HTTP server on a non-localhost\ninterface with no authentication:\n\n```text\npraisonai recipe serve --host 0.0.0.0 --admin\n```\n\nIt prints a deprecation warning, then launches the server with:\n\n```json\n{\n \"host\": \"0.0.0.0\",\n \"config\": {\n \"cors_origins\": \"*\",\n \"enable_admin\": true\n }\n}\n```\n\nBecause `config.auth` is absent, `create_app()` does not attach the API-key or\nJWT middleware. Unauthenticated requests can then reach the recipe API and, when\nenabled, `/admin/reload`.\n\nThis is an incomplete hardening / sibling-callsite issue. The legacy feature\nhandler in `src/praisonai/praisonai/cli/features/recipe.py` rejects the same\nnon-localhost/no-auth combination, and current `create_auth_middleware()` now\nfails closed if API-key/JWT auth is selected without a secret. The installed\nTyper command bypasses both expectations by never requiring or setting `auth`.\n\n## Affected product\n\n- Repository: `MervinPraison/PraisonAI`\n- Package: `praisonai`\n- Component:\n - `src/praisonai/praisonai/__main__.py`\n - `src/praisonai/praisonai/cli/app.py`\n - `src/praisonai/praisonai/cli/commands/recipe.py`\n - `src/praisonai/praisonai/cli/features/recipe.py`\n - `src/praisonai/praisonai/recipe/serve.py`\n\nConfirmed affected:\n\n```text\nv4.6.58 1ad58ca02975ff1398efeda694ea2ab78f20cf3e\nv4.6.57 e90d92231853161ad931f3498da57651a9f8b528\nv4.6.56 d3c4a2afadfbf3a3e172e460e607ba4efad263a6\nv4.6.34 e5928449f73f66cc8af1de61621aa974ab255133\nv4.6.33 dfbb8d78ec7e8dc7118bc722ab1b2524bc98ddab\nv4.6.10 4b1b17b963cbd0625e41394a30168c95b26429b2\nv4.5.128 b4e3a8a84ade44ac3dd9102b792cdb4311a95937\nv4.5.112 bfe3d94bad6db92fc2927c2e3c081ae8303e209e\n```\n\nSuggested affected range: `praisonai \u003e= 4.5.112, \u003c= 4.6.58`.\n\nThe lower bound is conservative and based on sampled tags. Maintainers should\nconfirm the exact introduction point before publishing a final range.\n\n## Root cause\n\nThe installed entrypoint routes registered Typer commands before falling back\nto the legacy dispatcher:\n\n```python\nif first_cmd in _get_typer_commands():\n _run_typer(argv)\nelse:\n _run_legacy(argv)\n```\n\n`cli/app.py` registers `commands.recipe` as the `recipe` Typer command:\n\n```python\nfrom .commands.recipe import app as recipe_app\n...\napp.add_typer(recipe_app, name=\"recipe\", help=\"Recipe management\")\n```\n\nThe deprecated Typer `recipe serve` implementation accepts a remote host,\ndefaults CORS to `*`, and only enables authentication when `--api-key` is\nexplicitly provided:\n\n```python\nhost: str = typer.Option(\"127.0.0.1\", \"--host\", \"-h\", ...)\napi_key: str = typer.Option(None, \"--api-key\", ...)\ncors: str = typer.Option(\"*\", \"--cors\", ...)\nadmin: bool = typer.Option(False, \"--admin\", ...)\n...\nserve_config = {}\n...\nif api_key:\n serve_config[\"api_key\"] = api_key\n serve_config[\"auth\"] = \"api-key\"\nif cors:\n serve_config[\"cors_origins\"] = cors\nif admin:\n serve_config[\"enable_admin\"] = True\n...\nserve(host=host, port=port, reload=reload, config=serve_config, workers=workers)\n```\n\nThere is no equivalent to the hardened non-localhost guard in the legacy\nfeature handler:\n\n```python\nif host != \"127.0.0.1\" and host != \"localhost\" and auth == \"none\":\n self._print_error(\"Auth required for non-localhost binding. Use --auth api-key or --auth jwt\")\n return self.EXIT_POLICY_DENIED\n```\n\nThe Recipe server only installs auth middleware when `config[\"auth\"]` is set:\n\n```python\nauth_type = config.get(\"auth\")\nif auth_type and auth_type != \"none\":\n auth_middleware = create_auth_middleware(...)\n if auth_middleware:\n middleware.append(Middleware(auth_middleware))\n```\n\nOn current `v4.6.58`, the selected-auth paths fail closed correctly:\n\n- `auth=api-key` with no key returns `503`.\n- `auth=api-key` with a key but no request header returns `401`.\n\nThe vulnerable Typer path does not select auth at all.\n\n## Local-only PoV\n\nRun from the harness checkout:\n\n```bash\nuv run \\\n --with starlette --with httpx --with typer --with rich --with pyyaml \\\n --with sse-starlette --with click --with python-dotenv \\\n python submission-bundle/praisonai-prai-cand-016-recipe-serve-typer-auth-bypass/poc/pov_prai_cand_016_recipe_serve_typer_auth_bypass.py \\\n --repo artifacts/repos/praisonai-v4.6.58 \\\n --label v4.6.58\n```\n\nThe PoV does not bind a socket. It monkey-patches the recipe server launcher,\ninvokes the real `praisonai.__main__.main()` entrypoint with\n`recipe serve --host 0.0.0.0 --admin`, captures the launch config, and then\nuses Starlette\u0027s in-process test client to exercise the resulting app.\n\nObserved `v4.6.58` result:\n\n```json\n{\n \"candidate\": \"PRAI-CAND-016\",\n \"entrypoint_exit_code\": 0,\n \"typer_recipe_command_registered\": true,\n \"captured_launch\": {\n \"host\": \"0.0.0.0\",\n \"port\": 8765,\n \"config\": {\n \"cors_origins\": \"*\",\n \"enable_admin\": true\n }\n },\n \"bypass\": {\n \"admin_reload\": {\n \"path\": \"/admin/reload\",\n \"status\": 200\n },\n \"openapi\": {\n \"path\": \"/openapi.json\",\n \"status\": 200\n }\n },\n \"controls\": {\n \"auth_api_key_no_secret\": {\n \"admin_reload\": {\n \"status\": 503\n }\n },\n \"auth_api_key_no_header\": {\n \"admin_reload\": {\n \"status\": 401\n }\n }\n },\n \"feature_handler_nonlocalhost_noauth_exit\": 4,\n \"auth_fail_closed_current_control\": true,\n \"ok\": true\n}\n```\n\nStored evidence:\n\n- `evidence/current-v4.6.58.json`\n- `evidence/version-sweep.tsv`\n\n## Why this is not intended behavior\n\nThis is not only a disagreement about whether operators should configure auth.\n\nPraisonAI\u0027s current security documentation says recent hardening changed API\nservers so anonymous requests return `401` and servers bind to `127.0.0.1` by\ndefault. Recipe server docs say `auth: api-key` should be used for production,\nadmin endpoints require auth, and public servers should not run without\nauthentication.\n\nThe implementation also shows the intended boundary:\n\n- `create_auth_middleware()` now returns `503` if API-key/JWT auth is selected\n without a secret.\n- `RecipeHandler.cmd_serve()` refuses non-localhost binding when `auth` is\n `none`.\n- The vulnerable Typer command is marked deprecated and tells users to use the\n newer command, but the installed entrypoint still routes `praisonai recipe`\n to that Typer command before the legacy handler can enforce the guard.\n\nThe official local HTTP sidecar docs describe the sidecar as communicating over\nlocalhost and \"no external network required\", but the Docker example still uses:\n\n```text\nCMD [\"praisonai\", \"recipe\", \"serve\", \"--host\", \"0.0.0.0\", \"--port\", \"8765\"]\n```\n\nThat command exposes the Typer path above and does not enable auth, even if\n`PRAISONAI_API_KEY` is present in the environment, because this path only sets\n`auth` when `--api-key` is passed or a config file sets `auth`.\n\n## Impact\n\nIf an operator follows the vulnerable command path on a reachable interface,\nany network caller that can reach the Recipe HTTP server can access recipe\nrunner endpoints without credentials.\n\nAffected endpoints include:\n\n- `GET /v1/recipes`\n- `POST /v1/recipes/run`\n- `POST /v1/recipes/stream`\n- `POST /v1/recipes/validate`\n- optional `POST /admin/reload` when admin endpoints are enabled\n\nThe exact impact depends on configured recipes and deployment context. At a\nminimum, an attacker can enumerate recipes and trigger recipe validation or\nexecution flows intended for local or authenticated callers. In deployments\nwith powerful recipes, tool-enabled recipes, or admin endpoints, this can cause\nunauthorized workflow execution, model/API spend, state changes, or recipe\nregistry reload operations.\n\nThis report does not claim arbitrary code execution by default.\n\n## Suggested fix\n\nPrefer one canonical Recipe server CLI path and enforce the same preflight for\nevery wrapper.\n\nRecommended changes:\n\n1. Remove or hard-disable the deprecated Typer `praisonai recipe serve` command,\n or make it delegate to the hardened `RecipeHandler.cmd_serve()` code path.\n2. Add the same non-localhost/no-auth guard to `cli/commands/recipe.py`.\n3. Treat `PRAISONAI_API_KEY` as a secret only when `auth=api-key` is selected;\n do not rely on the env var\u0027s presence alone unless the command also enables\n auth explicitly.\n4. Fix the deprecated command\u0027s help examples so remote binding always includes\n auth.\n5. Consider changing `--cors` default from `*` to no CORS or localhost origins.\n6. Add regression tests that invoke the installed `praisonai.__main__.main()`\n entrypoint, not only the legacy feature handler:\n - `praisonai recipe serve --host 0.0.0.0` fails before launch unless auth is\n selected and configured;\n - `praisonai recipe serve --host 0.0.0.0 --admin` cannot expose\n `/admin/reload` without auth;\n - selected but misconfigured auth still returns `503`;\n - configured auth with no header returns `401`.",
"id": "GHSA-5qw8-f2g9-ff29",
"modified": "2026-07-20T21:23:33Z",
"published": "2026-06-18T13:52:44Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-5qw8-f2g9-ff29"
},
{
"type": "PACKAGE",
"url": "https://github.com/MervinPraison/PraisonAI"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N",
"type": "CVSS_V3"
}
],
"summary": "PraisonAI recipe serve Typer command bypasses the non-localhost authentication guard"
}
GHSA-5R94-357G-JQJ4
Vulnerability from github – Published: 2026-05-17 15:31 – Updated: 2026-05-17 15:31GitBucket 4.23.1 contains an unauthenticated remote code execution vulnerability that allows attackers to execute arbitrary commands by exploiting weak secret token generation and insecure file upload functionality. Attackers can brute-force the Blowfish encryption key, upload a malicious JAR plugin via the git-lfs endpoint, and execute system commands through an exposed exploit endpoint.
{
"affected": [],
"aliases": [
"CVE-2018-25332"
],
"database_specific": {
"cwe_ids": [
"CWE-306"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-05-17T13:16:44Z",
"severity": "CRITICAL"
},
"details": "GitBucket 4.23.1 contains an unauthenticated remote code execution vulnerability that allows attackers to execute arbitrary commands by exploiting weak secret token generation and insecure file upload functionality. Attackers can brute-force the Blowfish encryption key, upload a malicious JAR plugin via the git-lfs endpoint, and execute system commands through an exposed exploit endpoint.",
"id": "GHSA-5r94-357g-jqj4",
"modified": "2026-05-17T15:31:41Z",
"published": "2026-05-17T15:31:41Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2018-25332"
},
{
"type": "WEB",
"url": "https://github.com/gitbucket/gitbucket"
},
{
"type": "WEB",
"url": "https://security.szurek.pl"
},
{
"type": "WEB",
"url": "https://www.exploit-db.com/exploits/44668"
},
{
"type": "WEB",
"url": "https://www.vulncheck.com/advisories/gitbucket-unauthenticated-remote-code-execution"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"type": "CVSS_V3"
},
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
"type": "CVSS_V4"
}
]
}
GHSA-5RG3-6JX4-C2QF
Vulnerability from github – Published: 2023-02-09 18:30 – Updated: 2025-03-24 21:30The bundle management module lacks authentication and control mechanisms in some APIs. Successful exploitation of this vulnerability may affect data confidentiality.
{
"affected": [],
"aliases": [
"CVE-2022-48289"
],
"database_specific": {
"cwe_ids": [
"CWE-306"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2023-02-09T17:15:00Z",
"severity": "HIGH"
},
"details": "The bundle management module lacks authentication and control mechanisms in some APIs. Successful exploitation of this vulnerability may affect data confidentiality.",
"id": "GHSA-5rg3-6jx4-c2qf",
"modified": "2025-03-24T21:30:26Z",
"published": "2023-02-09T18:30:27Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2022-48289"
},
{
"type": "WEB",
"url": "https://consumer.huawei.com/en/support/bulletin/2023/2"
},
{
"type": "WEB",
"url": "https://device.harmonyos.com/en/docs/security/update/security-bulletins-202302-0000001454769474"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-5RQH-X7C8-8R3M
Vulnerability from github – Published: 2025-11-20 21:30 – Updated: 2025-11-20 21:30The affected products allow unauthenticated access to Open Network Video Interface Forum (ONVIF) services, which may allow an attacker unauthorized access to camera configuration information.
{
"affected": [],
"aliases": [
"CVE-2025-64770"
],
"database_specific": {
"cwe_ids": [
"CWE-306"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2025-11-20T21:16:06Z",
"severity": "HIGH"
},
"details": "The affected products allow unauthenticated access to Open Network Video Interface Forum (ONVIF) services, which may allow an attacker unauthorized access to camera configuration information.",
"id": "GHSA-5rqh-x7c8-8r3m",
"modified": "2025-11-20T21:30:32Z",
"published": "2025-11-20T21:30:32Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2025-64770"
},
{
"type": "WEB",
"url": "https://github.com/cisagov/CSAF/blob/develop/csaf_files/OT/white/2025/icsa-25-324-02.json"
},
{
"type": "WEB",
"url": "https://icam365.net/en/aboutUs"
},
{
"type": "WEB",
"url": "https://www.cisa.gov/news-events/ics-advisories/icsa-25-324-02"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L",
"type": "CVSS_V3"
},
{
"score": "CVSS:4.0/AV:A/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
"type": "CVSS_V4"
}
]
}
Mitigation
- Divide the software into anonymous, normal, privileged, and administrative areas. Identify which of these areas require a proven user identity, and use a centralized authentication capability.
- Identify all potential communication channels, or other means of interaction with the software, to ensure that all channels are appropriately protected, including those channels that are assumed to be accessible only by authorized parties. Developers sometimes perform authentication at the primary channel, but open up a secondary channel that is assumed to be private. For example, a login mechanism may be listening on one network port, but after successful authentication, it may open up a second port where it waits for the connection, but avoids authentication because it assumes that only the authenticated party will connect to the port.
- In general, if the software or protocol allows a single session or user state to persist across multiple connections or channels, authentication and appropriate credential management need to be used throughout.
Mitigation MIT-15
For any security checks that are performed on the client side, ensure that these checks are duplicated on the server side, in order to avoid CWE-602. Attackers can bypass the client-side checks by modifying values after the checks have been performed, or by changing the client to remove the client-side checks entirely. Then, these modified values would be submitted to the server.
Mitigation
- Where possible, avoid implementing custom, "grow-your-own" authentication routines and consider using authentication capabilities as provided by the surrounding framework, operating system, or environment. These capabilities may avoid common weaknesses that are unique to authentication; support automatic auditing and tracking; and make it easier to provide a clear separation between authentication tasks and authorization tasks.
- In environments such as the World Wide Web, the line between authentication and authorization is sometimes blurred. If custom authentication routines are required instead of those provided by the server, then these routines must be applied to every single page, since these pages could be requested directly.
Mitigation MIT-4.5
Strategy: Libraries or Frameworks
- Use a vetted library or framework that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid.
- For example, consider using libraries with authentication capabilities such as OpenSSL or the ESAPI Authenticator [REF-45].
Mitigation
When storing data in the cloud (e.g., S3 buckets, Azure blobs, Google Cloud Storage, etc.), use the provider's controls to require strong authentication for users who should be allowed to access the data [REF-1297] [REF-1298] [REF-1302].
CAPEC-12: Choosing Message Identifier
This pattern of attack is defined by the selection of messages distributed via multicast or public information channels that are intended for another client by determining the parameter value assigned to that client. This attack allows the adversary to gain access to potentially privileged information, and to possibly perpetrate other attacks through the distribution means by impersonation. If the channel/message being manipulated is an input rather than output mechanism for the system, (such as a command bus), this style of attack could be used to change the adversary's identifier to more a privileged one.
CAPEC-166: Force the System to Reset Values
An attacker forces the target into a previous state in order to leverage potential weaknesses in the target dependent upon a prior configuration or state-dependent factors. Even in cases where an attacker may not be able to directly control the configuration of the targeted application, they may be able to reset the configuration to a prior state since many applications implement reset functions.
CAPEC-216: Communication Channel Manipulation
An adversary manipulates a setting or parameter on communications channel in order to compromise its security. This can result in information exposure, insertion/removal of information from the communications stream, and/or potentially system compromise.
CAPEC-36: Using Unpublished Interfaces or Functionality
An adversary searches for and invokes interfaces or functionality that the target system designers did not intend to be publicly available. If interfaces fail to authenticate requests, the attacker may be able to invoke functionality they are not authorized for.
CAPEC-62: Cross Site Request Forgery
An attacker crafts malicious web links and distributes them (via web pages, email, etc.), typically in a targeted manner, hoping to induce users to click on the link and execute the malicious action against some third-party application. If successful, the action embedded in the malicious link will be processed and accepted by the targeted application with the users' privilege level. This type of attack leverages the persistence and implicit trust placed in user session cookies by many web applications today. In such an architecture, once the user authenticates to an application and a session cookie is created on the user's system, all following transactions for that session are authenticated using that cookie including potential actions initiated by an attacker and simply "riding" the existing session cookie.