CWE-863
Allowed-with-ReviewIncorrect Authorization
Abstraction: Class · Status: Incomplete
The product performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check.
5657 vulnerabilities reference this CWE, most recent first.
GHSA-4QCM-H32C-8XQ3
Vulnerability from github – Published: 2022-05-24 17:45 – Updated: 2022-07-13 00:01In OpenEMR, versions v2.7.2-rc1 to 6.0.0 are vulnerable to Improper Access Control when creating a new user, which leads to a malicious user able to read and send sensitive messages on behalf of the victim user.
{
"affected": [],
"aliases": [
"CVE-2021-25920"
],
"database_specific": {
"cwe_ids": [
"CWE-178",
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2021-03-22T20:15:00Z",
"severity": "MODERATE"
},
"details": "In OpenEMR, versions v2.7.2-rc1 to 6.0.0 are vulnerable to Improper Access Control when creating a new user, which leads to a malicious user able to read and send sensitive messages on behalf of the victim user.",
"id": "GHSA-4qcm-h32c-8xq3",
"modified": "2022-07-13T00:01:11Z",
"published": "2022-05-24T17:45:00Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-25920"
},
{
"type": "WEB",
"url": "https://github.com/openemr/openemr/commit/0fadc3e592d84bc9dfe9e0403f8bd6e3c7d8427f"
},
{
"type": "WEB",
"url": "https://www.whitesourcesoftware.com/vulnerability-database/CVE-2021-25920"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-4QF8-MC6Q-42CR
Vulnerability from github – Published: 2022-05-24 19:06 – Updated: 2022-10-26 12:00An information disclosure vulnerability was discovered in the directory and file management of Avaya Aura Appliance Virtualization Platform Utilities (AVPU). This vulnerability may potentially allow any local user to access system functionality and configuration information that should only be available to a privileged user. Affects versions 8.0.0.0 through 8.1.3.1 of AVPU.
{
"affected": [],
"aliases": [
"CVE-2021-25652"
],
"database_specific": {
"cwe_ids": [
"CWE-668",
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2021-06-24T09:15:00Z",
"severity": "MODERATE"
},
"details": "An information disclosure vulnerability was discovered in the directory and file management of Avaya Aura Appliance Virtualization Platform Utilities (AVPU). This vulnerability may potentially allow any local user to access system functionality and configuration information that should only be available to a privileged user. Affects versions 8.0.0.0 through 8.1.3.1 of AVPU.",
"id": "GHSA-4qf8-mc6q-42cr",
"modified": "2022-10-26T12:00:31Z",
"published": "2022-05-24T19:06:03Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-25652"
},
{
"type": "WEB",
"url": "https://support.avaya.com/css/P8/documents/101076479"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-4QG4-CVH2-CRGG
Vulnerability from github – Published: 2024-07-18 15:28 – Updated: 2024-07-19 15:27The UserIdentity::is_verified() method in the matrix-sdk-crypto crate before version 0.7.2 doesn't take into account the verification status of the user's own identity while performing the check and may as a result return a value contrary to what is implied by its name and documentation.
Impact
If the method is used to decide whether to perform sensitive operations towards a user identity, a malicious homeserver could manipulate the outcome in order to make the identity appear trusted. This is not a typical usage of the method, which lowers the impact. The method itself is not used inside the matrix-sdk-crypto crate.
Patches
The 0.7.2 release of the matrix-sdk-crypto crate includes a fix.
Workarounds
None.
{
"affected": [
{
"package": {
"ecosystem": "crates.io",
"name": "matrix-sdk-crypto"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "0.7.2"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2024-40648"
],
"database_specific": {
"cwe_ids": [
"CWE-287",
"CWE-863"
],
"github_reviewed": true,
"github_reviewed_at": "2024-07-18T15:28:07Z",
"nvd_published_at": "2024-07-18T17:15:05Z",
"severity": "MODERATE"
},
"details": "The `UserIdentity::is_verified()` method in the matrix-sdk-crypto crate before version 0.7.2 doesn\u0027t take into account the verification status of the user\u0027s own identity while performing the check and may as a result return a value contrary to what is implied by its name and documentation.\n\n### Impact\n\nIf the method is used to decide whether to perform sensitive operations towards a user identity, a malicious homeserver could manipulate the outcome in order to make the identity appear trusted. This is not a typical usage of the method, which lowers the impact. The method itself is not used inside the `matrix-sdk-crypto` crate.\n\n### Patches\n\nThe 0.7.2 release of the `matrix-sdk-crypto` crate includes a fix.\n\n### Workarounds\n\nNone.\n",
"id": "GHSA-4qg4-cvh2-crgg",
"modified": "2024-07-19T15:27:44Z",
"published": "2024-07-18T15:28:07Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/matrix-org/matrix-rust-sdk/security/advisories/GHSA-4qg4-cvh2-crgg"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2024-40648"
},
{
"type": "WEB",
"url": "https://github.com/matrix-org/matrix-rust-sdk/commit/76a7052149bb8f722df12da915b3a06d19a6695a"
},
{
"type": "PACKAGE",
"url": "https://github.com/matrix-org/matrix-rust-sdk"
},
{
"type": "WEB",
"url": "https://github.com/matrix-org/matrix-rust-sdk/releases/tag/0.7.2-crypto"
},
{
"type": "WEB",
"url": "https://rustsec.org/advisories/RUSTSEC-2024-0356.html"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N",
"type": "CVSS_V3"
},
{
"score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N",
"type": "CVSS_V4"
}
],
"summary": "matrix-sdk-crypto\u0027s `UserIdentity::is_verified` not checking verification status of own user identity while performing the check"
}
GHSA-4QGQ-8279-RRR7
Vulnerability from github – Published: 2026-07-14 21:32 – Updated: 2026-07-14 21:32ColdFusion is affected by an Incorrect Authorization vulnerability that could result in privilege escalation. An attacker could leverage this vulnerability to gain unauthorized read and write access. Exploitation of this issue does not require user interaction. Scope is changed.
{
"affected": [],
"aliases": [
"CVE-2026-48321"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-07-14T21:16:58Z",
"severity": "CRITICAL"
},
"details": "ColdFusion is affected by an Incorrect Authorization vulnerability that could result in privilege escalation. An attacker could leverage this vulnerability to gain unauthorized read and write access. Exploitation of this issue does not require user interaction. Scope is changed.",
"id": "GHSA-4qgq-8279-rrr7",
"modified": "2026-07-14T21:32:23Z",
"published": "2026-07-14T21:32:23Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-48321"
},
{
"type": "WEB",
"url": "https://helpx.adobe.com/security/products/coldfusion/apsb26-82.html"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-4QJ7-X2FH-XJVQ
Vulnerability from github – Published: 2026-07-14 21:32 – Updated: 2026-07-14 21:32ColdFusion is affected by an Incorrect Authorization vulnerability that could result in arbitrary code execution in the context of the current user. Exploitation of this issue does not require user interaction. Scope is changed.
{
"affected": [],
"aliases": [
"CVE-2026-48327"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-07-14T21:16:59Z",
"severity": "CRITICAL"
},
"details": "ColdFusion is affected by an Incorrect Authorization vulnerability that could result in arbitrary code execution in the context of the current user. Exploitation of this issue does not require user interaction. Scope is changed.",
"id": "GHSA-4qj7-x2fh-xjvq",
"modified": "2026-07-14T21:32:23Z",
"published": "2026-07-14T21:32:23Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-48327"
},
{
"type": "WEB",
"url": "https://helpx.adobe.com/security/products/coldfusion/apsb26-82.html"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
"type": "CVSS_V3"
}
]
}
GHSA-4QM3-4V98-G42C
Vulnerability from github – Published: 2021-12-07 00:00 – Updated: 2022-03-18 00:01The WPS Hide Login WordPress plugin before 1.9.1 has a bug which allows to get the secret login page by setting a random referer string and making a request to /wp-admin/options.php as an unauthenticated user.
{
"affected": [],
"aliases": [
"CVE-2021-24917"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2021-12-06T16:15:00Z",
"severity": "HIGH"
},
"details": "The WPS Hide Login WordPress plugin before 1.9.1 has a bug which allows to get the secret login page by setting a random referer string and making a request to /wp-admin/options.php as an unauthenticated user.",
"id": "GHSA-4qm3-4v98-g42c",
"modified": "2022-03-18T00:01:45Z",
"published": "2021-12-07T00:00:29Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-24917"
},
{
"type": "WEB",
"url": "https://wordpress.org/support/topic/bypass-security-issue"
},
{
"type": "WEB",
"url": "https://wpscan.com/vulnerability/15bb711a-7d70-4891-b7a2-c473e3e8b375"
}
],
"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-4QPH-WHWP-XM7R
Vulnerability from github – Published: 2024-03-12 12:30 – Updated: 2024-03-12 12:30A vulnerability has been identified in Siveillance Control (All versions >= V2.8 < V3.1.1). The affected product does not properly check the list of access groups that are assigned to an individual user. This could enable a locally logged on user to gain write privileges for objects where they only have read privileges.
{
"affected": [],
"aliases": [
"CVE-2023-45793"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2024-03-12T11:15:47Z",
"severity": "MODERATE"
},
"details": "A vulnerability has been identified in Siveillance Control (All versions \u003e= V2.8 \u003c V3.1.1). The affected product does not properly check the list of access groups that are assigned to an individual user. This could enable a locally logged on user to gain write privileges for objects where they only have read privileges.",
"id": "GHSA-4qph-whwp-xm7r",
"modified": "2024-03-12T12:30:48Z",
"published": "2024-03-12T12:30:48Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2023-45793"
},
{
"type": "WEB",
"url": "https://cert-portal.siemens.com/productcert/html/ssa-145196.html"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N",
"type": "CVSS_V3"
}
]
}
GHSA-4QQ2-2J2X-X62C
Vulnerability from github – Published: 2026-06-18 14:25 – Updated: 2026-07-20 21:27Summary
The published npm package praisonai exports an MCPSecurity helper described in source as:
MCP Security - Authentication, authorization, and rate limiting
Provides security policies for MCP servers.
Its AuthMethod type advertises five authentication methods:
export type AuthMethod = 'none' | 'api-key' | 'bearer' | 'basic' | 'oauth';
The authentication-policy evaluator, however, only validates credentials for api-key and bearer:
if (policy.auth.method === 'api-key' || policy.auth.method === 'bearer') {
const valid = policy.auth.validate
? await policy.auth.validate(token)
: this.validateApiKey(token);
if (!valid) {
return { allowed: false, reason: 'Invalid credentials' };
}
}
return { allowed: true, context: { authenticated: true } };
For basic and oauth, any non-empty Authorization header skips the supplied validate callback and returns allowed. A local PoV configures auth.validate to always return false; invalid api-key and bearer credentials are rejected, while invalid basic and oauth credentials are accepted without calling the validator.
This is a protection-mechanism failure in the exported npm MCP security helper. It is distinct from the separate issue that the npm MCPServer HTTP transport does not enforce authentication by default.
Technical Details
SecurityPolicy.auth accepts both a method and a validator:
auth?: { method: AuthMethod; validate?: (token: string) => Promise<boolean> };
extractToken() parses both Bearer and Basic headers:
if (auth.startsWith('Bearer ')) {
return auth.slice(7);
}
if (auth.startsWith('Basic ')) {
return auth.slice(6);
}
return auth;
But evaluatePolicy() only calls policy.auth.validate() for two methods:
if (policy.auth.method === 'api-key' || policy.auth.method === 'bearer') {
const valid = policy.auth.validate
? await policy.auth.validate(token)
: this.validateApiKey(token);
if (!valid) {
return { allowed: false, reason: 'Invalid credentials' };
}
}
There is no validation branch for basic or oauth. After extracting any non-empty token, those methods fall through to the success return:
return { allowed: true, context: { authenticated: true } };
check() then ignores successful authentication context and returns a generic allowed result:
return { allowed: true, context: { authenticated: false } };
That context propagation issue is secondary. The security-relevant flaw is that invalid Basic/OAuth credentials are allowed at all.
Why This Is Not Intended Behavior
This is not a claim that every MCPSecurity user must choose Basic or OAuth. The issue is that the API explicitly exposes those methods as authentication methods and accepts a validator callback for the policy, but the implementation does not call the validator for those methods.
The control cases prove the intended security behavior:
- Missing Basic credentials are denied as
Authentication required. - Invalid
api-keycredentials are denied asInvalid credentials. - Invalid
bearercredentials are denied asInvalid credentials.
The only difference in the vulnerable cases is the selected advertised method. Invalid Basic/OAuth credentials should not become authenticated merely because the method is not listed in the two-method validation branch.
This also matches MCP authorization guidance. MCP servers acting as resource servers must validate received access tokens; receiving a token is not proof that it is valid or intended for the server.
PoV
Run from a local reproduction checkout:
node poc/pov_poc.js 1.7.1
The PoV:
- Installs
npm:praisonai@1.7.1into a temporary project with scripts disabled. - Imports
MCPSecurityfrom the package root. - Creates one
authenticatepolicy per method. - Supplies an
auth.validatecallback that always returnsfalse. - Sends invalid
api-key,bearer,basic, andoauthcredentials. - Confirms the missing-header Basic control is still denied.
Observed output summary from evidence/pov-npm-1.7.1.json:
{
"package": "praisonai",
"version": "1.7.1",
"cases": [
{
"method": "api-key",
"validateCalls": 1,
"allowed": false,
"reason": "Invalid credentials"
},
{
"method": "bearer",
"validateCalls": 1,
"allowed": false,
"reason": "Invalid credentials"
},
{
"method": "basic",
"validateCalls": 0,
"allowed": true
},
{
"method": "oauth",
"validateCalls": 0,
"allowed": true
},
{
"method": "basic",
"authorizationHeaderPresent": false,
"validateCalls": 0,
"allowed": false,
"reason": "Authentication required"
}
],
"controlsPass": true,
"vulnerable": true
}
The PoV is local-only. It does not start a server, contact a third-party target, or use live credentials.
PoC
The PoV section above contains the local reproduction command, input, and decisive output.
Impact
A downstream application that uses MCPSecurity to protect an HTTP MCP transport, gateway, or equivalent tool/resource endpoint can believe it has enabled Basic or OAuth authentication while accepting any non-empty Authorization header.
Depending on the protected MCP tools and resources, this can allow an unauthenticated network caller to:
- list protected tools or resources;
- call tools that were intended to require authentication;
- read protected MCP resources;
- trigger agent/workflow actions exposed behind the security helper; and
- bypass audit assumptions based on the configured validator.
This report does not claim that npm PraisonAI wires MCPSecurity into the default MCPServer.startHttp() path. It is a library-level authentication bypass in an exported security component intended to protect MCP servers.
Severity
Suggested severity: High.
Rationale:
AV: the affected helper is intended to protect MCP server requests and equivalent HTTP security checks.AC: a single non-empty Basic or OAuth-style Authorization header is sufficient when such a policy is configured.PR: the bypass grants access without valid credentials.UI: no maintainer or user interaction is required after deployment.S: impact is within the PraisonAI-hosting service and its exposed MCP resources/tools.C: protected MCP resources or tool outputs may be disclosed.I: protected tool calls may perform state-changing actions depending on the registered tools; the score is conservative because the vulnerable helper is library-level and deployment-dependent.A: the PoV does not demonstrate availability impact.
If a deployment protects high-impact write or execution tools with MCPSecurity, maintainers may reasonably score integrity higher.
Suggested Fix
Make authentication evaluation fail closed for every advertised method.
Recommended:
- For
authenticatepolicies, callpolicy.auth.validate(token)whenever it is provided, regardless ofauth.method. - If no validator is provided, only fall back to
validateApiKey()forapi-keywhen that behavior is explicitly intended. - For
bearerandoauth, require a validator or a server-side token validation implementation; otherwise deny with a configuration error. - For
basic, decode the Basic credential safely and pass the decoded username/password or raw credential to a validator; if no validator exists, deny. - Treat unknown or unsupported methods as denied, not allowed.
- Return authenticated context from
check()after a successful authenticate policy instead of replacing it with{ authenticated: false }. - Add regression tests proving invalid credentials are rejected for
api-key,bearer,basic, andoauth, and that each configured validator is called.
Minimal fail-closed shape:
if (policy.type === 'authenticate') {
if (!policy.auth) return { allowed: false, reason: 'Authentication policy is not configured' };
const token = request.headers ? this.extractToken(request.headers) : null;
if (!token) return { allowed: false, reason: 'Authentication required' };
if (policy.auth.validate) {
const valid = await policy.auth.validate(token);
return valid
? { allowed: true, context: { authenticated: true } }
: { allowed: false, reason: 'Invalid credentials' };
}
if (policy.auth.method === 'api-key') {
return this.validateApiKey(token)
? { allowed: true, context: { authenticated: true } }
: { allowed: false, reason: 'Invalid credentials' };
}
return { allowed: false, reason: 'Authentication validator required' };
}
Affected Package/Versions
- Repository:
MervinPraison/PraisonAI - Ecosystem:
npm - Package:
praisonai - Component: TypeScript MCP security helper
src/praisonai-ts/src/mcp/security.ts - Published dist path:
node_modules/praisonai/dist/mcp/security.js - Latest npm package validated:
1.7.1 - Current
origin/mainvalidated:1ad58ca02975ff1398efeda694ea2ab78f20cf3e src/praisonai-ts/package.jsonatorigin/main:praisonai1.7.1
Suggested affected range:
npm:praisonai >= 1.5.1, <= 1.7.1
All published npm 1.x versions were swept locally:
1.0.0through1.5.0: the tested root export was unavailable orMCPSecuritywas not exported as a constructor.1.5.1,1.5.2,1.5.3,1.5.4,1.6.0,1.7.0, and1.7.1: vulnerable.
The package root re-exports this helper:
export {
MCPClient, createMCPClient, getMCPTools,
MCPServer, createMCPServer,
MCPSession as MCPSessionManager, createMCPSession,
MCPSecurity, createMCPSecurity, createApiKeyPolicy, createRateLimitPolicy,
type MCPClientConfig, type MCPSession, type MCPTransportType,
type MCPServerConfig, type MCPServerTool,
type SecurityPolicy, type SecurityResult
} from './mcp';
Advisory History
Visible PraisonAI advisories and prior submissions were checked. The closest public advisory is GHSA-98f9-fqg5-hvq5 / CVE-2026-34953, but that issue is distinct:
GHSA-98f9-fqg5-hvq5affects the PyPI package and PythonOAuthManager.validate_token().- This report affects the npm package and TypeScript
src/praisonai-ts/src/mcp/security.ts. - The prior issue accepts arbitrary Bearer tokens because an empty Python token store falls through to
True. - This issue accepts invalid Basic/OAuth credentials because the TypeScript validator callback is never called for those advertised methods.
- The affected ranges and patched surfaces are different.
The earlier npm MCPServer report is also distinct: it covers missing auth in the HTTP transport by default. This report covers a fail-open branch in the separate exported MCPSecurity helper when users attempt to add Basic/OAuth authentication.
{
"affected": [
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 1.7.1"
},
"package": {
"ecosystem": "npm",
"name": "praisonai"
},
"ranges": [
{
"events": [
{
"introduced": "1.5.1"
},
{
"fixed": "1.7.2"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-57134"
],
"database_specific": {
"cwe_ids": [
"CWE-287",
"CWE-288",
"CWE-863"
],
"github_reviewed": true,
"github_reviewed_at": "2026-06-18T14:25:17Z",
"nvd_published_at": null,
"severity": "HIGH"
},
"details": "## Summary\n\nThe published npm package `praisonai` exports an `MCPSecurity` helper described in source as:\n\n```text\nMCP Security - Authentication, authorization, and rate limiting\nProvides security policies for MCP servers.\n```\n\nIts `AuthMethod` type advertises five authentication methods:\n\n```ts\nexport type AuthMethod = \u0027none\u0027 | \u0027api-key\u0027 | \u0027bearer\u0027 | \u0027basic\u0027 | \u0027oauth\u0027;\n```\n\nThe authentication-policy evaluator, however, only validates credentials for `api-key` and `bearer`:\n\n```ts\nif (policy.auth.method === \u0027api-key\u0027 || policy.auth.method === \u0027bearer\u0027) {\n const valid = policy.auth.validate\n ? await policy.auth.validate(token)\n : this.validateApiKey(token);\n\n if (!valid) {\n return { allowed: false, reason: \u0027Invalid credentials\u0027 };\n }\n}\n\nreturn { allowed: true, context: { authenticated: true } };\n```\n\nFor `basic` and `oauth`, any non-empty `Authorization` header skips the supplied `validate` callback and returns allowed. A local PoV configures `auth.validate` to always return `false`; invalid `api-key` and `bearer` credentials are rejected, while invalid `basic` and `oauth` credentials are accepted without calling the validator.\n\nThis is a protection-mechanism failure in the exported npm MCP security helper. It is distinct from the separate issue that the npm `MCPServer` HTTP transport does not enforce authentication by default.\n\n## Technical Details\n\n`SecurityPolicy.auth` accepts both a method and a validator:\n\n```ts\nauth?: { method: AuthMethod; validate?: (token: string) =\u003e Promise\u003cboolean\u003e };\n```\n\n`extractToken()` parses both Bearer and Basic headers:\n\n```ts\nif (auth.startsWith(\u0027Bearer \u0027)) {\n return auth.slice(7);\n}\nif (auth.startsWith(\u0027Basic \u0027)) {\n return auth.slice(6);\n}\nreturn auth;\n```\n\nBut `evaluatePolicy()` only calls `policy.auth.validate()` for two methods:\n\n```ts\nif (policy.auth.method === \u0027api-key\u0027 || policy.auth.method === \u0027bearer\u0027) {\n const valid = policy.auth.validate\n ? await policy.auth.validate(token)\n : this.validateApiKey(token);\n\n if (!valid) {\n return { allowed: false, reason: \u0027Invalid credentials\u0027 };\n }\n}\n```\n\nThere is no validation branch for `basic` or `oauth`. After extracting any non-empty token, those methods fall through to the success return:\n\n```ts\nreturn { allowed: true, context: { authenticated: true } };\n```\n\n`check()` then ignores successful authentication context and returns a generic allowed result:\n\n```ts\nreturn { allowed: true, context: { authenticated: false } };\n```\n\nThat context propagation issue is secondary. The security-relevant flaw is that invalid Basic/OAuth credentials are allowed at all.\n\n### Why This Is Not Intended Behavior\n\nThis is not a claim that every `MCPSecurity` user must choose Basic or OAuth. The issue is that the API explicitly exposes those methods as authentication methods and accepts a validator callback for the policy, but the implementation does not call the validator for those methods.\n\nThe control cases prove the intended security behavior:\n\n- Missing Basic credentials are denied as `Authentication required`.\n- Invalid `api-key` credentials are denied as `Invalid credentials`.\n- Invalid `bearer` credentials are denied as `Invalid credentials`.\n\nThe only difference in the vulnerable cases is the selected advertised method. Invalid Basic/OAuth credentials should not become authenticated merely because the method is not listed in the two-method validation branch.\n\nThis also matches MCP authorization guidance. MCP servers acting as resource servers must validate received access tokens; receiving a token is not proof that it is valid or intended for the server.\n\n## PoV\n\nRun from a local reproduction checkout:\n\n```bash\nnode poc/pov_poc.js 1.7.1\n```\n\nThe PoV:\n\n1. Installs `npm:praisonai@1.7.1` into a temporary project with scripts disabled.\n2. Imports `MCPSecurity` from the package root.\n3. Creates one `authenticate` policy per method.\n4. Supplies an `auth.validate` callback that always returns `false`.\n5. Sends invalid `api-key`, `bearer`, `basic`, and `oauth` credentials.\n6. Confirms the missing-header Basic control is still denied.\n\nObserved output summary from `evidence/pov-npm-1.7.1.json`:\n\n```json\n{\n \"package\": \"praisonai\",\n \"version\": \"1.7.1\",\n \"cases\": [\n {\n \"method\": \"api-key\",\n \"validateCalls\": 1,\n \"allowed\": false,\n \"reason\": \"Invalid credentials\"\n },\n {\n \"method\": \"bearer\",\n \"validateCalls\": 1,\n \"allowed\": false,\n \"reason\": \"Invalid credentials\"\n },\n {\n \"method\": \"basic\",\n \"validateCalls\": 0,\n \"allowed\": true\n },\n {\n \"method\": \"oauth\",\n \"validateCalls\": 0,\n \"allowed\": true\n },\n {\n \"method\": \"basic\",\n \"authorizationHeaderPresent\": false,\n \"validateCalls\": 0,\n \"allowed\": false,\n \"reason\": \"Authentication required\"\n }\n ],\n \"controlsPass\": true,\n \"vulnerable\": true\n}\n```\n\nThe PoV is local-only. It does not start a server, contact a third-party target, or use live credentials.\n\n## PoC\n\nThe PoV section above contains the local reproduction command, input, and decisive output.\n\n## Impact\n\nA downstream application that uses `MCPSecurity` to protect an HTTP MCP transport, gateway, or equivalent tool/resource endpoint can believe it has enabled Basic or OAuth authentication while accepting any non-empty `Authorization` header.\n\nDepending on the protected MCP tools and resources, this can allow an unauthenticated network caller to:\n\n- list protected tools or resources;\n- call tools that were intended to require authentication;\n- read protected MCP resources;\n- trigger agent/workflow actions exposed behind the security helper; and\n- bypass audit assumptions based on the configured validator.\n\nThis report does not claim that npm PraisonAI wires `MCPSecurity` into the default `MCPServer.startHttp()` path. It is a library-level authentication bypass in an exported security component intended to protect MCP servers.\n\n### Severity\n\nSuggested severity: High.\n\nRationale:\n\n- `AV`: the affected helper is intended to protect MCP server requests and equivalent HTTP security checks.\n- `AC`: a single non-empty Basic or OAuth-style Authorization header is sufficient when such a policy is configured.\n- `PR`: the bypass grants access without valid credentials.\n- `UI`: no maintainer or user interaction is required after deployment.\n- `S`: impact is within the PraisonAI-hosting service and its exposed MCP resources/tools.\n- `C`: protected MCP resources or tool outputs may be disclosed.\n- `I`: protected tool calls may perform state-changing actions depending on the registered tools; the score is conservative because the vulnerable helper is library-level and deployment-dependent.\n- `A`: the PoV does not demonstrate availability impact.\n\nIf a deployment protects high-impact write or execution tools with `MCPSecurity`, maintainers may reasonably score integrity higher.\n\n## Suggested Fix\n\nMake authentication evaluation fail closed for every advertised method.\n\nRecommended:\n\n1. For `authenticate` policies, call `policy.auth.validate(token)` whenever it is provided, regardless of `auth.method`.\n2. If no validator is provided, only fall back to `validateApiKey()` for `api-key` when that behavior is explicitly intended.\n3. For `bearer` and `oauth`, require a validator or a server-side token validation implementation; otherwise deny with a configuration error.\n4. For `basic`, decode the Basic credential safely and pass the decoded username/password or raw credential to a validator; if no validator exists, deny.\n5. Treat unknown or unsupported methods as denied, not allowed.\n6. Return authenticated context from `check()` after a successful authenticate policy instead of replacing it with `{ authenticated: false }`.\n7. Add regression tests proving invalid credentials are rejected for `api-key`, `bearer`, `basic`, and `oauth`, and that each configured validator is called.\n\nMinimal fail-closed shape:\n\n```ts\nif (policy.type === \u0027authenticate\u0027) {\n if (!policy.auth) return { allowed: false, reason: \u0027Authentication policy is not configured\u0027 };\n\n const token = request.headers ? this.extractToken(request.headers) : null;\n if (!token) return { allowed: false, reason: \u0027Authentication required\u0027 };\n\n if (policy.auth.validate) {\n const valid = await policy.auth.validate(token);\n return valid\n ? { allowed: true, context: { authenticated: true } }\n : { allowed: false, reason: \u0027Invalid credentials\u0027 };\n }\n\n if (policy.auth.method === \u0027api-key\u0027) {\n return this.validateApiKey(token)\n ? { allowed: true, context: { authenticated: true } }\n : { allowed: false, reason: \u0027Invalid credentials\u0027 };\n }\n\n return { allowed: false, reason: \u0027Authentication validator required\u0027 };\n}\n```\n\n## Affected Package/Versions\n\n- Repository: `MervinPraison/PraisonAI`\n- Ecosystem: `npm`\n- Package: `praisonai`\n- Component: TypeScript MCP security helper `src/praisonai-ts/src/mcp/security.ts`\n- Published dist path: `node_modules/praisonai/dist/mcp/security.js`\n- Latest npm package validated: `1.7.1`\n- Current `origin/main` validated: `1ad58ca02975ff1398efeda694ea2ab78f20cf3e`\n- `src/praisonai-ts/package.json` at `origin/main`: `praisonai` `1.7.1`\n\nSuggested affected range:\n\n```text\nnpm:praisonai \u003e= 1.5.1, \u003c= 1.7.1\n```\n\nAll published npm `1.x` versions were swept locally:\n\n- `1.0.0` through `1.5.0`: the tested root export was unavailable or `MCPSecurity` was not exported as a constructor.\n- `1.5.1`, `1.5.2`, `1.5.3`, `1.5.4`, `1.6.0`, `1.7.0`, and `1.7.1`: vulnerable.\n\nThe package root re-exports this helper:\n\n```ts\nexport {\n MCPClient, createMCPClient, getMCPTools,\n MCPServer, createMCPServer,\n MCPSession as MCPSessionManager, createMCPSession,\n MCPSecurity, createMCPSecurity, createApiKeyPolicy, createRateLimitPolicy,\n type MCPClientConfig, type MCPSession, type MCPTransportType,\n type MCPServerConfig, type MCPServerTool,\n type SecurityPolicy, type SecurityResult\n} from \u0027./mcp\u0027;\n```\n\n## Advisory History\n\nVisible PraisonAI advisories and prior submissions were checked. The closest public advisory is `GHSA-98f9-fqg5-hvq5` / `CVE-2026-34953`, but that issue is distinct:\n\n- `GHSA-98f9-fqg5-hvq5` affects the PyPI package and Python `OAuthManager.validate_token()`.\n- This report affects the npm package and TypeScript `src/praisonai-ts/src/mcp/security.ts`.\n- The prior issue accepts arbitrary Bearer tokens because an empty Python token store falls through to `True`.\n- This issue accepts invalid Basic/OAuth credentials because the TypeScript validator callback is never called for those advertised methods.\n- The affected ranges and patched surfaces are different.\n\nThe earlier npm `MCPServer` report is also distinct: it covers missing auth in the HTTP transport by default. This report covers a fail-open branch in the separate exported `MCPSecurity` helper when users attempt to add Basic/OAuth authentication.",
"id": "GHSA-4qq2-2j2x-x62c",
"modified": "2026-07-20T21:27:02Z",
"published": "2026-06-18T14:25:17Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-4qq2-2j2x-x62c"
},
{
"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:H/I:L/A:N",
"type": "CVSS_V3"
}
],
"summary": "npm PraisonAI MCPSecurity Basic/OAuth authentication policies accept invalid credentials without validation"
}
GHSA-4QR4-PQWX-M352
Vulnerability from github – Published: 2026-06-12 21:31 – Updated: 2026-06-12 21:31A vulnerability in MISP’s non-REST event editing path allowed an authenticated user with event edit permissions to manipulate the submitted form data and set an event’s sharing_group_id to a sharing group they were not authorized to use. When distribution was set to sharing group distribution, the non-REST save path accepted the submitted sharing_group_id without performing the same sharing group authorization check enforced by the REST edit path.
An attacker could exploit this by tampering with the event edit request and assigning an event to an undisclosed or unauthorized sharing group. This could result in unauthorized use of restricted sharing groups, disclosure of the sharing group name in event listings, and unintended modification of the event’s distribution metadata.
The issue is fixed by validating that the selected sharing group can be used by the current user when the sharing group is changed, and by clearing sharing_group_id when the event distribution is not set to sharing group distribution.
{
"affected": [],
"aliases": [
"CVE-2026-54397"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-06-12T21:16:25Z",
"severity": "MODERATE"
},
"details": "A vulnerability in MISP\u2019s non-REST event editing path allowed an authenticated user with event edit permissions to manipulate the submitted form data and set an event\u2019s sharing_group_id to a sharing group they were not authorized to use. When distribution was set to sharing group distribution, the non-REST save path accepted the submitted sharing_group_id without performing the same sharing group authorization check enforced by the REST edit path.\n\nAn attacker could exploit this by tampering with the event edit request and assigning an event to an undisclosed or unauthorized sharing group. This could result in unauthorized use of restricted sharing groups, disclosure of the sharing group name in event listings, and unintended modification of the event\u2019s distribution metadata.\n\nThe issue is fixed by validating that the selected sharing group can be used by the current user when the sharing group is changed, and by clearing sharing_group_id when the event distribution is not set to sharing group distribution.",
"id": "GHSA-4qr4-pqwx-m352",
"modified": "2026-06-12T21:31:46Z",
"published": "2026-06-12T21:31:46Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-54397"
},
{
"type": "WEB",
"url": "https://github.com/MISP/MISP/commit/609ff6c785d7dae41d22ef43dda9347d34cd2a58"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:L/VI:L/VA:N/SC:H/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-4QVM-73C7-9W94
Vulnerability from github – Published: 2024-05-03 03:31 – Updated: 2024-05-03 03:31Avast Premium Security Sandbox Protection Incorrect Authorization Privilege Escalation Vulnerability. This vulnerability allows local attackers to escalate privileges on affected installations of Avast Premium Security. An attacker must first obtain the ability to execute low-privileged code on the target system in order to exploit this vulnerability.
The specific flaw exists within the implementation of the sandbox feature. The issue results from incorrect authorization. An attacker can leverage this vulnerability to escalate privileges and execute arbitrary code outside the sandbox at medium integrity. Was ZDI-CAN-20178.
{
"affected": [],
"aliases": [
"CVE-2023-42124"
],
"database_specific": {
"cwe_ids": [
"CWE-863"
],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2024-05-03T03:15:51Z",
"severity": "MODERATE"
},
"details": "Avast Premium Security Sandbox Protection Incorrect Authorization Privilege Escalation Vulnerability. This vulnerability allows local attackers to escalate privileges on affected installations of Avast Premium Security. An attacker must first obtain the ability to execute low-privileged code on the target system in order to exploit this vulnerability.\n\nThe specific flaw exists within the implementation of the sandbox feature. The issue results from incorrect authorization. An attacker can leverage this vulnerability to escalate privileges and execute arbitrary code outside the sandbox at medium integrity. Was ZDI-CAN-20178.",
"id": "GHSA-4qvm-73c7-9w94",
"modified": "2024-05-03T03:31:04Z",
"published": "2024-05-03T03:31:04Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2023-42124"
},
{
"type": "WEB",
"url": "https://www.zerodayinitiative.com/advisories/ZDI-23-1474"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L",
"type": "CVSS_V3"
}
]
}
Mitigation
- 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
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
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
- 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
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.
No CAPEC attack patterns related to this CWE.