refactor: 문서 개선 중
This commit is contained in:
+7
-7
@@ -19,7 +19,7 @@ source:
|
||||
|
||||
# scriptable 콘텐츠 탐지가 BOM·NUL·주석으로 우회된다
|
||||
|
||||
브라우저가 실행할 수 있는 콘텐츠를 탐지하는 정책이 접두사 시작 매칭을 쓴다. 마커 앞에 바이트가 하나라도 있으면 탐지되지 않고, 브라우저는 그런 파일도 실행한다.
|
||||
scriptable 콘텐츠를 탐지하려는 정책이 접두사 시작 매칭을 쓴다. BOM·NUL·주석 같은 prefix를 앞에 두면 detector가 마커를 놓치는 것은 hermetic probe로 확인했다. 실제 대상 브라우저가 각 입력을 실행 가능한 콘텐츠로 해석하는지는 이번 evidence에서 확인하지 않았다.
|
||||
|
||||
## 관계
|
||||
|
||||
@@ -42,7 +42,7 @@ source:
|
||||
|
||||
앞의 1024 바이트를 읽고 그 안에서 마커를 찾는데, 마커가 콘텐츠의 시작에 있어야 한다.
|
||||
|
||||
브라우저는 그렇게 엄격하지 않다. 앞에 바이트가 있어도 콘텐츠를 스니핑해 실행한다.
|
||||
이 probe만으로 실제 브라우저의 스니핑·실행 동작까지 증명할 수는 없다. 확인된 것은 prefix가 붙은 입력이 detector를 우회한다는 사실이다.
|
||||
|
||||
그래서 우회가 여럿이다.
|
||||
|
||||
@@ -50,7 +50,7 @@ source:
|
||||
널 바이트를 앞에 넣어도 같다
|
||||
주석이나 공백을 앞에 두어도 같다
|
||||
|
||||
실행 탐침이 이 우회들을 확인했다.
|
||||
hermetic detector probe가 이 우회 입력들이 탐지를 통과한다는 사실을 확인했다.
|
||||
|
||||
시그니처 검사와 스니핑 패턴 검사는 다른 문제다. 시그니처는 파일 형식이 정의상 특정 바이트로 시작하므로 시작 매칭이 맞다. 브라우저 스니핑은 형식 정의가 아니라 관용적 해석이므로 시작 매칭이 맞지 않는다.
|
||||
|
||||
@@ -59,7 +59,7 @@ source:
|
||||
## 검증 환경
|
||||
|
||||
OpenJDK : 21.0.12
|
||||
확인 방식 : 실행 탐침으로 우회 입력 확인
|
||||
확인 방식 : hermetic detector probe로 탐지 우회 입력 확인
|
||||
소스 수정 : x
|
||||
|
||||
## 재현 조건
|
||||
@@ -83,15 +83,15 @@ javadoc이 목적을 "Detection is on content, not on the claimed type or the ex
|
||||
|
||||
## hermetic probe 가 통과시킨 셋
|
||||
|
||||
UTF-8 BOM + `<html>` · 선행 HTML 주석 후 `<script>` · NUL 바이트 후 `<html>`. `String.stripLeading()`은 `Character.isWhitespace`만 제거하므로 BOM(U+FEFF)도 NUL도 지우지 않는다. 셋 다 브라우저는 HTML로 렌더링하고, BOM 접두 HTML은 여러 편집기의 기본 출력이다.
|
||||
UTF-8 BOM + `<html>` · 선행 HTML 주석 후 `<script>` · NUL 바이트 후 `<html>`. `String.stripLeading()`은 `Character.isWhitespace`만 제거하므로 BOM(U+FEFF)도 NUL도 지우지 않는다. 세 입력 모두 detector를 통과했다. 실제 대상 브라우저가 이 입력을 HTML 또는 scriptable content로 해석하는지는 이번 evidence에서 확인하지 않았다.
|
||||
|
||||
## 형제 검증기와의 대비가 판정을 굳힌다
|
||||
|
||||
`MediaTypeVerifier`의 매직바이트 선두 매칭은 시그니처의 정의가 파일 선두이므로 옳지만, scriptable 마커는 시그니처가 아니라 브라우저가 스니핑하는 패턴이다.
|
||||
`MediaTypeVerifier`의 매직바이트 선두 매칭은 시그니처의 정의가 파일 선두이므로 적합하다. 반면 이 scriptable detector는 prefix가 붙은 입력을 놓쳤고, 그 입력을 실제 브라우저가 어떻게 해석하는지는 별도 브라우저 검증이 필요하다.
|
||||
|
||||
## 확인하지 못한 것
|
||||
|
||||
실제 브라우저가 각 우회 입력을 실행하는지 확인하지 않았다. 브라우저의 스니핑 동작은 명세와 구현이 모두 관여하므로 별도 확인이 필요하다.
|
||||
실제 대상 브라우저가 각 우회 입력을 실행 가능한 콘텐츠로 해석하는지 확인하지 않았다. 이번 evidence가 증명하는 범위는 detector bypass까지다.
|
||||
|
||||
안전 프로파일이 켜진 배포에서의 동작을 확인하지 않았다.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user