•  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
r16 vs r20
......
33
== 개요 ==
44
간밤에 삽질하게 만든 사건.
55
== 원인 ==
6
기능 링크[* 파서 내부적으로 \[\[파일:\~\~\~\~.png\]\] 나 \[\[분류:\~\~\~\~.png\]\] 를 이렇게 부른다.] 를 렌더링하는 과정에서 어떤 사유로 인해 렌더링 되지 못하면서[* 이경우에는 해당 이름을 가진 파일 문서가 존재하지 않아서] fallback 처리 로직이 실행되었는데 해당 로직에 escape를 실수로 빼먹어 버린 것.
6
기능 링크[* 파서 내부적으로 \[\[파일:\~\~\~\~.png\]\] 나 \[\[분류:\~\~\~\~\]\] 를 이렇게 부른다.] 를 렌더링하는 과정에서 어떤 사유로 인해 렌더링 되지 못하면서[* 이경우에는 해당 이름을 가진 파일 문서가 존재하지 않아서] fallback 처리 로직이 실행되었는데 해당 로직에 escape를 실수로 빼먹어 버린 것.
77
== 피해의 완화 ==
88
기본적으로 보안에 많은 염두를 두고 개발되었기 때문에 여러 가지 보안 대비책이 마련돼 있었다.
99
=== Content Security Policy ===
......
1414
하지만 자동 로그인 쿠키[* honoka]에 해당 속성을 켜놓는 걸 깜박하는 바람에 자동 로그인한 사용자에게는 이번 공격의 영향을 받게 되버린 것이다!
1515
사실 자동 로그인 쿠키에 HttpOnly 속성만 들어가 있었어도 공격자가 특정 사이트--히토미--를 띄울 수 있었다는 것 외에 전혀 피해가 없을 수 있다는 점 또한 아쉬웠다.
1616
== 공격 코드 ==
17
{{{[[파일:<script>$('textarea').val(document.cookie);$('form.new-thread-form').submit();</script>]]}}}[* jQuery를 잘 모르는 분들을 위하여 설명하자면.. textarea 에 해당 페이지의 쿠키를 작성하라 라는 코드이다. 그 뒤 코드는 new-thread-form 이라는 클래스를 가진 폼을 제출 하라는 의미.JS로는 document.getElementsByTagName("text area").value 가 되겠다.]
18
{{{[[파일:<script>location.assign('https://hitomi.la');</script>]]}}}[* 히토미로 날려버리라는 코드이다. 자바 스크립트으로 표현하자면 location.href 사용면 된다.]
17
{{{[[파일:<script>$('textarea').val(document.cookie);$('form.new-thread-form').submit();</script>]]}}}[* jQuery를 잘 모르는 분들을 위하여 설명하자면.. textarea 에 해당 페이지의 쿠키를 작성하라 라는 코드이다. 그 뒤 코드는 new-thread-form 이라는 클래스를 가진 폼을 제출 하라는 의미.JS로는 document.getElementsByTagName("textarea").value 가 되겠다.]
18
{{{[[파일:<script>location.assign('https://hitomi.la');</script>]]}}}[* 히토미로 날려버리라는 코드이다.location.href 로도 가능하다.]
1919
2020
구현의 귀찮음으로 인해 쓰레드에 레스를 작성하는 부분이 CSRF 토큰이 없었는데 사실 있어도 이 케이스에서는 별 쓸모가 없었다.
2121
다행인 점은 CSP로 인해 공격자가 외부 서버 등으로 쿠키를 전송할 수 없어서 토론 레스로 남기게 끔[* 좀 창의적이었다.] 했는데 이 때문에 정확한 피해자 특정이 가능했다.
......
2828
== 결론 ==
2929
뭐 패스워드나 이런게 유출된게 아니니...
3030
규모에 비해 생각보다 피해는 적었다.
31
[[분류:보고서]]
31
[[분류:보고서]][[분류:나무위키]]
3232