| r19 vs r20 | ||
|---|---|---|
| ... | ... | |
| 18 | 18 | |
| 19 | 19 | 이는 엔진에 존재하지 않는 권한이기 때문에 문서 편집을 시도 시 편집이 거부되며 편집 요청으로 넘어가는데, 패치 전에는 '''편집 권한이 부족합니다. perm: OR perm: 이어야 합니다.''' 라는 메시지가 뜨며 ACL에 삽입한 내용이 textContent가 아니라 innerHTML로 출력되는 현상이 발생했었다. |
| 20 | 20 | |
| 21 | 다행히 [[https://www.w3.org/TR/2008/WD-html5-20080610/dom.html#innerhtml0|W3C HTML5]] 스펙 상 | |
| 21 | 다행히 [[https://www.w3.org/TR/2008/WD-html5-20080610/dom.html#innerhtml0|W3C HTML5]] 스펙 상 차후에 {{{.innerHTML}}} 등으로 포함된 inline script는 차단되는 것이 표준이라 위키 내부 링크를 타고 들어온 경우 별 일이 없었으나, 그 상태에서 페이지를 새로고침하거나 애초에 외부 링크를 타고 들어온 경우 SSR을 사용하므로 해당 제한의 대상이 아니었다. 때문에 {{{alert('xss')}}}가 실행되며 경고 창이 뜨고, 이후 [[https://theseed.io/thread/RipeLuckyBrashWood]] 페이지로 강제 납치되었다. | |
| 22 | 22 | |
| 23 | 23 | [[https://revi.wiki/wiki/파일:더시드_XSS_20250919.mp4|(외부 링크) 해당 취약점 시연 영상]][* [[사용자:revi]]에 의해 [[https://theseed.io/thread/AboundingGlibLittleBait#318|제공]]됨.] |
| 24 | 24 | == 위험성 == |
| 25 | 하나의 ACL 엔티티는 그 길이를 최대 255자까지밖에 지정할 수 없기는 하나, 추가할 수 있는 ACL 엔티티의 개수에는 제한이 없기에 사실상 무용지물로, 내부에 값을 잔뜩 추가한 다음 eval()을 해버리면 간단히 우회가 가능했었다. 따라서 공격자가 공격 코드의 길이 제한을 간단하게 없애버릴 수 있었다. | |
| 25 | 하나의 ACL 엔티티는 그 길이를 최대 255자까지밖에 지정할 수 없기는 하나, 추가할 수 있는 ACL 엔티티의 개수에는 제한이 없기에 사실상 무용지물로, 내부에 값을 잔뜩 추가한 다음 eval()을 해버리면 간단히 우회가 가능했었다. 따라서 공격자가 공격 코드의 길이 제한을 간단하게 없애버릴 수 있었다. 이 때문에 길이 제한 없이 공격자가 사실상 자유롭게 공격 가능한 환경이 조성되었다. | |
| 26 | 26 | |
| 27 | ||
| 27 | 다행히 the seed engine을 사용하는 위키에는 [[2017년 나무위키 XSS 공격 보고서]]에서도 언급한 바 있듯이 Content Security Policy가 별도로 적용되어 있고, 쿠키에는 모두 Secure 및 HttpOnly 플래그가 붙어있어 공격자가 쿠키를 획득한다든가, 외부 XHR을 생성한다든가 할 수는 없었다. | |
| 28 | 28 | |
| 29 | ||
| 30 | ||
| 31 | == | |
| 29 | == 대응 == | |
| 32 | 30 | === 더시드위키에서 === |
| 33 | 31 | ACL 조정은 [[admin]] 권한이 있어야 가능하나, 이 권한은 대부분의 사용자들이 아무 제약 없이 받을 수 있는 권한이기에 발견 즉시 모든 사용자의 ACL 조정이 [[https://theseed.io/thread/AwfulAdDeliciousTurn|제한]]되었고, v4.28.0.897에서 해결된 것을 확인 후 ACL 조정 제한이 해제되었다. |
| 34 | 32 | |
| ... | ... |