Skip to content

Latest commit

 

History

History
214 lines (170 loc) · 10.6 KB

File metadata and controls

214 lines (170 loc) · 10.6 KB

Firefox for iOS PDF 저장 제목 기반 경로 덮어쓰기 (CVE-2026-14906)

메타데이터

항목 내용
CVE ID CVE-2026-14906
영향 제품 Firefox for iOS 152.4 미만
영향 앱 샌드박스 안에서 PDF 또는 번들 콘텐츠를 덮어쓸 가능성
CVSS v3.1 5.3 (Medium) - AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
CWE CWE-434: Unrestricted Upload of File with Dangerous Type
공개일 2026-07-13
수정 버전 Firefox for iOS 152.4
악용 상태 공개 악용 정보 없음 (CISA-ADP SSVC: exploitation none)
분석 기준 Mozilla MFSA 2026-66, NVD 및 공개 Bugzilla 참조. PoC는 실행하거나 사용하지 않음.

개요

CVE-2026-14906은 악의적으로 만든 웹 페이지 제목이 Firefox for iOS의 "웹 페이지를 PDF로 저장"하는 경로에 들어가면, 저장된 PDF가 앱 샌드박스 안의 다른 PDF 파일 또는 번들 콘텐츠를 덮어쓸 수 있었던 문제다. Mozilla는 이를 Firefox for iOS 152.4에서 수정했고 영향도를 Low로 분류했다.

이 사례의 핵심은 웹 페이지 제목이 보기에는 단순한 표시 문자열이지만, 파일을 만들 때 이름이나 경로 결정에 사용되면 파일 시스템 권한을 가진 입력이 된다는 점이다. 브라우저는 제목을 표시할 때와 달리 저장할 때는 "사람이 읽는 문구"를 신뢰 경계 밖의 데이터로 취급해야 한다. 공개 자문은 덮어쓰기 결과를 앱 샌드박스 안으로 한정하므로, 이 문서는 앱 밖의 임의 파일 접근이나 코드 실행을 주장하지 않는다.

사전 지식

웹 페이지 제목은 서버가 정하는 비신뢰 입력이다

HTML의 <title>은 탭 제목, 방문 기록, 공유 화면, PDF의 기본 이름처럼 여러 사용자 경험에 쓰인다. 하지만 해당 값은 사이트 운영자가 전적으로 통제한다. 브라우저가 URL·다운로드 응답의 파일명·페이지 제목을 사용자 친화적인 이름으로 바꾸는 것은 자연스럽지만, 이 변환은 보안 경계를 넘는 순간이 있다.

웹 서버가 제공하는 문서
  <title>사용자에게 보이는 문구</title>
          │
          ▼
브라우저의 표시 계층
  탭 / 공유 시트 / PDF 기본 제목
          │
          ▼  파일 저장에 재사용할 때
파일 시스템 계층
  이름 구성 · 경로 해석 · 기존 파일 처리

표시 계층에서는 줄바꿈이나 특수문자가 대체로 모양의 문제다. 반면 파일 시스템 계층에서는 경로 구분자, 상대 경로 표기, 예약 이름, 확장자 같은 값이 파일의 위치종류에 영향을 줄 수 있다. 따라서 안전한 설계는 제목을 경로로 직접 이어 붙이지 않고, 별도의 파일명 정규화와 디렉터리 경계 검증을 거친 뒤 고정된 저장 디렉터리 아래에만 만든다.

PDF 저장은 렌더링과 영속 저장을 잇는 파이프라인이다

"페이지를 PDF로 저장"은 화면을 PDF 바이트로 렌더링하는 단계와, 그 결과를 특정 위치에 파일로 쓰는 단계가 결합된 기능이다. 첫 단계가 안전하더라도 두 번째 단계의 이름 결정이 공격자 입력에 좌우되면 결과물의 무결성이 깨질 수 있다.

정상적인 저장 파이프라인

  현재 페이지 + 제목
          │
          ├─ 페이지 렌더링 → PDF 바이트
          │
          └─ 제목 → 안전한 파일명으로 정규화
                           │
                           ▼
                 앱이 정한 저장 디렉터리
                           │
                           ▼
                    새 PDF 파일 생성

여기서 지켜야 할 불변식은 두 가지다. 첫째, 웹 콘텐츠는 저장 위치를 선택할 수 없어야 한다. 둘째, 내보내기 동작은 사용자가 의도한 새 결과물만 만들거나 갱신해야 하며 앱의 기존 리소스를 뜻하지 않게 덮어쓰면 안 된다. 파일명이 사용자에게 보인다는 이유만으로 이 불변식이 자동으로 성립하지는 않는다.

iOS 앱 샌드박스는 피해 범위를 줄이지만 파일 무결성을 보장하지 않는다

iOS 앱은 일반적으로 자신의 컨테이너(샌드박스)에서 데이터를 읽고 쓴다. 이 격리는 다른 앱이나 시스템 영역으로의 직접 접근을 제한하는 방어선이다. Mozilla 자문도 이 CVE의 덮어쓰기 범위를 Firefox for iOS 애플리케이션 샌드박스 안으로 명시한다.

iOS 기기

  다른 앱 / 시스템 데이터
       ▲
       │ 샌드박스 경계가 직접 접근을 제한
       │
  Firefox for iOS 컨테이너
  ┌───────────────────────────────────┐
  │ PDF 결과물 · 앱이 관리하는 파일    │
  │ 번들/리소스 취급 경로              │
  └───────────────────────────────────┘

그러나 경계 안에서도 앱이 보관하는 PDF나 리소스의 무결성은 중요하다. 앱이 이후에 그 파일을 열거나 공유하거나 신뢰된 콘텐츠로 취급하면, 공격자가 만든 PDF가 정상 콘텐츠 자리를 차지할 수 있다. CVSS의 기밀성 영향 C:L은 이처럼 앱 컨테이너 안의 콘텐츠 접근 또는 노출 가능성을 반영하지만, 공개 자료만으로 어느 파일이 실제로 읽혔는지나 추가 권한 획득이 가능한지는 알 수 없다.

취약점 분석

확인된 사실

  • Mozilla MFSA 2026-66은 악성 페이지 제목이 PDF 저장 콘텐츠로 하여금 앱 샌드박스 안의 PDF 파일 또는 번들 콘텐츠를 덮어쓸 수 있었다고 설명한다.
  • 영향 제품은 Firefox for iOS이며 수정 버전은 152.4다.
  • NVD는 Firefox for iOS 152.4 미만을 영향 범위로 등록했고, CISA-ADP는 CWE-434 및 위 CVSS 벡터를 부여했다.
  • Mozilla가 연결한 Bugzilla 2045842는 공개 참조이지만, 이 보고서 작성 시점에 세부 버그와 수정 diff는 접근할 수 없었다.

깨진 불변식과 제한적 동작 모델

공개 자료는 취약 함수, 정확한 경로 문자열, 렌더링 엔진 또는 덮어쓴 파일의 구체적 위치를 공개하지 않는다. 따라서 아래는 자문에 나온 "malicious titles"와 "overwrite"의 관계를 설명하는 개념 모델이며 특정 Swift 함수나 실제 payload를 재구성한 내용이 아니다.

패치 전에는 사이트가 정한 제목이 PDF 출력 파일의 이름 또는 위치 구성에 충분히 제한되지 않은 채 영향을 미쳤고, 그 결과 앱이 이미 관리하던 파일과 충돌하거나 그 위치를 가리킬 수 있었던 것으로 해석할 수 있다.

패치 전 개념 모델

공격자 웹 페이지
  └─ 제어한 제목
          │
          ▼
PDF 저장 기능
  ├─ 페이지를 PDF로 렌더링
  └─ 제목을 저장 대상 결정에 사용
          │
          ▼
경로/기존 파일 충돌 검증이 불충분한 경우
          │
          ▼
앱 샌드박스 내부의 기존 PDF 또는 번들 콘텐츠 덮어쓰기 가능

이 모델에서 공격자가 직접 쓰는 것은 제목을 포함한 웹 문서이고, 저장 동작은 브라우저 기능이 수행한다. 따라서 문제의 본질은 PDF 문법 파서 결함이라기보다, 비신뢰 메타데이터를 파일 시스템 식별자로 승격한 입력 검증/경로 안전성 문제다. 다만 CWE-434 분류만으로 세부 원인이 경로 탐색, 파일명 충돌, 확장자 처리 중 무엇인지 확정할 수는 없다.

보안 영향의 경계

Mozilla의 설명에서 확인되는 결과는 "앱 샌드박스 내" 덮어쓰기다. 이는 OS 전체 파일 시스템을 덮어쓰거나 다른 앱 컨테이너로 탈출할 수 있다는 뜻이 아니다. 또한 자문은 코드 실행, 권한 상승, 공개 악용을 언급하지 않는다. 이 CVE를 과대평가하지 않으려면 다음 경계를 유지해야 한다.

확인됨
  악성 제목 → PDF 저장 결과 → 앱 컨테이너 내 파일/콘텐츠 덮어쓰기 가능성

확인되지 않음
  → 다른 앱 파일 접근
  → iOS 샌드박스 탈출
  → 임의 코드 실행

수정 방법

Mozilla는 Firefox for iOS 152.4에서 이 문제를 수정했다. 공개된 패치 diff가 없으므로 정확히 어떤 정규화 규칙 또는 파일 생성 API 사용 방식이 바뀌었는지는 단정할 수 없다. 다만 자문이 지적한 영향을 차단하는 수정은 제목이 저장 위치를 바꾸지 못하게 하고, 앱이 허용한 디렉터리 및 새 출력 파일만 대상으로 삼는 방향이어야 한다.

패치 후에 필요한 안전성 모델

공격자 제공 제목
          │
          ▼
파일명 전용 정규화
  ├─ 경로 의미 제거/거부
  ├─ 허용 문자·길이 적용
  └─ 충돌 없는 출력 이름 생성
          │
          ▼
고정된 PDF 출력 디렉터리
          │
          ▼
기존 앱 리소스와 분리된 새 파일 생성

사용자는 Firefox for iOS를 152.4 이상으로 업데이트해야 한다. 앱을 관리하는 조직은 iOS 앱의 내보내기·다운로드·공유 기능에서 URL, Content-Disposition 파일명, 문서 제목 같은 외부 메타데이터를 저장 경로로 쓰는지 점검하고, 사용자 표시명과 내부 저장 식별자를 분리하는 것이 좋다.

참고 자료

PoC 관련 언급

이 리포트는 공개 PoC를 사용하거나 실행하지 않았다. 재현 단계와 payload는 공개 자문에서 확인하지 못했으며, 그러한 세부사항을 추정해 적지 않았다.

미해결/불확실 지점

  • Bugzilla 2045842의 세부 내용과 수정 diff가 접근 제한되어, 제목이 실제로 파일명·상대 경로·다른 식별자 중 어디에 반영됐는지 확인하지 못했다.
  • "bundled content"가 어떤 저장 경로와 어떤 후속 소비 경로를 뜻하는지 공개 자문은 설명하지 않는다.
  • 패치의 실제 정규화 규칙, 충돌 처리 및 회귀 테스트가 공개되면 패치 전후 모델을 코드 근거로 보강해야 한다.