🇰🇷 한글 설명
Go 언어용 Excel 라이브러리인 Excelize의 2.7.1에서 2.11.0 버전 사이에서 발생하는 취약점입니다. 조작된 워크시트의 빈 mergeCell 참조를 처리할 때 슬라이스 길이 검사 없이 인덱스에 접근하여 프로그램이 비정상 종료(panic)될 수 있습니다.
💡 쉬운 설명
엑셀 파일을 읽는 프로그램이 잘못 만들어진 엑셀 파일을 만났을 때, 처리 방법을 몰라 갑자기 꺼져버리는 문제입니다. 공격자가 특수하게 만든 파일을 보내 프로그램 작동을 방해할 수 있습니다.
🇺🇸 원문 (English)
Excelize is a Go language library for reading and writing Microsoft Excel spreadsheets. From 2.7.1 to 2.11.0, mergeCellsParser leaves the cached rectangle empty for an empty mergeCell ref and then passes that empty slice to cellInRange without a length check. GetCellValue reaches mergeCellsParser, which passes an empty rectangle derived from the mergeCell ref attribute into cellInRange. When a crafted worksheet contains an empty mergeCell ref and a non-streaming cell API reads the worksheet, cellInRange indexes four positions in an empty slice, allowing an attacker to panic on the first affected cell operation. No fixed version is available as of this review.
📍 영향받는 시스템
Excelize library (Go language) versions 2.7.1 to 2.11.0
⚔️ 공격 벡터
조작된 mergeCell 참조가 포함된 엑셀 파일을 비스트리밍 셀 API를 통해 읽도록 유도
🛡️ 대응 방법
해당 라이브러리의 보안 패치 버전이 출시될 때까지 업데이트를 대기하거나, 입력 파일에 대한 검증 로직을 추가해야 함
🔧 검증 코드
출력된 버전 번호가 2.7.1 이상 2.11.0 이하인지 확인
go list -m github.com/xuri/excelize/v2 2>/dev/null