🔍 CVE-2026-40902

7.5
CVSS Score
HIGH
2026-05-12
2026-10-26 14:10
✅ 완료

🇰🇷 한글 설명

PhpSpreadsheet 라이브러리의 XLSX 리더가 XML의 행 번호를 검증하지 않아, 공격자가 초대형 행 번호(예: 999999999)를 포함한 최소 크기의 악성 XLSX 파일을 통해 CPU 고갈 공격을 수행할 수 있습니다. 파일 처리 시 약 10억 번의 루프 사이클을 시도하여 시스템 자원을 완전히 소모시킬 수 있으며, 1.30.4, 2.1.16, 2.4.5, 3.10.5, 5.7.0 이상으로 업데이트하면 해결됩니다.

💡 쉬운 설명

PhpSpreadsheet에서 엑셀 파일의 행 번호 크기를 확인하지 않아, 악의적인 파일이 컴퓨터의 모든 처리 능력을 낭비하게 할 수 있습니다. 1.6KB 크기의 작은 파일로도 시스템을 마비시키는 DoS 공격이 가능합니다.

🇺🇸 원문 (English)

PhpSpreadsheet is a pure PHP library for reading and writing spreadsheet files. Prior to 1.30.4, 2.1.16, 2.4.5, 3.10.5, and 5.7.0, the XLSX reader's ColumnAndRowAttributes::readRowAttributes() method reads row numbers from XML attributes without validating them against the spreadsheet maximum row limit (AddressRange::MAX_ROW = 1,048,576). An attacker can craft a minimal XLSX file (~1.6KB) containing a <row r="999999999"/> element that inflates cachedHighestRow to 999,999,999, causing any subsequent row iteration to attempt ~1 billion loop cycles and exhaust CPU resources. This vulnerability is fixed in 1.30.4, 2.1.16, 2.4.5, 3.10.5, and 5.7.0.

📍 영향받는 시스템

PhpSpreadsheet 1.30.3 이하, 2.1.15 이하, 2.4.4 이하, 3.10.4 이하, 5.6.x 및 이전 버전

⚔️ 공격 벡터

XLSX 파일의 row 요소에 최대 행 제한(1048576)을 초과하는 r="999999999" 속성을 삽입하여 배포

🛡️ 대응 방법

PhpSpreadsheet를 1.30.4, 2.1.16, 2.4.5, 3.10.5, 또는 5.7.0 이상으로 업데이트

🔧 검증 코드

출력된 버전이 1.30.4, 2.1.16, 2.4.5, 3.10.5, 5.7.0 이상이면 안전, 그 이하면 업데이트 필요

Shell / Script
composer show phpoffice/phpspreadsheet 2>/dev/null | grep -E '^phpoffice/phpspreadsheet' | awk '{print $2}'

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

💻 영향받는 소프트웨어

PHP