•  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
[주의!] 문서의 이전 버전(에 수정)을 보고 있습니다. 최신 버전으로 이동
이 문서는 보고서입니다.
이 문서는 the seed 엔진에서 발생한 사건사고 및 취약점에 관한 보고서입니다. 내용을 왜곡하거나 훼손하지 마십시오.
1. 개요2. 원인3. 피해의 완화
3.1. Content Security Policy3.2. HttpOnly
4. 공격 코드5. 피해6. 해결7. 결론

1. 개요[편집]

간밤에 삽질하게 만든 사건.

2. 원인[편집]

기능 링크[1] 를 렌더링하는 과정에서 어떤 사유로 인해 렌더링 되지 못하면서[2] fallback 처리 로직이 실행되었는데 해당 로직에 escape를 실수로 빼먹어 버린 것.

3. 피해의 완화[편집]

기본적으로 보안에 많은 염두를 두고 개발되었기 때문에 여러 가지 보안 대비책이 마련돼 있었다.

3.1. Content Security Policy[편집]

나무위키는 CSP가 활성화된 상태였기 때문에 공격자 입장에서는 XHR이나 img tag를 통해 외부 서버로 쿠키 전송 같은 짓거리를 할 수가 없어서, 처음에 취약점 소식을 들었을 땐 별 피해가 없겠거니 싶었다. 그런데 생각보다 좀 창의적인 공격을 했더라.
기술 부채로 인해 script-src에 unsafe-inline 이 들어가서 이번 공격을 원천적으로 막을 수 없었던 것은 아쉬웠던 점.

3.2. HttpOnly[편집]

기본적으로 세션 쿠키는 HttpOnly 속성이 켜져 있기 때문에 이번 공격에서 로그인한 상태여도 기본적으로 피해가 없었다.
하지만 자동 로그인 쿠키[3]에 해당 속성을 켜놓는 걸 깜박하는 바람에 자동 로그인한 사용자에게는 이번 공격의 영향을 받게 되버린 것이다!
사실 자동 로그인 쿠키에 HttpOnly 속성만 들어가 있었어도 공격자가 특정 사이트히토미를 띄울 수 있었다는 것 외에 전혀 피해가 없을 수 있다는 점 또한 아쉬웠다.

4. 공격 코드[편집]

[[파일:<script>$('textarea').val(document.cookie);$('form.new-thread-form').submit();</script>]][4]
[[파일:<script>location.assign('https://hitomi.la');</script>]][5]

구현의 귀찮음으로 인해 쓰레드에 레스를 작성하는 부분이 CSRF 토큰이 없었는데 사실 있어도 이 케이스에서는 별 쓸모가 없었다.
다행인 점은 CSP로 인해 공격자가 외부 서버 등으로 쿠키를 전송할 수 없어서 토론 레스로 남기게 끔[6] 했는데 이 때문에 정확한 피해자 특정이 가능했다.

5. 피해[편집]

자동 로그인을 사용 중이고 해당 시간대에 해당 쓰레드에 접속했던 8명의 자동 로그인 토큰 유출[7]

6. 해결[편집]

  1. 파서의 해당 루틴 버그 수정됨.
  2. 자동 로그인 쿠키에 HttpOnly 속성 적용
  3. 장기적으로 inline script tag 제거 예정 과연 언제가 될지?

7. 결론[편집]

뭐 패스워드나 이런게 유출된게 아니니...
규모에 비해 생각보다 피해는 적었다.
[1] 파서 내부적으로 [[파일:~~~~.png]] 나 [[분류:~~~~]] 를 이렇게 부른다.[2] 이경우에는 해당 이름을 가진 파일 문서가 존재하지 않아서[3] honoka[4] jQuery를 잘 모르는 분들을 위하여 설명하자면.. textarea 에 해당 페이지의 쿠키를 작성하라 라는 코드이다. 그 뒤 코드는 new-thread-form 이라는 클래스를 가진 폼을 제출 하라는 의미.JS로는 document.getElementsByTagName("textarea").value 가 되겠다.[5] 히토미로 날려버리라는 코드이다. 자바 스크립트으로 표현하자면 location.href 를 사용하면 된다.[6] 좀 창의적이었다.[7] 이 8명에는 당시 현직 관리자도 포함되어 있었다.