BookStack ZIP 가져오기 원격 코드 실행(CVE-2026-82450)|영향 범위와 대응
BookStack 26.05.4 이전 버전의 휴대용 ZIP 가져오기에서 표지 파일 검증을 우회해 공개 웹 경로에 PHP 파일 저장이 가능한 CVE-2026-82450을 분석합니다. 업데이트, 가져오기 권한 제한, 업로드 경로 점검과 웹서버 검증 순서를 다룹니다.

BookStack은 책·장·페이지 구조로 문서를 관리하는 자체 호스팅 플랫폼이며, 휴대용 ZIP 가져오기 기능은 다른 환경에서 내보낸 콘텐츠를 한 번에 복원할 때 사용됩니다. CVE-2026-82450은 26.05.4 이전 버전에서 이 ZIP 안의 책 표지 파일 검증이 우회 가능한 원격 코드 실행 취약점입니다. GitHub Advisory Database의 공개 내용에 따르면 Import Content와 Create Books 권한을 가진 사용자가 ZIP 아카이브 안에 .php 파일명을 가진 PHP 다형성 파일을 표지로 포함하면, 확장자 검증을 우회해 공개 웹 루트에 저장되도록 만들 수 있습니다. 이후 웹서버가 해당 경로의 PHP 파일을 처리하면 인증되지 않은 HTTP 요청으로 코드가 실행될 수 있습니다.
이 취약점의 우선순위는 ‘로그인한 사용자만 가져오기를 실행한다’는 사실만으로 낮아지지 않습니다. 가져오기 권한과 책 생성 권한은 콘텐츠 운영을 위해 부여될 수 있지만, 결과 파일이 공개 업로드 경로에 놓이고 웹서버 실행 규칙과 결합하면 애플리케이션 권한을 넘어 서버 프로세스 권한으로 영향이 확장됩니다. 공식 공개 자료는 심각도를 High, CVSS 4.0 기준 8.7로 제시합니다. 운영자는 영향 버전, 권한 보유자, ZIP 가져오기 사용 기록, 공개 업로드 경로와 PHP 처리 정책을 함께 확인해야 합니다.
공격 조건과 저장 경로

첫 번째 조건은 26.05.4 이전 BookStack 인스턴스입니다. 두 번째는 Import Content와 Create Books 권한을 함께 가진 계정입니다. 이 사용자가 휴대용 ZIP 가져오기를 실행하면 BookStack은 아카이브에 포함된 책 표지 파일을 처리합니다. 취약한 흐름에서는 아카이브 내부의 .php 파일명과 이미지처럼 보이는 내용의 조합이 확장자 검증을 통과할 수 있고, 결과물이 public/uploads 아래처럼 웹에서 직접 접근 가능한 위치에 저장될 수 있습니다. 웹서버가 그 경로에서 PHP 처리를 허용하면 파일 요청이 서버 측 코드 실행으로 이어집니다.
조건을 정확히 구분하면 점검 범위가 선명해집니다. 단순히 ZIP 업로드 권한을 가진 모든 사용자나 페이지 편집자 전체가 같은 권한을 갖은 것은 아닙니다. BookStack 역할 설정에서 두 권한이 어떤 역할과 사용자에게 배정됐는지 확인하고, 외부 협력자·교육용 계정·임시 관리자에게 권한이 남아 있는지 살펴봐야 합니다. 동시에 저장소가 로컬 디스크인지 공유 볼륨인지, public 디렉터리가 웹서버의 문서 루트와 어떻게 연결되는지, 업로드 경로에서 PHP 실행이 가능한지를 확인해야 실제 노출을 평가할 수 있습니다.
영향 범위와 권한 경계
코드가 웹서버 프로세스의 권한으로 실행되면 BookStack 애플리케이션 파일, 환경 설정, 연결된 데이터베이스 자격증명, 업로드된 문서와 서버가 접근 가능한 네트워크 자원으로 영향이 이어질 수 있습니다. 실제 범위는 컨테이너 격리, 파일 권한, SELinux·AppArmor 정책, PHP-FPM 사용자, 비밀정보 주입 방식과 네트워크 접근제어에 따라 달라집니다. 그래서 대응은 취약 파일 하나를 찾은 작업이 아니라 애플리케이션 계정에 읽기·쓰기가 허용된 자원과 외부 연결을 기준으로 조사 범위를 정하는 과정이어야 합니다.
BookStack의 공식 26.05.4 보안 릴리스는 ZIP 가져오기에서 책 표지를 저장할 때 부족했던 콘텐츠 검증을 수정하고, 이미지 제공 과정에 MIME 기반 콘텐츠 유형 검사를 추가했습니다. 같은 릴리스에는 다른 권한·입력 검증 보완도 포함돼 있으므로 일부 파일만 교체하기보다 공식 업데이트 절차로 전체 릴리스를 적용하는 편이 안전합니다. 공식 공지는 신뢰되지 않은 사용자가 인스턴스에 접근 가능한 환경, 특히 편집 수준 권한을 가진 경우 업데이트를 강하게 권고합니다.
업데이트와 선행 완화
우선 BookStack을 26.05.4 이상으로 업데이트합니다. 설치 방식이 Git, 컨테이너 이미지, 패키지 또는 관리형 배포 중 무엇인지 확인하고 공식 업데이트 절차에 맞춰 애플리케이션 파일과 의존성, 데이터베이스 마이그레이션을 적용해야 합니다. 업데이트 전에는 데이터베이스와 업로드 디렉터리를 백업하고, 현재 버전·이미지 다이제스트·PHP와 웹서버 설정·스토리지 마운트를 기록합니다. 업데이트 후에는 화면에 표시된 버전뿐 아니라 실행 컨테이너와 배포 정의, 이전 복제본이 모두 새 버전인지 확인합니다.
즉시 업데이트가 어려운 동안에는 Import Content와 Create Books 권한을 신뢰된 최소 관리자에게만 남기고 휴대용 ZIP 가져오기 경로의 접근을 제한합니다. 웹서버 또는 PHP-FPM 설정에서 업로드 디렉터리의 스크립트 실행을 차단하는 통제도 영향 축소에 도움이 됩니다. 다만 이런 통제는 애플리케이션의 입력 검증 수정과 역할이 다르므로 26.05.4 이상 업데이트를 대체하지 않습니다. 임시 권한 변경과 웹서버 규칙은 적용 시각·대상·승인자를 기록해 이후 원상복구 여부와 조사 시간대를 분명히 해야 합니다.

업로드 경로 점검
공식 BookStack 공지는 신뢰할 수 없은 사용자가 접근했던 환경에서 이미지 업로드 폴더에 예상하지 않은 비이미지 파일이 있는지 확인하라고 안내합니다. 일반적인 Linux 설치에서는 public/uploads와 storage/uploads/images 아래의 파일을 이미지 확장자, .gitignore, .htaccess 기준으로 분류하는 예시를 제공합니다. 운영 환경에서는 공식 명령을 그대로 적용하기 전에 실제 설치 경로와 스토리지 드라이버를 확인하고, 삭제나 이동 없이 읽기 전용으로 목록을 수집해야 합니다. 파일명, 크기, 수정시각, MIME 유형, 소유자와 해시를 기록하면 웹 접근 로그 및 가져오기 기록과 대조하기 쉽습니다.
확장자만으로 판정해서는 안 됩니다. 다형성 파일은 이미지 형식처럼 보이는 일부 바이트와 PHP 코드를 함께 가질 수 있으므로 웹서버가 어떤 MIME과 핸들러 규칙으로 응답했는지 살펴봐야 합니다. public/uploads에서 .php 계열 확장자, 실행 권한이 붙은 파일, 이미지 확장자와 MIME이 맞지 않은 파일, 최근 ZIP 가져오기 시각과 일치하는 변경을 우선 검토합니다. storage/uploads/images는 외부 직접 접근 경로와 분리돼 있을 수 있지만, 같은 가져오기 흐름에서 생성된 파일을 비교하면 조사 기준선을 만들 수 있습니다.
관리자 대응 순서
- BookStack 화면과 실행 환경에서 26.05.4 이전 버전 사용 여부를 확인합니다.
- Import Content와 Create Books 권한이 배정된 역할·사용자를 식별하고 불필요한 권한을 회수합니다.
- 공식 절차에 따라 26.05.4 이상으로 업데이트하고 모든 복제본과 컨테이너를 재검증합니다.
- public/uploads와 storage/uploads/images의 파일 목록·MIME·수정시각·소유자·해시를 읽기 전용으로 수집합니다.
- ZIP 가져오기 기록, 애플리케이션 로그, 웹 접근 로그와 PHP 처리 기록을 같은 시간대에 맞춰 검토합니다.
점검 중 의심 파일을 발견하면 브라우저로 열거나 실행 가능 여부를 시험하지 말고 원본과 메타데이터를 보존한 뒤 서버를 격리된 조사 절차로 전환합니다. 파일 삭제부터 하면 접근 시각과 웹로그의 상관관계, 업로드 계정과 가져오기 작업을 잃을 수 있습니다. 애플리케이션 비밀정보나 데이터베이스 자격증명에 접근했을 가능성이 제기되는 범위에서는 서비스 중단과 계정 교체의 순서를 계획하고, 새 자격증명이 취약 인스턴스에 다시 노출되지 않도록 업데이트와 격리를 먼저 완료해야 합니다.
업데이트 이후 검증
업데이트가 끝나면 정상적인 휴대용 ZIP을 사용해 승인된 관리자의 가져오기, 책 생성, 표지 표시와 페이지 탐색이 작동하는지 확인합니다. 동시에 업로드된 표지가 허용된 이미지 MIME으로 제공되는지, public/uploads에서 PHP가 실행되지 않는지, 권한을 회수한 계정이 가져오기 기능에 접근하지 못하는지 검증합니다. 웹서버 설정 변경이 다른 정적 파일 제공을 막지 않았는지와 백그라운드 작업·검색 색인·첨부파일 기능도 함께 점검하면 보안 조치로 인한 운영 장애를 빠르게 구분할 수 있습니다.
장기적으로는 콘텐츠 가져오기를 고위험 관리 작업으로 분류하는 것이 좋습니다. 역할 템플릿에서 Import Content와 Create Books를 일반 편집 권한과 분리하고, 대량 가져오기 전후의 작업자·원본·시각·대상 책을 감사 기록에 남깁니다. 공개 웹 루트는 실행 파일이 저장되지 않도록 웹서버 정책과 파일 권한을 고정하고, 이미지 확장자·MIME·실행 핸들러가 어긋나는 변화를 탐지 대상으로 삼습니다. 이런 기준을 유지하면 다음 보안 릴리스에서도 버전 업데이트, 권한 축소, 저장 경로 점검, 서비스 검증을 같은 순서로 수행할 수 있습니다.
확인한 출처
- BookStack Security Release v26.05.4BookStack · 공식 자료
- CVE-2026-82450: BookStack remote code execution via portable ZIP book coverGitHub Advisory Database · 공식 자료
사실관계와 수치는 연결된 자료에서 다시 확인할 수 있습니다.
의견을 남겨주세요
아직 등록된 댓글이 없습니다.