🇰🇷 한글 설명
Go 언어용 Excel 라이브러리인 Excelize의 2.10.1에서 2.11.0 버전 사이에서 발생하는 취약점입니다. RIGHT 함수가 UTF-16 코드 단위와 Unicode 코드 포인트 간의 불일치로 인해 음수 인덱스를 생성할 수 있으며, 이로 인해 수식 계산 중 패닉(Panic)이 발생할 수 있습니다.
💡 쉬운 설명
엑셀 수식을 계산할 때 글자 수를 세는 방식이 서로 달라 발생하는 오류입니다. 특수한 문자가 포함된 파일을 열어 수식을 실행하면 프로그램이 갑자기 멈추거나 강제 종료될 수 있습니다.
🇺🇸 원문 (English)
Excelize is a Go language library for reading and writing Microsoft Excel spreadsheets. From 2.10.1 to 2.11.0, RIGHT validates the requested length with UTF-16 code-unit counts but slices a rune array using Unicode code-point counts. RIGHT reaches leftRight through CalcCellValue, where countUTF16String validates one unit but utf8.RuneCountInString supplies the slice index in another. When RIGHT evaluates supplementary-plane text with a requested character count between the rune count and UTF-16 code-unit count, the inconsistent units produce a negative rune-slice index, allowing an attacker to panic during formula evaluation. No fixed version is available as of this review.
📍 영향받는 시스템
Excelize library versions 2.10.1 to 2.11.0
⚔️ 공격 벡터
공격자가 특수 문자가 포함된 엑셀 파일을 작성하여 피해자가 수식을 계산하도록 유도함
🛡️ 대응 방법
현재 수정 버전이 없으므로, 해당 라이브러리 사용 시 입력값 검증을 강화하거나 패치 출시를 기다려야 함
🔧 검증 코드
출력된 버전이 2.10.1에서 2.11.0 사이인지 확인하여 취약 여부를 판단합니다.
go list -m github.com/xuri/excelize/v2 2>/dev/null