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: 프롬프트-to-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 →