flawopen.com/AI Security/langroid-neo4j-cypher-injection-cve-2026-55615
Langroid CVE-2026-55615: 프롬프트-to-Cypher 인젝션
Langroid는 모델 생성 Cypher를 검증 없이 Neo4j에 전달했습니다. 0.65.5로 업데이트하세요. DB 권한이 여전히 보안 경계입니다.[1], [2], [4]
사서가 일반 질문을 받고 만들어진 데이터베이스 명령을 권한이 강한 직원에게 그대로 전달한다고 상상해 보세요. 악성 쪽지가 질문을 바꿔도 직원은 명령을 실행합니다. CVE-2026-55615는 신뢰할 수 없는 콘텐츠가 Langroid에서 Neo4j로 보내는 Cypher에 영향을 줄 수 있게 했습니다.[1]
핵심 개념 및 용어
Cypher- Neo4j에서 그래프 데이터를 읽고 바꾸는 쿼리 언어입니다. 추가 절차 실행은 서버 설정과 계정 권한에 달려 있습니다.[1]
Prompt injection- 신뢰할 수 없는 입력이 모델 동작을 바꿉니다. 모델 생성 쿼리는 신뢰할 수 없는 입력으로 다뤄야 합니다.[1]
프레임워크 매핑
- 이 가이드에서 설명하는 약점의 CWE 참조: CWE-74
단계별 공격 실행 흐름
DB 권한이 직접 영향을 결정
읽기 도구는 연결 계정이 볼 수 있는 그래프 데이터를 노출하고 생성 도구는 그 권한 안에서 변경하거나 삭제할 수 있습니다. LOAD CSV 원격 가져오기도 언급됩니다. 호스트 파일 또는 명령 접근은 활성 절차와 DB 권한에 달려 있습니다.[1]
소스 코드 비교: 취약한 구현 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]
- ✓일반 읽기는 성공하고 무해한 정책 테스트 쿼리는 드라이버 호출 전에 거부되는지 테스트합니다.[3], [4]
- ✓에이전트 호스트의 파일, 비밀정보, 네트워크 접근을 제한합니다.[1]
- ✓취약 기간의 DB 로그와 에이전트 추적을 검토하고 노출 가능성이 있는 자격 증명을 교체합니다.