Trawling

Excelize 2.11.1, 스프레드시트 처리 보안 결함 16건 수정

Excelize 2.11.1은 스프레드시트 파일을 읽고 수식을 계산하는 과정의 보안 수정 16건을 포함합니다. 공개 보안 권고 한 건은 조작된 XLSX의 음수 공유 문자열 인덱스가 일부 대용량 읽기 경로에서 패닉을 일으킬 수 있다고 설명하며, 영향 범위를 2.6.0~2.11.0으로 지정했습니다. 새 버전은 Go 1.26.0 이상이 필요합니다.

본문

Excelize가 v2.11.1에서 스프레드시트 파일을 읽고 수식을 계산하는 과정의 보안 수정 16건을 공개했습니다. 잘못된 셀 인덱스나 문서 구조 때문에 패닉이 나는 문제와 복호화 중 처리량이 제한 없이 커질 수 있는 문제를 손봤습니다. 공개 보안 권고 한 건은 음수 공유 문자열 인덱스로 패닉을 일으키는 결함을 높음으로 분류하고, 영향 버전을 2.6.0부터 2.11.0까지, 수정 버전을 2.11.1로 적었습니다. 이번 버전은 Go 1.26.0 이상을 요구합니다.

Excelize는 순수 Go로 구현한 스프레드시트 라이브러리입니다. Excel 2007 이후 문서를 포함한 여러 형식을 읽고 쓰며, 애플리케이션은 통합문서를 연 뒤 셀 값을 가져오거나 행을 순회할 수 있습니다. 대용량 워크시트를 처리하는 스트리밍 API도 제공합니다. 서비스가 사용자에게서 받은 XLSX 파일을 Excelize로 읽으면 파일 안의 XML과 셀 참조가 라이브러리의 파싱 경로로 들어갑니다.

이번 보안 권고는 공유 문자열 인덱스를 검사하는 과정에서 생긴 차이를 구체적으로 설명합니다. 공유 문자열은 문서 안에서 반복되는 문자를 저장하고 셀에서 인덱스로 참조하는 구조입니다. 권고에 따르면 대용량 공유 문자열을 읽는 스트리밍 경로는 인덱스가 목록의 끝을 넘는지만 검사하고 음수인지는 거르지 않았습니다. 따라서 셀이 -1 인덱스를 가리키면 목록에서 해당 항목을 꺼내는 과정에서 패닉이 발생합니다. 권고는 이 동작을 재현했다고 밝히며 CVSS 3.1 점수 7.5, 높음으로 분류했습니다. Excelize 호출부의 복구 처리 여부에 따라 요청 실패나 작업 프로세스 중단으로 이어질 수 있습니다.

나머지 보안 수정도 파일을 읽거나 처리하는 경로에 걸쳐 있습니다. 잘못된 피벗 테이블 필드와 조건부 서식 규칙, 비어 있는 병합 셀 참조처럼 문서 내부 값이 예상과 다를 때 생기는 패닉을 고쳤습니다. 복호화 과정에서는 입력 파일의 스트림 크기와 키 파생 반복 횟수가 과도하게 커지는 문제를 수정했고, 행 반복자의 행 번호 제한 문제도 손봤습니다. 수식 계산 중 순환 참조로 스택이 넘치는 문제와 잘못된 열 이름으로 정수 오버플로가 생기는 문제도 릴리스의 보안 항목에 포함됐습니다.

Excelize 프로젝트는 v2.11.1의 Go 요구 버전을 1.26.0 이상으로 올렸습니다. 릴리스 노트는 golang.org/x/crypto 의존성 업그레이드를 이유로 들었습니다. 따라서 이 버전으로 바꾸는 애플리케이션은 라이브러리 수정뿐 아니라 빌드에 쓰는 Go 버전도 새 요구 조건에 맞춰야 합니다.

자료: Excelize GitHub 릴리스 / 정리·해설: Trawling

참고 자료

오류 제보