워드프레스용 weDocs 플러그인에서 저장형 크로스사이트 스크립팅(Stored XSS) 취약점이 보고됐다. CVE-2026-104760으로 관리되는 이 취약점은 modalPlaceholder 블록 속성에 대한 입력 정제와 출력 이스케이프가 충분하지 않아 발생한다. 기여자(contributor) 이상의 권한이면 악성 스크립트를 저장할 수 있고, 아직 게시되지 않은 글을 미리 보는 과정에서도 스크립트가 실행될 수 있다는 점이 이번 건을 다룰 만하게 만든다.
개요

weDocs는 문서와 위키, AI 기반 지식베이스 기능을 표방하는 워드프레스 플러그인이다. CVE 레코드는 2.6.1 이하 모든 버전에서 modalPlaceholder 블록 속성을 통한 저장형 XSS를 지적하며, 원인을 불충분한 입력 정제(input sanitization)와 출력 이스케이프(output escaping)로 명시한다.
- 취약점 유형: 저장형 크로스사이트 스크립팅(Stored XSS)
- 영향 버전: weDocs 2.6.1 이하 모든 버전
- 공격 전제: 인증된 기여자 수준 이상의 권한
- 실행 조건: 스크립트가 삽입된 페이지에 사용자가 접근할 때마다 브라우저에서 실행될 수 있음
- 특히 주의할 경로: 검토 대기 상태로 저장된 글을 관리자나 편집자가 미리 보거나 열람할 때
익명 방문자가 바로 악용할 수 있는 취약점이 아니라, 내부 권한을 가진 계정이 출발점이 된다는 점이 기본 전제다.
영향 범위
공격에는 인증된 기여자 수준 이상의 권한이 필요하다. 따라서 위험의 실제 크기는 사이트에 기여자 권한을 얼마나 열어뒀고 그 계정을 어떻게 관리하는지에 따라 달라진다. 외부 필자가 글을 쓰는 문서 사이트와 소수 계정만 쓰는 사이트의 점검 범위는 같을 수 없다.
실행은 스크립트가 삽입된 페이지를 여는 사람에게 일어난다. weDocs가 문서와 위키를 위한 플러그인인 만큼 같은 페이지를 여러 독자가 반복해 열람한다면, 한 번 저장된 페이로드에 노출될 기회도 길어진다.
더 눈에 띄는 지점은 게시 이전 단계다. 기여자는 글을 검토 대기 상태로 저장할 수 있기 때문에, 공개되지 않은 콘텐츠를 미리 보거나 열람하는 관리자와 편집자의 브라우저에서도 삽입된 스크립트가 실행될 수 있다. 미공개 콘텐츠라는 이유로 위험을 낮게 평가해 온 사전 검토 과정이 사실은 실행 경로가 될 수 있다는 해석이 가능하다.
기술적 분석
CVE 레코드가 명시하는 원인은 두 가지 결함이다. modalPlaceholder 블록 속성에 대해 입력 정제(input sanitization)와 출력 이스케이프(output escaping)가 불충분하다는 것이 근거가 밝히는 전부이며, 그 밖의 내부 동작은 기재돼 있지 않다. 그 결과 속성 값에 담긴 스크립트가 삽입된 페이지를 열람하는 사용자의 브라우저에서 실행될 수 있고, 레코드는 사용자가 삽입된 페이지에 접근할 때마다 실행 가능성이 열린다고 설명한다. 저장형인 만큼 실행 기회는 열람이 일어날 때마다 반복해서 생긴다. 다만 제공된 근거는 속성 값의 처리 원칙까지만 확인하고, 블록 속성이 저장되는 내부 구조나 코드 위치까지는 밝히지 않는다.
권한 관점에서 보면 이 취약점은 신뢰의 방향을 역이용한다. 미리보기는 관리자·편집자가 기여자의 글을 검토하는 정상 업무 절차다. CVE 레코드는 기여자가 게시물을 검토 대기 상태로 저장할 수 있다는 점을 근거로, 대기 중인 글을 미리 보거나 열람하는 관리자나 편집자의 브라우저에서 페이로드가 실행될 수 있다고 밝힌다. 같은 레코드는 삽입된 페이지에 사용자가 접근할 때마다 실행될 수 있다고도 적고 있어, 실행 대상이 게시 전 검토 단계에만 머물지는 않는다. 기여자 콘텐츠는 게시 전이라 무해하다는 전제로 사이트를 운영해 왔다면, 그 전제 자체를 점검 범위에 넣어야 한다.
수정 상황은 weDocs 2.6.2 변경 이력에 정리돼 있다. 2026년 11월 4일자로 기재된 2.6.2 변경 이력은 기여자 이상 권한으로 가능한 저장형 XSS를 Quick Search, Helpful Modal, Table of Contents, Helpful Feedback 블록과 [wedocs] 숏코드의 more 레이블, Docs Grid·Search Modal·Table of Contents Elementor 위젯에서 수정했다고 밝힌다. 다만 이 목록은 modalPlaceholder 속성을 이름으로 지목하지 않고, 제공된 근거도 해당 속성과 개별 수정 항목 사이의 직접적인 대응 관계를 명시하지 않는다. 변경 이력이 블록·숏코드·위젯 단위의 수정을 넓게 나열한 정황이므로 해당 속성도 폭넓은 수정과 함께 다뤄졌을 가능성을 배제할 수는 없다. 반대로 목록에 이름이 없는 경로를 근거로 미수정이라고 결론 낼 수도 없다. 어느 쪽으로 해석하든 업데이트 이후에도 기여자 콘텐츠에 대한 검토 통제는 별도로 유지하는 편이 안전하다.
같은 변경 이력에는 이 건과 분리된 보안 수정 항목도 기재돼 있다. 로그아웃 상태 방문자가 문서 검색을 통해 비밀번호 보호 문서의 내용과 비밀번호를 볼 수 있던 문제, 로그인 없이 초안·비공개·비밀번호 보호 문서의 AI 요약을 읽고 생성할 수 있던 문제가 2.6.2의 보안 항목으로 함께 올라 있다. 제공된 근거는 이들 문제의 원인을 밝히지 않으므로, 이번 취약점과 같은 원인인지 다른 원인인지는 확인하지 못한다. 확인할 수 있는 것은 2.6.2 변경 이력에 여러 보안 수정이 함께 포함됐다는 사실뿐이다.
확정되지 않은 부분도 분명히 해 둔다. 제공된 근거에는 실제 악용도, 독립적으로 검증된 공개 개념증명(PoC)도 확인되지 않는다. 다만 확인되지 않았다는 사실을 악용 부재로 읽지는 말자. 악성 속성 사용을 식별할 구체적인 로그나 탐지 지표도 제공되지 않아, 이 글에서는 탐지 방법을 안내하지 못한다.
대응 방안
먼저 현재 상태를 확정한다. 설치된 weDocs 버전이 2.6.1 이하인지 확인하고, 영향 범위에 해당하면 기여자 이상 권한을 가진 계정 목록과 그 필요성을 점검한다. 외부 필자나 과거 기여자의 계정이 남아 있다면 정리 대상이다.
운영 순서로는 권한 점검과 미리보기 취급 방식의 검토가 버전 확인과 같은 시점에 이뤄지는 것이 좋다. 기여자가 작성한 미게시 글을 미리 보거나 열람할 때, 그 자리도 스크립트가 실행될 수 있는 경로라는 전제로 다루는 것이 근거의 취지에 맞다.
수정 버전 적용은 변경 관리 절차에 따라 우선 검토한다. 2.6.2로 업데이트하기 전에 사이트·테마·커스텀 블록과의 호환성을 확인하고, 가능하면 비프로덕션 환경에서 먼저 적용한다. 앞서 밝힌 대로 modalPlaceholder 속성과 변경 이력의 개별 수정 항목의 대응 관계는 추가 확인이 필요하므로, 업데이트만으로 이 경로의 위험이 해소됐다고 단정하지 말고 권한 검토와 미게시 글 검토 절차를 함께 유지한다.
장기적으로는 기여자 이상 권한의 필요성을 정기적으로 재검토하는 것이 유효하다. 저장형 XSS의 전제 조건이 곧 권한이기 때문이다.
참고자료
함께 읽으면 좋은 글
- CVE-2026-115816: Kubio AI Page Builder 플러그인의 저장형 XSS 점검
- CVE-2026-120537: TranslatePress AI Translation 플러그인의 저장형 XSS 점검
- CVE-2026-118046: JS Help Desk AI 지원 플러그인의 저장형 DOM XSS 점검
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!