🇰🇷 한글 설명
RedisChatMemoryRepository.findByMetadata() 메서드가 사용자 입력값에 대해 RediSearch 특수 문자를 이스케이프 처리하지 않아 발생합니다. 공격자가 조작된 메타데이터 값을 전달하면 RediSearch 구문을 주입하여 인덱스 내의 모든 채팅 메시지를 조회할 수 있습니다.
💡 쉬운 설명
채팅 기록을 검색할 때 사용자가 입력한 값을 제대로 검사하지 않아 발생하는 보안 문제입니다. 나쁜 의도를 가진 사용자가 특수 기호를 입력하면 다른 사람의 모든 대화 내용을 몰래 훔쳐볼 수 있습니다.
🇺🇸 원문 (English)
RedisChatMemoryRepository.findByMetadata() builds RediSearch tag and text queries from caller-supplied metadata values without applying RediSearchUtil.escape(), unlike get(), clear(), and findByTimeRange() in the same class which do escape their inputs. An application that passes user-controlled values to findByMetadata() on a tag-typed metadata field allows an attacker to inject RediSearch syntax (e.g. x} | *) that breaks out of the tag clause and matches all indexed chat messages across every conversation in the index.
Spring AI 2.0.0
📍 영향받는 시스템
Spring AI 2.0.0
⚔️ 공격 벡터
사용자 제어 가능한 메타데이터 값을 통한 RediSearch 구문 주입 (Injection)
🛡️ 대응 방법
Spring AI를 최신 보안 패치 버전으로 업데이트하거나, 입력값에 대해 RediSearchUtil.escape()를 적용해야 합니다.
🔧 검증 코드
출력 결과에 spring-ai 버전이 2.0.0으로 표시되면 해당 취약점에 노출된 상태입니다.
mvn dependency:list | grep spring-ai