CVE-2026-70473: Flowise: Information Disclosure in GET /api/v1/upsert-history returns the entire server-wide upsert history
In Flowise 3.1.2 and earlier, `GET /api/v1/upsert-history` returns the upsert history of the whole server, not just the caller's workspace. The reporter received a response over 100 MB that included vector store settings such as Qdrant server URLs and collection names. Upgrade flowise to 3.1.3.
Published Aug 4, 2026 · Analysis Oct 25, 2026
What an attacker can do
The endpoint applies no tenant or workspace scoping and no pagination. The report observed a global history in the response, which the reporter says points to missing authorization checks and missing data scoping. Each history record holds the node parameters used in the upsert. In the example excerpt, a Qdrant node shows qdrantServerUrl (a cloud Qdrant hostname), qdrantCollection, qdrantVectorDimension (1536), contentPayloadKey and metadataPayloadKey.
That is reconnaissance material. An attacker learns which vector databases other tenants use, where they are hosted, the collection names and the schema of stored documents. It may support a targeted follow-up attack against those services. The advisory does not show API keys in the excerpt.
The reporter reproduced it with a plain curl against the endpoint on the hosted Flowise Cloud service using a logged-in session, saved the output to a file and checked the size. The vector lists low privileges. A second effect is load: repeated downloads of a response of that size can use up bandwidth, CPU and memory on the server, which the advisory flags as a denial of service risk.
Who is affected
The flowise npm package, version 3.1.2 and earlier. Any deployment that stores upsert history is exposed, and multi-workspace or multi-user setups most of all. Check the version:
npm ls flowiseCalling GET /api/v1/upsert-history with a low-privilege session and receiving data from other workspaces confirms the issue.
flowise
- Ecosystem
- npm
- Affected
- <= 3.1.2
- Fixed in
- 3.1.3
- Check
npm ls flowise
How to fix it
Upgrade flowise to 3.1.3.
npm install -g [email protected]The fix is in pull request 6170. The advisory gives no workaround. If the endpoint was reachable by users you do not fully trust, review which vector databases and collections appear in your history, and restrict network access to those services. Rotate any API keys you put into node parameters that were stored in history.
How to tell if you were hit
Check access logs for GET /api/v1/upsert-history calls, particularly from non-admin users or addresses you do not recognize, and for unusually large responses (tens or hundreds of megabytes) and repeated calls. Check the Qdrant or other vector store access logs for connections from unfamiliar addresses to the collections listed in your history. Look at the size of your upsert history table, since it determines how much a single request leaks.
Original advisory
From the GitHub Advisory Database (CC BY 4.0).
Summary
The GET `/api/v1/upsert-history` endpoint returns the entire server-wide upsert history (response size >100MB) instead of being scoped to the requesting user/tenant/workspace. The response includes sensitive configuration data (e.g., Vector Store settings such as Qdrant Server URL and collection name), resulting in a High severity information disclosure that may enable further targeted attacks.
Details
- Affected endpoint:
GET /api/v1/upsert-history - Observed behavior: The API returns global upsert history for the whole server, indicating missing/insufficient:
- Authorization checks (RBAC/user-based access control)
- Data scoping (workspace/project/tenant isolation)
- Pagination/limits (excessive data exposure and very large responses)
- Sensitive data exposure: The returned history contains integration parameters and infrastructure details. Example excerpt from the response: ```json { "label": "Qdrant", "name": "qdrant", "category": "Vector Stores", "id": "qdrant_0", "paramValues": [ { "label": "Qdrant Server URL", "name": "qdrantServerUrl", "type": "string", "value": "https://7f60f255-f7fd-4a1c-a734-fbcf904f9f85.europe-west3-0.gcp.cloud.qdrant.io" }, { "label": "Qdrant Collection Name", "name": "qdrantCollection", "type": "string", "value": "fair-herring-azure" }, { "label": "Vector Dimension", "name": "qdrantVectorDimension", "type": "number", "value": 1536 }, { "label": "Content Key", "name": "contentPayloadKey", "type": "string", "value": "content" }, { "label": "Metadata Key", "name": "metadataPayloadKey", "type": "string", "value": "metadata" }, { "label": "Similarity", "name": "qdrantSimilarity", "type": "options", "value": "Cosine" } ] }
POC
- Using
curland call the enpointGET /api/v1/upsert-history, sever returns the entire server-wide upsert history
curl 'https://cloud.flowiseai.com/api/v1/upsert-history' -X GET -H 'Host: cloud.flowiseai.com' -H 'Accept: application/json, text/plain, */*' -H 'Accept-Language: en-US,en;q=0.9' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0' -H 'X-Request-From: internal' -H 'Referer: https://cloud.flowiseai.com/document-stores/vector/27d7e649-72c9-4333-836f-0a32b7ecda57/719bc75c-5810-4d22-aa03-35c7831b8819' -H 'If-None-Match: W/"156-Xbc+zqRKlJRZDUydYMybuU4SQnY"' -H 'Connection: keep-alive' -H 'Cookie: _ga_DG9QMLV4DR=GS2.1.s1773632276$o1$g0$t1773632915$j60$l0$h0; _ga=GA1.1.938844242.1773632276; cf_clearance=Ug4PTMCbO8G.9n7ibaRBT.Y74flswLTgbR6V4qQbKUE-1773715307-1.2.1.1-2XGkql2bE8imFOsQJuw0x8yM9XW7QWbEe8ALEZ39Bm03kZu.vJLusY5_cRurAooKcK0XuqTjWgibQXYwWF91LbQZIXFefNzXuz6f8O7VzY5VM_h9p0_xICarIdDdB0hWfriItN1qbu00tqEmDgE_v2biNpNETXF3nC0wByJmhNWOcSh95lBd_Q5vALJQ0hc7pzhbPh.OuLbLtcCOlEv1YbwZWMSynj3hglpCeVkWqkM; connect.sid=s%3Axrkhl0YSNjvydmo24ASe3ezLStuedRCv.JABLEZmfWP74D9zGvFyDEELHFXqvDxHRnN3mJBhsKX8; token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjJlNGUwYTI4LTNkMWEtNDc0Ny05NmYzLWI1YzE1YTA1NDg4YyIsInVzZXJuYW1lIjoiVHJ1b25nIE5ndXllbiIsIm1ldGEiOiJhYjFiNzVjZTNmZmMyMzAzMTMwMmYwOGQ2MzU2YjQ3NjoxMTUzNzk3NDU1YTRhMmVhMDc3YWM0ODExNmRjMjhiOTNmZDlmMzg0OTAxZjhlNDliZTk2NjczMGM3N2YyZTc0ZjVkODNkYTJjMjNlOWZjNWM5ZDdmYzQ1ZDY2MmM0NWQwZWQ3MTMzYmZiZTA1MTAxZGRjNjY4OGYxZTJiNDZjNWU2YjU5OTdjMmE3OWVjNjc2MWU5NDZhYTkyNjg3MDY4IiwiaWF0IjoxNzczNzEzNTk0LCJuYmYiOjE3NzM3MTM1OTQsImV4cCI6MTc3MzczNTE5NCwiYXVkIjoiQVVESUVOQ0UiLCJpc3MiOiJJU1NVRVIifQ.UDFurQPA6-bKQ7mZg0Qetu6yAv1UK3vaz27ZUhUoamc; refreshToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjJlNGUwYTI4LTNkMWEtNDc0Ny05NmYzLWI1YzE1YTA1NDg4YyIsInVzZXJuYW1lIjoiVHJ1b25nIE5ndXllbiIsIm1ldGEiOiJhNmU2MjJjNmFiMWU1MWEwYzcwNmViOWVkODA2MDFmZjpjYjIyN2ZhMjA4ZDIwYjk0NjAxMjFlNDhkZTZjZDg4Yzk0NmMwNzBjZjhhMGYwNDBlNzEzOTkzOTkyMzNmZWQ3ZWViNjk0ZmE3NGY4MGJkOTA1ZjZkM2I2Y2FlYmI5YmRjMWQ3YTgxZjMxNzBkYjI5MDJlMGYzNmZiN2I0ZDc2YWRkNjkzZmI5YWE5OGNjYjc1ZWI0OGVmMjBjMWNjNmU4IiwiaWF0IjoxNzczNjMzMDA0LCJuYmYiOjE3NzM2MzMwMDQsImV4cCI6MTc3NjIyNTAwNCwiYXVkIjoiQVVESUVOQ0UiLCJpc3MiOiJJU1NVRVIifQ.0HlslRzoFo0Tlt4Jbn9gnEwsQej4ilMd8qjhLBZQO5Q; __cf_bm=.BG97WtFqwwk0DMVJB1BlcHRdhQv70bLu4f_QpH5qo4-1773721030-1.0.1.1-IwhUPW6O9uNcNsOZl7LLgpnm8_ll18rzoOFu085wZQQgTvVvaPwVFJObxSJ1.NRyS5MWsRbJi1BhUNMTJjSR2s9EyuSBzn2s_eXblq8rTh8' --compressed -sS -o resp.json- Verify the response size (expected: very large, e.g., >100MB)
ls -lh resp.jsonImpact
- Vulnerability type: Information Disclosure / Broken Access Control (missing authorization and/or missing tenant/workspace scoping)
- Who is impacted: All users/tenants/workspaces whose upsert history and configuration data are included in the server-wide history
- Security consequences:
- Exposure of infrastructure/integration details (e.g., Qdrant endpoint URLs, collection names, vector dimensions), enabling reconnaissance and targeted follow-up attacks
- Leakage of internal schema/pipeline details (e.g., content/metadata keys)
- Potential resource abuse: repeated downloads of a >100MB response can increase bandwidth/CPU/memory load (amplifying DoS risk)
Credited to truongvip1.
Questions
- What data does CVE-2026-70473 leak?
Upsert history records for the whole server, including node parameters such as Qdrant server URLs, collection names, vector dimensions and payload key names. The reporter's response exceeded 100 MB.
- Does the attacker need to be logged in?
The reporter used a logged-in session on Flowise Cloud, and the vector lists low privileges required. The advisory points to missing authorization and scoping.
- Is there a denial of service angle?
The advisory says repeated downloads of a response this large can raise bandwidth, CPU and memory load. It lists this as a potential risk, not a demonstrated outage.
References
Read for this analysis:
How this page is made: the data panel comes from the GitHub Advisory Database, CISA’s KEV catalog, the NVD and FIRST EPSS, and updates twice a day. The analysis is written by an AI model from the sources listed above and checked by automated rules before it is published. Check versions against the vendor's advisory before you act. Methodology
More Flowise vulnerabilities
All Flowise entriesCVE-2026-73483
Flowise NodeVM sandbox escape via puppeteer allowlist - authenticated RCE and arbitrary file read via Chromium
critical9.4Oct 7, 2026CVE-2026-73487
Flowise Prompt Injection to RCE and SSRF via CSV/Airtable Agent Python Validator Bypass
critical9.0Oct 7, 2026CVE-2026-69250
Flowise: Unauthenticated OAuth2 Refresh Enables Non-Blind SSRF and Secret Exfiltration
high8.5Aug 4, 2026CVE-2026-69251
Flowise RCE via TypeORM DataSource
critical9.0Aug 4, 2026CVE-2026-69252
Flowise: Missing authorization on `/api/v1/files` allows low-privileged API keys to list and delete files across workspaces within the same organization
high7.2Aug 4, 2026CVE-2026-69253
Flowise Sandbox Escape to RCE
critical9.0Aug 4, 2026
