FlawOpen

flawopen.com/AI Security/langroid-neo4j-cypher-injection-cve-2026-55615

● CVE-2026-55615 · CVSS v4 9.2[1] · अति गंभीर
सुरक्षा अनुसंधान · FlawOpen

Langroid CVE-2026-55615: prompt-to-Cypher इंजेक्शन

Langroid ने मॉडल से बने Cypher को बिना जाँच Neo4j भेजा। 0.65.5 में अपडेट करें; डेटाबेस अनुमतियाँ ही सुरक्षा सीमा हैं।[1], [2], [4]

CVSS वेक्टरCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N[1]
💡 आसान भाषा में (ELI5)

एक पुस्तकालयाध्यक्ष सामान्य भाषा का सवाल लेकर उससे बने डेटाबेस निर्देश सीधे अधिक अधिकार वाले कर्मचारी को देता है। कोई दुर्भावनापूर्ण नोट सवाल बदल दे, तब भी कर्मचारी निर्देश चलाता है। CVE-2026-55615 में अविश्वसनीय सामग्री Langroid द्वारा Neo4j को भेजे गए Cypher को प्रभावित कर सकती थी।[1]

इस पेज के मुख्य शब्द

Cypher
Neo4j की ग्राफ डेटा पढ़ने और बदलने की query भाषा। अन्य procedures सर्वर सेटिंग और खाते के अधिकारों पर निर्भर करते हैं।[1]
Neo4jChatAgent
Langroid agent जो सामान्य भाषा के काम को Cypher में बदलकर पढ़ने या बनाने वाले tools से Neo4j भेजता है।[1], [3]
Prompt injection
अविश्वसनीय input मॉडल का व्यवहार बदलता है। मॉडल से बनी queries को अविश्वसनीय input मानना चाहिए।[1]
Least-privilege database role
केवल जरूरी data और operations तक सीमित database identity। ऐप में validation होने पर भी यह अनुमति सीमा जरूरी है।[1], [5]
Cypher क्वेरी सत्यापनकर्ता
Langroid 0.65.5 का सत्यापनकर्ता कीवर्ड और पैटर्न जाँचता है। दस्तावेज़ चेतावनी देता है कि इन जाँचों को बायपास किया जा सकता है; ये केवल रक्षा की एक अतिरिक्त परत हैं, प्राधिकरण सीमा नहीं। पहुँच Neo4j भूमिका-अनुमतियों से लागू करें।[6], [3]

फ्रेमवर्क मैपिंग

  • इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-74

हमले का चरण-दर-चरण प्रवाह

चरण 1

कमजोर graph agent मॉडल की query स्वीकारता है

Langroid 0.65.4 और पुराने संस्करण प्रभावित हैं। हमले में prompt को सीधे या retrieved सामग्री से प्रभावित करना और मॉडल का Neo4jChatAgent tool इस्तेमाल करना जरूरी है। Advisory CWE-74 और CVSS 4.0 9.2 (Critical) बताती है।[1], [2]

चरण 2

सामग्री भेजे जाने वाले Cypher को प्रभावित करती है

कमजोर पथ में cypher_retrieval_tool msg.cypher_query को read_query और cypher_creation_tool query को write_query देता था। Advisory के अनुसार बिना बीच की जाँच के मान session.run(query, parameters) और tx.run(query, parameters) तक पहुँचते थे।[1], [3]

चरण 3

डेटाबेस अधिकार तत्काल प्रभाव तय करते हैं

पढ़ने वाला tool जुड़े खाते को उपलब्ध graph data उजागर कर सकता है; बनाने वाला tool उसी खाते के अधिकार में data बदल या मिटा सकता है। Advisory LOAD CSV से remote fetch भी बताती है। Host file या command access enabled procedures और DB grants पर निर्भर है।[1]

चरण 4

0.65.5 tool सीमा पर जाँच जोड़ता है

Maintainer के अनुसार 0.65.5 allow_dangerous_operations को default बंद रखता, पढ़ने को read-only बनाता और tool handlers में कुछ खतरनाक operations जाँचता है। ये जाँच defense-in-depth हैं, authorization नहीं। Maintainer का समाधान और Langroid की SQL-agent मार्गदर्शिका न्यूनतम-अधिकार वाले database roles को सुरक्षा सीमा बताते हैं।[1], [3], [4], [5]

चरण 5

अपडेट करें और DB अधिकार सीमित रखें

Langroid 0.65.5 या नए संस्करण में अपडेट करें, deployed images का version जाँचें और dangerous option बंद रखें। न्यूनतम अधिकार वाला Neo4j role दें, अनावश्यक procedures बंद करें और agent host सीमित करें।[4], [5]

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

कमजोर code अंश advisory के call path का अनुसरण करता है। सुरक्षित उदाहरण 0.65.5 का व्यवहार संक्षेप में दिखाता है, शब्दशः patch नहीं। सुधार tool सीमा पर जाँचता, read को सीमित करता और खतरनाक संचालन नियंत्रित करता है। Query जाँच को defense-in-depth मानें, authorization नहीं। Maintainer का समाधान और Langroid की SQL-agent मार्गदर्शिका न्यूनतम-अधिकार वाले Neo4j roles को सुरक्षा सीमा बताते हैं; agent process को भी अलग रखें। Langroid दस्तावेज़ के अनुसार, कीवर्ड और पैटर्न जाँच को बायपास किया जा सकता है; नियंत्रण सीमा Neo4j अनुमतियों को ही रखें।[1], [3], [4], [6]

कमज़ोर कार्यान्वयन
# Neo4jChatAgent का vulnerable path (Langroid <= 0.65.4)।
def cypher_retrieval_tool(self, msg: CypherRetrievalTool):
    query = msg.cypher_query
    return self.read_query(query)

def read_query(self, query: str):
    with self.driver.session() as session:
        return session.run(query, parameters=None)
सुरक्षित और सुदृढ़ फ़िक्स
# 0.65.5 का व्यवहार: LLM-facing tool boundary पर validation करें।
def cypher_retrieval_tool(self, msg: CypherRetrievalTool):
    query = msg.cypher_query
    rejection = validate_cypher_query(
        query, is_write=False,
        allow_dangerous=self.config.allow_dangerous_operations,
    )
    if rejection is not None:
        return rejection
    return self.read_query(query)

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

स्रोत

← AI Security Directory →