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:プロンプトからCypherへの注入

Langroidはモデル生成Cypherを検証せずNeo4jへ渡していました。0.65.5以降へ更新してください。DB権限が依然としてセキュリティ境界です。[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のグラフデータを読み書きするクエリー言語です。追加プロシージャの利用可否はサーバー設定とアカウント権限に依存します。[1]
Neo4jChatAgent
自然言語のタスクをCypherに変換し、読み取り・作成ツール経由でNeo4jに送るLangroidエージェントです。[1], [3]
Prompt injection
信頼できない入力がモデルの動作を変えることです。モデル生成クエリーは信頼できない入力として扱います。[1]
Least-privilege database role
必要なデータと操作だけを許可するデータベースIDです。アプリ側に検証があってもこの権限境界が重要です。[1], [5]
Cypher クエリバリデーター
Langroid 0.65.5 のバリデーターはキーワードとパターンを検査します。ドキュメントはこれらの検査が回避可能であると警告しており、これは多層防御であって認可境界ではありません。アクセスは Neo4j のロール権限で制御してください。[6], [3]

フレームワーク対応

  • このガイドで説明する弱点の CWE 参照: CWE-74

ステップ・バイ・ステップの攻撃フロー

ステップ 1

脆弱なグラフエージェントがモデルのクエリーを受け取る

Langroid 0.65.4以前が対象です。攻撃にはプロンプトへの直接または取得コンテンツ経由の影響と、Neo4jChatAgentツールの呼び出しが必要です。アドバイザリはCWE-74、CVSS 4.0 9.2(Critical)を示します。[1], [2]

ステップ 2

内容が送信されるCypherに影響する

脆弱な経路ではcypher_retrieval_toolがmsg.cypher_queryをread_queryへ、cypher_creation_toolがクエリーをwrite_queryへ渡していました。アドバイザリは中間検証なしでsession.run(query, parameters)およびtx.run(query, parameters)に到達すると説明しています。[1], [3]

ステップ 3

DB権限が直接的な影響を決める

読み取りツールは接続アカウントが見られるデータを露出し、作成ツールは権限内で変更・削除できます。LOAD CSVによるリモート取得も指摘されています。ホスト上のファイルやコマンドへのアクセスは有効な手続きとDB権限に依存します。[1]

ステップ 4

0.65.5でツール境界に検査を追加

メンテナーによれば0.65.5はallow_dangerous_operationsを既定で無効にし、読み取りを制限してツール内で選択した危険操作を検査します。これらは多層防御であり、認可ではありません。メンテナーの修正説明とLangroidのSQLエージェント向けガイドは、最小権限のデータベースロールがセキュリティ境界になると示しています。[1], [3], [4], [5]

ステップ 5

更新してDB側の権限を制限

Langroidを0.65.5以降へ更新し、配備イメージの解決済みバージョンを確認して危険オプションを無効のままにします。Neo4jには最小権限ロールを使い、不要な手続きとホスト権限を制限します。[4], [5]

ソースコード比較:脆弱 vs 堅牢化

脆弱な例はアドバイザリの呼び出し経路に沿っています。修正版は0.65.5の動作を示す要約で、逐語的なパッチではありません。ツール境界で検証し、読み取りを制限し、危険操作を制御します。クエリ検査は認可ではなく多層防御として扱ってください。メンテナーの修正説明とLangroidのSQLエージェント向けガイドは、最小権限のNeo4jロールがセキュリティ境界になると示しています。エージェントのプロセスも隔離してください。 Langroid のドキュメントは、キーワードとパターンの検査は回避可能と説明しています。アクセス制御境界は Neo4j の権限に置いてください。[1], [3], [4], [6]

脆弱な実装
# 脆弱な Neo4jChatAgent の経路(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 に公開されたツール境界で検証します。
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 →