🇰🇷 한글 설명
Go 언어용 Excel 라이브러리인 Excelize 2.0.0에서 2.11.0 버전 사이에서 발생하는 취약점입니다. 조작된 엑셀 파일의 셀 순서가 XML 문서 순서와 다를 경우, 특정 함수가 슬라이스 범위를 초과하여 접근하게 되어 프로세스가 비정상 종료(Panic)될 수 있습니다.
💡 쉬운 설명
악의적으로 만들어진 엑셀 파일을 열 때 프로그램이 예상치 못한 오류를 일으켜 강제로 종료될 수 있는 문제입니다. 공격자가 엑셀 파일의 데이터 순서를 꼬아놓아 프로그램의 계산 오류를 유도하는 방식입니다.
🇺🇸 원문 (English)
Excelize is a Go language library for reading and writing Microsoft Excel spreadsheets. From 2.0.0 to 2.11.0, checkRow sizes its target cell slice from the last cell in XML document order and then re-scatters every cell by its explicit column reference. GetCellValue reaches workSheetReader and checkRow, where targetList is too short for an earlier out-of-order cell. When a crafted row places a higher-column cell before a lower-column final cell and a non-streaming worksheet API reads the sheet, the earlier cell's column index exceeds the slice length derived from the final cell, allowing an attacker to cause an unrecovered panic and terminate the process. No fixed version is available as of this review.
📍 영향받는 시스템
Excelize library (Go language) versions 2.0.0 to 2.11.0
⚔️ 공격 벡터
조작된 열 순서를 가진 엑셀 파일을 비스트리밍 API를 통해 읽도록 유도하여 프로세스 종료 유발
🛡️ 대응 방법
현재 수정 버전이 없으므로, 신뢰할 수 없는 엑셀 파일의 처리를 제한하거나 라이브러리 업데이트를 대기해야 함
🔧 검증 코드
출력된 버전이 2.0.0 이상 2.11.0 이하인지 확인하여 취약 여부를 판단합니다.
go list -m github.com/xuri/excelize/v2 2>/dev/null