🇰🇷 한글 설명
LiquidJS 템플릿 엔진의 strip_html 필터에서 특정 조건의 입력값이 들어올 경우 무한 루프가 발생하는 취약점입니다. 입력 문자열에 '<'는 포함되어 있으나 '>'가 없는 경우 루프 인덱스가 업데이트되지 않아 템플릿 렌더링이 중단됩니다. 이로 인해 서비스 거부(DoS) 공격이 가능하며, 버전 10.27.1에서 수정되었습니다.
💡 쉬운 설명
특정한 모양의 글자를 입력하면 프로그램이 끝없이 계산을 반복하느라 멈춰버리는 문제입니다. 아주 짧은 글자만으로도 웹사이트 서비스를 마비시킬 수 있습니다.
🇺🇸 원문 (English)
LiquidJS is a Shopify / GitHub Pages compatible template engine in pure JavaScript. From 10.26.0 until 10.27.1, the strip_html filter in src/filters/html.ts can enter an infinite loop when an input string contains <, includes at least one preceding character, and has no later >. In strip_html, the search for the next opener advances lt while the loop index remains unchanged when the closer search returns -1, and the equality-only stall guard does not exit because the loop index is less than lt. Reprocessing the same state indefinitely blocks template rendering and can cause denial of service with an input as short as a<. This issue is fixed in version 10.27.1.
📍 영향받는 시스템
LiquidJS 10.26.0 ~ 10.27.1 버전
⚔️ 공격 벡터
템플릿 엔진에 '<'로 시작하고 '>'가 없는 특수 문자열을 입력하여 무한 루프 유도
🛡️ 대응 방법
LiquidJS를 10.27.1 이상의 최신 버전으로 업데이트
🔧 검증 코드
출력된 버전이 10.26.0 이상 10.27.1 미만인지 확인