Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-56011-Lab — CVE-2026-56011을 재현하고 검증하기 위한 Docker 기반 랩, WordPress용 MapPress Maps의 인증되지 않은 XSS 취약점, 취약한 대상과 패치된 대상 비교. | Kitploit
도구/GitHubGitHub/rootdirective-sec/cve-2026-56011-lab
Vulnerability AnalysisWeb Application ExploitationWeb SecurityPenetration TestingLearning & EducationLabs & Practice
GitHubrootdirective-sec/cve-2026-56011-lab

CVE-2026-56011-Lab

CVE-2026-56011을 재현하고 검증하기 위한 Docker 기반 랩, WordPress용 MapPress Maps의 인증되지 않은 XSS 취약점, 취약한 대상과 패치된 대상 비교.

저장소 보기
243개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-56011 - MapPress Maps for WordPress 무인증 XSS (iframe 지도 렌더링)

요약

이 저장소는 MapPress Maps for WordPress에 영향을 미치는 무인증 크로스사이트 스크립팅(Cross-Site Scripting) 취약점인 CVE-2026-56011을 재현하고 검증하기 위한 로컬 Docker 랩입니다.

MapPress Maps for WordPress는 WordPress 페이지와 게시물 내부에 지도를 렌더링하는 데 사용되는 WordPress 플러그인입니다. 취약한 동작은 mappress=embed 요청 매개변수를 통해 접근 가능한 iframe 지도 렌더링 경로에 영향을 미칩니다.

이 랩은 두 가지 MapPress 버전을 비교합니다:

서비스MapPress 버전용도URL
vuln2.97.3취약한 비교 대상http://localhost:8081
patched2.97.4패치된 비교 대상http://localhost:8082

이 로컬 랩에서 시연된 검증 경로는 다음과 같습니다:```text Unauthenticated browser request → GET /?mappress=embed → request supplies a crafted name value → vulnerable target renders name into an unquoted id attribute → injected onclick handler becomes a standalone HTML attribute → clicking the rendered MapPress component triggers alert(1) → patched target keeps the payload inside a quoted and escaped id attribute → clicking the rendered component does not trigger alert(1)

취약한 대상은 이 수동 브라우저 URL을 사용합니다:```text
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5&center=0%2C0

예상 취약 결과:```text Click on the rendered MapPress component → alert(1) pops up

패치된 대상은 MapPress 2.97.4에 대해 동일한 페이로드를 사용합니다:```text
http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5&center=0%2C0

예상 패치 결과:```text Click on the rendered MapPress component → no alert appears

이 실습은 의도적으로 수동 브라우저 검증만 사용합니다. PoC 스크립트, 브라우저 자동화, 자격 증명 탈취, 외부 콜백, 악성코드, 지속성, 사후 침투 활동 또는 외부 시스템에 대한 공격은 포함하지 않습니다.

## 확인된 사실

| 주장                                                                                  | 근거                                                                                               | 이 실습에서 확인하는 방법                                                                     |
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- |
| CVE-2026-56011은 MapPress Maps for WordPress에 영향을 미칩니다. | 공개 취약점 권고는 영향을 받는 WordPress 플러그인을 MapPress Maps for WordPress로 식별합니다. | 참고 자료 섹션을 검토하고 두 Docker 대상에 설치된 플러그인을 검사합니다. |
| 이 실습에서 취약한 비교 버전은 MapPress 2.97.3입니다. | `vuln` 서비스는 `MAPPRESS_VERSION: 2.97.3`을 사용하여 플러그인을 빌드합니다. | `docker-compose.yml`과 `vuln/Dockerfile`을 검사합니다. |
| 이 실습에서 패치된 비교 버전은 MapPress 2.97.4입니다. | `patched` 서비스는 `MAPPRESS_VERSION: 2.97.4`을 사용하여 플러그인을 빌드합니다. | `docker-compose.yml`과 `patched/Dockerfile`을 검사합니다. |
| MapPress 2.97.4는 관련 iframe 이스케이프 수정을 도입했습니다. | 2.97.4의 공식 플러그인 변경 로그에는 `Added: escape in iframe`이라고 나와 있습니다. | 공식 WordPress 플러그인 변경 로그를 검토하고 취약한 소스와 패치된 소스를 비교합니다. |
| 취약한 소스는 지도 이름을 따옴표 없이 웹 구성 요소 `id`에 렌더링합니다. | 2.97.3에서 `mappress_map.php`는 `<mappress-map id={$name} ...>`을 렌더링합니다. | 2.97.3 소스와 2.97.4 소스를 비교합니다. |
| 패치된 소스는 `id` 값을 따옴표로 묶고 이스케이프합니다. | 2.97.4에서 `mappress_map.php`는 `esc_attr($name)`과 함께 `id="`을 렌더링합니다. | 2.97.3과 2.97.4 간의 패치 diff를 비교합니다. |
| iframe 경로는 인증 없이 접근할 수 있습니다. | MapPress는 `$_GET['mappress']`가 있을 때 `template_redirect`를 등록합니다. | 로그인하지 않고 브라우저에서 `/?mappress=embed...`를 요청합니다. |
| iframe 경로는 요청에서 지도 속성을 읽습니다. | `template_redirect()`는 `$_GET`을 지도 인수에 매핑하고 iframe 렌더러를 호출합니다. | `mappress.php`를 검사하고 수동 URL을 재현합니다. |
| 취약한 대상은 `name`을 통한 속성 주입을 허용합니다. | 조작된 name 값은 따옴표 없는 `id` 속성에서 벗어나 `onclick=alert(1)`이 될 수 있습니다. | 취약한 수동 URL을 열고 렌더링된 MapPress 구성 요소를 클릭합니다. |
| 패치된 대상은 테스트된 속성 주입 동작을 차단합니다. | 패치된 출력은 전체 페이로드를 따옴표로 묶인 `id` 속성 안에 유지합니다. | 패치된 수동 URL을 열고 렌더링된 MapPress 구성 요소를 클릭합니다. |

## 가정 및 미지의 사항

이 실습은 공개 권고가 2.97.3 이하 버전을 영향을 받는 것으로 식별하고, 소스 diff가 해당 버전에서 취약한 따옴표 없는 속성 렌더링을 보여주기 때문에 MapPress 2.97.3을 취약한 비교 대상으로 사용합니다.

이 실습은 공개 권고가 2.97.4를 수정된 버전으로 식별하고, 공식 변경 로그가 iframe 경로에 이스케이프가 추가되었다고 명시하기 때문에 MapPress 2.97.4를 패치된 비교 대상으로 사용합니다.

테스트된 취약한 동작은 인증되지 않은 iframe 렌더링 경로입니다:```text
GET /?mappress=embed&name=<crafted-value>

이 랩은 무해한 alert 페이로드를 브라우저에서 수동으로 실행하는 데 초점을 맞춥니다:```text name=cve56011 onclick=alert(1)

이 랩은 저장형 전달 체인을 입증하려 시도하지 않습니다. 일부 공개 보안 권고에서는 이 취약점을 저장형 XSS로 분류합니다. 이 저장소는 소스 코드에서 확인된 iframe 렌더링 싱크와, 인증되지 않은 `mappress=embed` 경로를 통해 로컬에서 재현할 수 있는 취약 버전과 패치 버전 간의 동작 차이에 초점을 맞춥니다.

이 랩은 다음을 시연하지 않습니다:

* 저장된 페이로드의 지속성,
* WordPress 계정 침해,
* 관리자 세션 탈취,
* nonce 탈취,
* 외부 콜백,
* 블라인드 XSS 수집,
* 자격 증명 탈취,
* 데이터베이스 덤프,
* 악성코드,
* 지속성,
* 또는 실험실 외 시스템에 대한 공격.

수동 브라우저 검증은 보안 관련 렌더링 차이를 입증합니다:```text
MapPress 2.97.3:
  crafted name value becomes executable onclick attribute

MapPress 2.97.4:
  crafted name value remains inside the quoted id attribute

근본 원인 요약

CVE-2026-56011의 근본 원인은 MapPress가 iframe 맵 출력 경로 내부에서 웹 컴포넌트를 렌더링할 때 맵 name 값에 대한 출력 인코딩이 잘못된 것입니다.

취약한 코드 경로는 요청의 맵 렌더링 속성을 받아들여 결국 사용자 정의 HTML 요소를 렌더링합니다:```html <mappress-map ...>

MapPress 2.97.3에서 맵 이름은 따옴표 없이 그리고 속성 컨텍스트 이스케이프 없이 `id` 속성에 직접 삽입됩니다:```php
return "<div></div>\r\n<mappress-map id={$name} {$atts}>\r\n$pois\r\n</mappress-map>\r\n";

이것은 값이 HTML 속성 컨텍스트에서 사용되므로 안전하지 않습니다. 공격자가 name을 제어할 수 있다면, 공백을 포함한 값은 의도된 id 값을 종료시키고 새 속성을 삽입할 수 있습니다.

취약한 동작은 다음과 같이 요약할 수 있습니다:```text Attacker sends unauthenticated iframe request → name = cve56011 onclick=alert(1) → MapPress sanitizes the value as text → sanitized text is still unsafe for an unquoted HTML attribute → renderer outputs id=cve56011 onclick=alert(1) → onclick becomes a standalone event handler attribute → user clicks the rendered component → JavaScript executes

중요한 점은 일반적인 텍스트 정화(sanitization)는 올바른 출력 이스케이프(escaping)와 동일하지 않다는 것입니다.

취약한 코드는 맵 이름에 `sanitize_text_field()`를 사용하지만, 이는 값을 따옴표로 묶지 않은 HTML 속성에 안전하게 만들지 않습니다.

HTML 속성에서 공백은 속성과 속성을 구분하기 때문에 여전히 의미를 지닙니다.

따라서 보안 문제는 다음과 같습니다:```text
User-controlled input
+ unquoted HTML attribute context
+ missing esc_attr()
= attribute injection and XSS

패치된 버전은 렌더링 시 id 값을 따옴표로 묶고 이스케이프하도록 변경합니다:```php return "

\r\n<mappress-map id="" . esc_attr($name) . "" {$atts}>\r\n$pois\r\n\r\n";

패치된 동작은 다음과 같이 요약할 수 있습니다:```text
Attacker sends the same crafted name value
→ MapPress renders id="cve56011 onclick=alert(1)"
→ onclick remains text inside the id value
→ no standalone event handler attribute is created
→ clicking the component does not execute alert(1)

보안 교훈은 다음과 같습니다:```text Sanitize on input if needed, but always escape on output for the exact output context. For HTML attributes in WordPress, use esc_attr() and quote attribute values.

## 소스 코드 분석

소스 수준의 문제는 MapPress 2.97.3과 MapPress 2.97.4를 비교하여 확인되었습니다.
도구 다운로드