Shiny for Python의 북마크 복원(bookmark restore) 기능에 경로 순회(path traversal) 취약점이 공개되었습니다. 조작된 북마크 복원 요청이 서버의 파일 경로 접근으로 이어질 수 있는 문제이며, 해당 취약점은 CVE-2026-108258로 기록되어 있습니다.
개요

북마크 복원은 사용자가 생성한 북마크를 다시 열면 쿼리스트링의 _state_id_ 값을 받아 저장된 상태를 복원하는 기능입니다. 수정 전 버전에서는 이 북마크 ID가 경로 구성 요소로 안전하게 검증되지 않았습니다. 그 결과, 북마크 ID에 순회 페이로드가 포함되면 서버의 북마크 저장 위치를 벗어난 파일 경로로 이어질 수 있었고, 이것이 이 취약점의 근본 원인입니다.
해당 취약점은 CWE-22(경로 순회)로 분류되며, posit-dev의 보안 어드바이저리 GHSA-47c3-hpmg-7j6p로 공개되었습니다. py-shiny Release shiny 1.6.4 릴리스 노트에는 이 경로 순회 취약점의 수정이 기록되어 있고, 보고자는 @0xRenSec로 기재되어 있습니다.
영향 범위
영향을 받는 버전과 애플리케이션 범위는 다음과 같습니다.
- Shiny for Python 1.4.0 ~ 1.6.3. 북마크 기능은 1.4.0에서 도입되어, 그 이전 릴리스에는 해당 코드 경로가 없어 영향을 받지 않습니다.
- 북마크 복원 코드 경로를 실제로 사용하는 애플리케이션. 북마크를 사용하지 않는다면 해당 코드 경로에 도달하지 않습니다.
기술적 분석
복원 로직은 py-shiny@1d8ecb4 커밋에서 확인할 수 있는데, 쿼리스트링에 _state_id_ 키가 있으면 저장된 상태로 복원하고 다른 key/value 쌍은 무시하는 분기를 사용합니다. 수정 전 버전에서 이 북마크 ID는 경로 구성 요소로 안전하게 검증되지 않았습니다.
1.6.4의 수정은 북마크 ID를 단일 경로 세그먼트에 해당하는 [A-Za-z0-9_-]+ 허용 목록(allowlist)과 대조합니다. 이 패턴은 경로 구분자, 상위 디렉터리 참조(..), 절대 경로를 표현할 수 없도록 하여 순회를 차단합니다. 동일한 허용 목록 검증 방식은 GHSA-47c3-hpmg-7j6p (GitHub Advisory Database)에서도 확인할 수 있습니다.
확인된 사실과 함께 짚어야 할 한계도 있습니다.
- 실제 악용 사례, 공개 PoC, CISA KEV 등재 여부는 제공된 자료에서 확인되지 않아 미확인으로 둡니다.
- 공격자가 실제로 읽을 수 있는 파일 범위, 권한 수준, 읽은 내용의 반환 방식 등 세부 악용 조건은 제공된 자료로 확정할 수 없어 조건부 판단으로만 서술했습니다.
- 공식 CVSS 점수 등 독립적 심각도 평가는 자료에 포함되지 않아, 긴급도 판단은 패치 시점과 공격 표면 조건에 기반합니다.
패치가 공개된 이후에도 1.6.4 미만 버전을 계속 운영하는 환경이라면 악용 가능성을 완전히 배제할 수 없으므로, 미확인 상태를 곧바로 '안전'으로 해석하지 않는 것이 운영적으로 타당합니다.
대응 방안
확인된 취약점에 대한 대응은 다음과 같습니다.
- Shiny for Python을 1.6.4 이상으로 업그레이드합니다.
pip install --upgrade shiny - 적용 환경의 Shiny for Python 버전을 확인해 1.6.4가 적용되었는지 점검합니다. 1.6.4 미만이면 북마크 복원 경로가 패치되지 않은 상태로 남아 있습니다.
1.6.4로의 업그레이드가 기본 대응입니다. 해당 릴리스에서는 북마크 ID가 단일 경로 세그먼트 허용 목록([A-Za-z0-9_-]+)으로 검증되어 경로 순회가 차단됩니다.
참고자료
- CVE-2026-108258 - Shiny for Python - Path traversal in bookmark restore
- Shiny for Python - Path traversal in bookmark restore (GHSA-47c3-hpmg-7j6p)
- Shiny for Python has path traversal in bookmark restore · CVE-2026-108258
- Release shiny 1.6.4 · posit-dev/py-shiny
- Merge commit from fork · py-shiny@1d8ecb4
함께 읽으면 좋은 글
- AnyDesk Linux 8.0.0 이상 8.0.3 미만 사전 승인 원격 코드 실행(CVE-2026-109390)과 Linux 원격지원 환경 점검
- CVE-2026-108094: Mutter Wayland 색상 관리 경로 Use-After-Free와 GNOME 데스크톱 점검
- CVE-2026-92877: Eclipse JAXB RI의 XML 외부 엔터티(XXE) 처리 조건과 Java XML 입력 경계 점검
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!