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]
💡 わかりやすい解説 (ELI5)
司書が普通の質問を受け取り、生成されたデータベース命令を強い権限を持つ担当者へそのまま渡す状況を想像してください。悪意あるメモで質問が変わっても担当者は命令を実行します。CVE-2026-55615では、信頼できない内容がLangroidからNeo4jへ送られるCypherに影響しました。[1]
主要な概念と専門用語
Cypher- Neo4jのグラフデータを読み書きするクエリー言語です。追加プロシージャの利用可否はサーバー設定とアカウント権限に依存します。[1]
Prompt injection- 信頼できない入力がモデルの動作を変えることです。モデル生成クエリーは信頼できない入力として扱います。[1]
フレームワーク対応
- このガイドで説明する弱点の CWE 参照: CWE-74
ステップ・バイ・ステップの攻撃フロー
ステップ 1
ステップ 2
ステップ 3
DB権限が直接的な影響を決める
読み取りツールは接続アカウントが見られるデータを露出し、作成ツールは権限内で変更・削除できます。LOAD CSVによるリモート取得も指摘されています。ホスト上のファイルやコマンドへのアクセスは有効な手続きとDB権限に依存します。[1]
ステップ 4
ソースコード比較:脆弱 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)
エンジニアリング&システム堅牢化チェックリスト
- ✓Langroidの導入環境とlockfileを調べ、対象を0.65.5以降へ更新してイメージを再構築します。[1], [4]
- ✓レビューと記録のある例外がない限りallow_dangerous_operations=Falseを維持します。[1], [4]
- ✓エージェントごとにNeo4j専用ロールを作成し、必要なデータ、ラベル、操作、手続きだけ許可します。[1], [5]
- ✓不要なAPOC、dbms.security、LOAD CSVやファイル・ネットワーク・OS機能を無効にして実効権限を確認します。[1]
- ✓読み取りツールを読み取り専用にし、重要な書き込みは別途承認します。[1], [4]
- ✓通常の読み取りが成功し、無害なポリシーテスト用クエリーがdriver呼び出し前に拒否されることをテストします。[3], [4]
- ✓エージェントホストのファイル、秘密情報、ネットワークへのアクセスを制限します。[1]
- ✓脆弱期間のDBログとエージェントトレースを確認し、露出の可能性がある資格情報をローテーションします。