Common Weakness Enumeration

CWE-862

Allowed-with-Review

Missing Authorization

Abstraction: Class · Status: Incomplete

The product does not perform an authorization check when an actor attempts to access a resource or perform an action.

14813 vulnerabilities reference this CWE, most recent first.

GHSA-5QP2-459P-52P6

Vulnerability from github – Published: 2024-04-17 09:30 – Updated: 2026-04-28 21:34
VLAI
Details

Missing Authorization vulnerability in Nuggethon Custom Order Statuses for WooCommerce.This issue affects Custom Order Statuses for WooCommerce: from n/a through 1.5.2.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2024-32524"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-862"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2024-04-17T08:15:08Z",
    "severity": "MODERATE"
  },
  "details": "Missing Authorization vulnerability in Nuggethon Custom Order Statuses for WooCommerce.This issue affects Custom Order Statuses for WooCommerce: from n/a through 1.5.2.",
  "id": "GHSA-5qp2-459p-52p6",
  "modified": "2026-04-28T21:34:45Z",
  "published": "2024-04-17T09:30:31Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2024-32524"
    },
    {
      "type": "WEB",
      "url": "https://patchstack.com/database/vulnerability/custom-order-statuses-for-woocommerce/wordpress-custom-order-statuses-for-woocommerce-plugin-1-5-2-broken-access-control-vulnerability?_s_id=cve"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-5QP6-M6G2-73R6

Vulnerability from github – Published: 2023-06-09 06:30 – Updated: 2024-04-04 04:41
VLAI
Details

The WP Fastest Cache plugin for WordPress is vulnerable to unauthorized cache deletion in versions up to, and including, 1.1.2 due to a missing capability check in the deleteCacheToolbar function . This makes it possible for authenticated attackers, with subscriber-level permissions and above, to delete the site's cache.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2023-1375"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-862"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2023-06-09T06:15:56Z",
    "severity": "MODERATE"
  },
  "details": "The WP Fastest Cache plugin for WordPress is vulnerable to unauthorized cache deletion in versions up to, and including, 1.1.2 due to a missing capability check in the deleteCacheToolbar function . This makes it possible for authenticated attackers, with subscriber-level permissions and above, to delete the site\u0027s cache.",
  "id": "GHSA-5qp6-m6g2-73r6",
  "modified": "2024-04-04T04:41:28Z",
  "published": "2023-06-09T06:30:31Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2023-1375"
    },
    {
      "type": "WEB",
      "url": "https://plugins.trac.wordpress.org/browser/wp-fastest-cache/trunk/wpFastestCache.php#L866"
    },
    {
      "type": "WEB",
      "url": "https://plugins.trac.wordpress.org/changeset?sfp_email=\u0026sfph_mail=\u0026reponame=\u0026old=2893158%40wp-fastest-cache\u0026new=2893158%40wp-fastest-cache\u0026sfp_email=\u0026sfph_mail="
    },
    {
      "type": "WEB",
      "url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/ae643666-70cb-4eb4-a183-e1649264ded4?source=cve"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-5QPF-CX59-XVM8

Vulnerability from github – Published: 2024-10-08 09:30 – Updated: 2024-10-08 09:30
VLAI
Details

The web server of affected devices do not properly authenticate user request to the '/ClientArea/RuntimeInfoData.mwsl' endpoint. This could allow an unauthenticated remote attacker to gain knowledge about current actual and configured maximum cycle times as well as about configured maximum communication load.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2024-46887"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-288",
      "CWE-862"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2024-10-08T09:15:16Z",
    "severity": "MODERATE"
  },
  "details": "The web server of affected devices do not properly authenticate user request to the \u0027/ClientArea/RuntimeInfoData.mwsl\u0027 endpoint. This could allow an unauthenticated remote attacker to gain knowledge about current actual and configured maximum cycle times as well as about configured maximum communication load.",
  "id": "GHSA-5qpf-cx59-xvm8",
  "modified": "2024-10-08T09:30:54Z",
  "published": "2024-10-08T09:30:54Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2024-46887"
    },
    {
      "type": "WEB",
      "url": "https://cert-portal.siemens.com/productcert/html/ssa-054046.html"
    }
  ],
  "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"
    },
    {
      "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/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-5QR8-J5CM-M7FJ

Vulnerability from github – Published: 2024-10-10 03:30 – Updated: 2024-10-10 03:30
VLAI
Details

The Notification for Telegram plugin for WordPress is vulnerable to unauthorized test message sending due to a missing capability check on the 'nftb_test_action' function in versions up to, and including, 3.3.1. This makes it possible for authenticated attackers, with subscriber-level access and above, to send a test message via the Telegram Bot API to all users configured in the settings.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2024-9685"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-862"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2024-10-10T02:15:06Z",
    "severity": "MODERATE"
  },
  "details": "The Notification for Telegram plugin for WordPress is vulnerable to unauthorized test message sending due to a missing capability check on the \u0027nftb_test_action\u0027 function in versions up to, and including, 3.3.1. This makes it possible for authenticated attackers, with subscriber-level access and above, to send a test message via the Telegram Bot API to all users configured in the settings.",
  "id": "GHSA-5qr8-j5cm-m7fj",
  "modified": "2024-10-10T03:30:46Z",
  "published": "2024-10-10T03:30:46Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2024-9685"
    },
    {
      "type": "WEB",
      "url": "https://plugins.trac.wordpress.org/browser/notification-for-telegram/tags/3.3/index.php#L202"
    },
    {
      "type": "WEB",
      "url": "https://plugins.trac.wordpress.org/changeset/3165615/notification-for-telegram"
    },
    {
      "type": "WEB",
      "url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/abaebd3b-69ab-4e9b-a528-c9d846e62238?source=cve"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-5QW4-2V86-45MW

Vulnerability from github – Published: 2024-02-06 00:30 – Updated: 2026-04-08 18:32
VLAI
Details

The Getwid – Gutenberg Blocks plugin for WordPress is vulnerable to unauthorized modification of data due to a missing capability check on the recaptcha_api_key_manage function in all versions up to, and including, 2.0.3. This makes it possible for authenticated attackers, with subscriber-level access and above, to add, modify, or delete the 'Recaptcha Site Key' and 'Recaptcha Secret Key' settings.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2023-6959"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-862"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2024-02-05T22:15:57Z",
    "severity": "MODERATE"
  },
  "details": "The Getwid \u2013 Gutenberg Blocks plugin for WordPress is vulnerable to unauthorized modification of data due to a missing capability check on the recaptcha_api_key_manage function in all versions up to, and including, 2.0.3. This makes it possible for authenticated attackers, with subscriber-level access and above, to add, modify, or delete the \u0027Recaptcha Site Key\u0027 and \u0027Recaptcha Secret Key\u0027 settings.",
  "id": "GHSA-5qw4-2v86-45mw",
  "modified": "2026-04-08T18:32:32Z",
  "published": "2024-02-06T00:30:26Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2023-6959"
    },
    {
      "type": "WEB",
      "url": "https://plugins.trac.wordpress.org/changeset/3022982"
    },
    {
      "type": "WEB",
      "url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/774c00fb-82cd-44ca-bf96-3f6dfd1977d0?source=cve"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-5QW8-F2G9-FF29

Vulnerability from github – Published: 2026-06-18 13:52 – Updated: 2026-07-20 21:23
VLAI
Summary
PraisonAI recipe serve Typer command bypasses the non-localhost authentication guard
Details

PraisonAI 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__.py
  • src/praisonai/praisonai/cli/app.py
  • src/praisonai/praisonai/cli/commands/recipe.py
  • src/praisonai/praisonai/cli/features/recipe.py
  • src/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-key with no key returns 503.
  • auth=api-key with a key but no request header returns 401.

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.json
  • evidence/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 returns 503 if API-key/JWT auth is selected without a secret.
  • RecipeHandler.cmd_serve() refuses non-localhost binding when auth is none.
  • The vulnerable Typer command is marked deprecated and tells users to use the newer command, but the installed entrypoint still routes praisonai recipe to 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/recipes
  • POST /v1/recipes/run
  • POST /v1/recipes/stream
  • POST /v1/recipes/validate
  • optional POST /admin/reload when 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:

  1. Remove or hard-disable the deprecated Typer praisonai recipe serve command, or make it delegate to the hardened RecipeHandler.cmd_serve() code path.
  2. Add the same non-localhost/no-auth guard to cli/commands/recipe.py.
  3. Treat PRAISONAI_API_KEY as a secret only when auth=api-key is selected; do not rely on the env var's presence alone unless the command also enables auth explicitly.
  4. Fix the deprecated command's help examples so remote binding always includes auth.
  5. Consider changing --cors default from * to no CORS or localhost origins.
  6. Add regression tests that invoke the installed praisonai.__main__.main() entrypoint, not only the legacy feature handler:
  7. praisonai recipe serve --host 0.0.0.0 fails before launch unless auth is selected and configured;
  8. praisonai recipe serve --host 0.0.0.0 --admin cannot expose /admin/reload without auth;
  9. selected but misconfigured auth still returns 503;
  10. configured auth with no header returns 401.
Show details on source website

{
  "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-5R47-FRW5-CMW5

Vulnerability from github – Published: 2025-01-27 15:30 – Updated: 2026-04-01 18:33
VLAI
Details

Missing Authorization vulnerability in Sprout Invoices Client Invoicing by Sprout Invoices allows Exploiting Incorrectly Configured Access Control Security Levels. This issue affects Client Invoicing by Sprout Invoices: from n/a through 20.8.1.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2025-24606"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-862"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2025-01-27T15:15:14Z",
    "severity": "MODERATE"
  },
  "details": "Missing Authorization vulnerability in Sprout Invoices Client Invoicing by Sprout Invoices allows Exploiting Incorrectly Configured Access Control Security Levels. This issue affects Client Invoicing by Sprout Invoices: from n/a through 20.8.1.",
  "id": "GHSA-5r47-frw5-cmw5",
  "modified": "2026-04-01T18:33:29Z",
  "published": "2025-01-27T15:30:58Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2025-24606"
    },
    {
      "type": "WEB",
      "url": "https://patchstack.com/database/wordpress/plugin/sprout-invoices/vulnerability/wordpress-client-invoicing-by-sprout-invoices-easy-estimates-and-invoices-for-wordpress-plugin-20-8-1-broken-access-control-vulnerability?_s_id=cve"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:L/A:L",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-5R4V-72RX-MG8X

Vulnerability from github – Published: 2026-05-26 21:31 – Updated: 2026-05-26 21:31
VLAI
Details

Missing Authorization vulnerability in Magepeople inc. WpBookingly allows Exploiting Incorrectly Configured Access Control Security Levels.

This issue affects WpBookingly: from n/a through 1.2.9.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2026-25444"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-862"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2026-05-26T20:16:16Z",
    "severity": "MODERATE"
  },
  "details": "Missing Authorization vulnerability in Magepeople inc. WpBookingly allows Exploiting Incorrectly Configured Access Control Security Levels.\n\nThis issue affects WpBookingly: from n/a through 1.2.9.",
  "id": "GHSA-5r4v-72rx-mg8x",
  "modified": "2026-05-26T21:31:59Z",
  "published": "2026-05-26T21:31:59Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-25444"
    },
    {
      "type": "WEB",
      "url": "https://patchstack.com/database/wordpress/plugin/service-booking-manager/vulnerability/wordpress-wpbookingly-plugin-1-2-9-broken-access-control-vulnerability-2?_s_id=cve"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-5R55-GPX9-P565

Vulnerability from github – Published: 2025-04-08 12:30 – Updated: 2025-04-08 12:30
VLAI
Details

The MelaPress Login Security and MelaPress Login Security Premium plugins for WordPress is vulnerable to unauthorized loss of data due to a missing capability check on the 'monitor_admin_actions' function in version 2.1.0. This makes it possible for unauthenticated attackers to delete any user.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2025-2876"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-862"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2025-04-08T12:15:16Z",
    "severity": "MODERATE"
  },
  "details": "The MelaPress Login Security and MelaPress Login Security Premium plugins for WordPress is vulnerable to unauthorized loss of data due to a missing capability check on the \u0027monitor_admin_actions\u0027 function in version 2.1.0. This makes it possible for unauthenticated attackers to delete any user.",
  "id": "GHSA-5r55-gpx9-p565",
  "modified": "2025-04-08T12:30:35Z",
  "published": "2025-04-08T12:30:35Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2025-2876"
    },
    {
      "type": "WEB",
      "url": "https://melapress.com/wordpress-login-security/releases"
    },
    {
      "type": "WEB",
      "url": "https://plugins.trac.wordpress.org/browser/melapress-login-security/trunk/app/modules/temporary-logins/class-temporary-logins.php#L71"
    },
    {
      "type": "WEB",
      "url": "https://plugins.trac.wordpress.org/changeset/3267748"
    },
    {
      "type": "WEB",
      "url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/559cbc69-85b6-4bad-9bb2-26d64195ba7e?source=cve"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-5R5C-H6FQ-HPJR

Vulnerability from github – Published: 2025-04-17 18:31 – Updated: 2026-04-28 21:35
VLAI
Details

Missing Authorization vulnerability in webbernaut Cloak Front End Email allows Exploiting Incorrectly Configured Access Control Security Levels. This issue affects Cloak Front End Email: from n/a through 1.9.5.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2025-26968"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-862"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2025-04-17T16:15:34Z",
    "severity": "HIGH"
  },
  "details": "Missing Authorization vulnerability in webbernaut Cloak Front End Email allows Exploiting Incorrectly Configured Access Control Security Levels. This issue affects Cloak Front End Email: from n/a through 1.9.5.",
  "id": "GHSA-5r5c-h6fq-hpjr",
  "modified": "2026-04-28T21:35:35Z",
  "published": "2025-04-17T18:31:14Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2025-26968"
    },
    {
      "type": "WEB",
      "url": "https://patchstack.com/database/wordpress/plugin/cloak-front-end-email/vulnerability/wordpress-cloak-front-end-email-1-9-5-broken-access-control-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:N/I:H/A:N",
      "type": "CVSS_V3"
    }
  ]
}

Mitigation
Architecture and Design
  • Divide the product into anonymous, normal, privileged, and administrative areas. Reduce the attack surface by carefully mapping roles with data and functionality. Use role-based access control (RBAC) [REF-229] to enforce the roles at the appropriate boundaries.
  • Note that this approach may not protect against horizontal authorization, i.e., it will not protect a user from attacking others with the same role.
Mitigation
Architecture and Design

Ensure that access control checks are performed related to the business logic. These checks may be different than the access control checks that are applied to more generic resources such as files, connections, processes, memory, and database records. For example, a database may restrict access for medical records to a specific database user, but each record might only be intended to be accessible to the patient and the patient's doctor [REF-7].

Mitigation MIT-4.4
Architecture and Design

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 authorization frameworks such as the JAAS Authorization Framework [REF-233] and the OWASP ESAPI Access Control feature [REF-45].
Mitigation
Architecture and Design
  • For web applications, make sure that the access control mechanism is enforced correctly at the server side on every page. Users should not be able to access any unauthorized functionality or information by simply requesting direct access to that page.
  • One way to do this is to ensure that all pages containing sensitive information are not cached, and that all such pages restrict access to requests that are accompanied by an active and authenticated session token associated with a user who has the required permissions to access that page.
Mitigation
System Configuration Installation

Use the access control capabilities of your operating system and server environment and define your access control lists accordingly. Use a "default deny" policy when defining these ACLs.

CAPEC-665: Exploitation of Thunderbolt Protection Flaws

An adversary leverages a firmware weakness within the Thunderbolt protocol, on a computing device to manipulate Thunderbolt controller firmware in order to exploit vulnerabilities in the implementation of authorization and verification schemes within Thunderbolt protection mechanisms. Upon gaining physical access to a target device, the adversary conducts high-level firmware manipulation of the victim Thunderbolt controller SPI (Serial Peripheral Interface) flash, through the use of a SPI Programing device and an external Thunderbolt device, typically as the target device is booting up. If successful, this allows the adversary to modify memory, subvert authentication mechanisms, spoof identities and content, and extract data and memory from the target device. Currently 7 major vulnerabilities exist within Thunderbolt protocol with 9 attack vectors as noted in the Execution Flow.