🇰🇷 한글 설명
Go 언어용 Excel 라이브러리인 Excelize의 2.8.0에서 2.11.0 버전 사이에서 스타일 추출 시 인덱스 범위 검증 오류가 발생합니다. 공격자가 조작된 styles.xml 파일을 통해 음수 ID 값을 제공하면, 상한선만 체크하는 검증 로직을 통과하여 음수 슬라이스 인덱스 참조로 인한 패닉(Panic)이 발생할 수 있습니다.
💡 쉬운 설명
엑셀 파일을 읽는 프로그램이 잘못된 숫자가 들어있는 파일을 읽을 때, 프로그램이 예상치 못한 오류를 일으키며 갑자기 멈춰버릴 수 있는 문제입니다. 공격자가 특수하게 제작된 엑셀 파일을 보내 프로그램의 작동을 방해할 수 있습니다.
🇺🇸 원문 (English)
Excelize is a Go language library for reading and writing Microsoft Excel spreadsheets. From 2.8.0 to 2.11.0, GetStyle's fill, border, and font extraction predicates check only upper bounds for attacker-controlled style-table indices. File.GetStyle relies on extractStyleCondFuncs predicates that allow negative FillID, BorderID, and FontID values to reach slice indexing. When a crafted styles.xml supplies a negative fillId, borderId, or fontId and the application reads the style, a negative identifier passes the upper-bound-only predicate and becomes a negative slice index, allowing an attacker to panic while reading cell styling. No fixed version is available as of this review.
📍 영향받는 시스템
Excelize library (Go language) versions 2.8.0 to 2.11.0
⚔️ 공격 벡터
조작된 styles.xml 파일 내에 음수 fillId, borderId 또는 fontId를 포함시켜 전달
🛡️ 대응 방법
현재 고정된 버전이 없으므로, 해당 라이브러리 사용 시 입력 데이터의 스타일 인덱스에 대한 엄격한 유효성 검증 로직을 직접 구현하거나 패치 업데이트를 대기해야 함
🔧 검증 코드
출력된 버전 번호가 2.8.0 이상 2.11.0 이하인지 확인
go list -m github.com/xuri/excelize/v2 2>/dev/null