Selon Defused, une nouvelle vague d’exploitation visant Ivanti Endpoint Manager Mobile (EPMM) a démarré le 4 février 2026 avec une approche discrète : plutôt que d’installer des webshells classiques et d’exécuter des commandes, l’opérateur a uniquement déposé un implant et vérifié sa présence, sans activité post-exploitation. L’accès ainsi établi est resté en sommeil, un mode opératoire cohérent avec celui d’un Initial Access Broker (IAB).

• Vulnérabilités exploitées: Ivanti a divulgué deux failles critiques, CVE-2026-1281 et CVE-2026-1340, couvrant contournement d’authentification et exécution de code à distance sur des paquets distincts (aftstore et appstore), menant à un accès non authentifié aux endpoints applicatifs. Les premières exploitations observées incluaient du scanning opportuniste et des dépôts de webshells « commodité ».

• La campagne 403.jsp: Tous les exploits ont déposé une charge à l’emplacement /mifs/403.jsp (chemin déjà vu dans d’anciens incidents). Au lieu d’un webshell interactif, l’attaquant a transmis, via paramètres HTTP, un fichier de classe Java encodé Base64 (en-tête CAFEBABE encodé yv66vg) jouant le rôle de chargeur de classe en mémoire et demeurant dormant.

• Fonctionnement interne: La classe compilée base.Info (source Info.java) détourne la méthode equals(Object) comme point d’entrée (moins suspecte que doGet/doPost) et extrait HttpServletRequest/Response via une logique de fallback (y compris PageContext et wrappers) pour une compatibilité large. Lorsqu’un paramètre HTTP k0f53cf964d387 est présent, la valeur est découpée (retrait de deux caractères), décodée en Base64 (compatibilité java.util.Base64 et sun.misc.BASE64Decoder), puis chargée en mémoire via ClassLoader#defineClass sans écriture disque. La classe résultante est instanciée avec des infos hôte minimalistes (rép. de travail, racines FS, OS, utilisateur), et la sortie de toString() est renvoyée, délimitée par les marqueurs 3cd3d / e60537 (type text/html) pour un parsing automatisé.

• Ce que l’on n’a pas vu: Aucune requête ultérieure fournissant une « seconde étape » au paramètre déclencheur n’a été observée. L’implant a été déployé et validé, puis laissé inactif — un schéma compatible avec l’IAB (constitution d’inventaire d’accès en vue d’une revente ou d’un passage de main). La séparation entre l’acteur qui installe l’accès et celui qui l’exploite complique la détection, la télémétrie restant silencieuse entre les deux phases.

• Indicateurs et traces à rechercher (logs):

  • Requêtes vers /mifs/403.jsp
  • Gros paramètres Base64 commençant par yv66vg (CAFEBABE encodé)
  • Présence du paramètre k0f53cf964d387
  • Corps de réponse contenant les marqueurs 3cd3d ou e60537
  • Toute réponse incluant ERROR:// (format d’erreur du chargeur)

• Artefacts (IOCs):

  • Classe: base.Info (source: Info.java)
  • SHA-256: 097b051c9c9138ada0d2a9fb4dfe463d358299d4bd0e81a1db2f69f32578747a

• IOCs réseau – IP sources observées:

  • 104.219.171.96 (Datacamp Limited, AS212238, 🇺🇸)
  • 108.64.229.100 (AT&T Enterprises, LLC, AS7018, 🇺🇸)
  • 115.167.65.16 (NTT America, Inc., AS2914, 🇺🇸)
  • 138.36.92.162 (HOSTINGFOREX S.A., AS265645, 🇺🇸)
  • 146.103.53.35 (Datacamp Limited, AS212238, 🇺🇸)
  • 148.135.183.63 (Datacamp Limited, AS212238, 🇺🇸)
  • 151.247.221.59 (Datacamp Limited, AS212238, 🇺🇸)
  • 166.0.83.171 (UK Dedicated Servers Limited, AS42831, 🇬🇧)
  • 172.59.92.152 (T-Mobile USA, Inc., AS21928, 🇺🇸)
  • 185.240.120.91 (Datacamp Limited, AS212238, 🇺🇸)
  • 185.239.140.40 (Datacamp Limited, AS212238, 🇪🇸)
  • 194.35.226.128 (LeaseWeb Netherlands B.V., AS60781, 🇳🇱)
  • 193.41.68.58 (LeaseWeb Netherlands B.V., AS60781, 🇳🇱)
  • 77.78.79.243 (SPCom s.r.o., AS204383, 🇨🇿)
  • 62.84.168.208 (Hydra Communications Ltd, AS25369, 🇬🇧)
  • 45.66.95.235 (Hydra Communications Ltd, AS25369, 🇬🇧)
  • 46.34.44.66 (Liberty Global Europe Holding B.V., AS6830, 🇳🇱)

• Détection tierce: La classe base.Info soumise à VirusTotal a été détectée par Nextron Systems THOR APT Scanner via une règle générique « caractéristiques JSP webshell ». Les antivirus traditionnels passent majoritairement à côté (implant en mémoire), tandis que les moteurs heuristiques identifient les signatures comportementales propres aux chargeurs de classes en mémoire.

• Actions immédiates évoquées par l’article: appliquer les correctifs Ivanti EPMM, redémarrer les serveurs applicatifs pour purger les implants en mémoire, puis revoir les journaux d’accès à l’aide des indicateurs ci-dessus.

Conclusion: Il s’agit d’une analyse de menace détaillant une campagne silencieuse visant Ivanti EPMM, décrivant la chaîne technique, les artefacts, ainsi que les IOCs/TTPs, afin de documenter la compromission et son mode opératoire.

🧠 TTPs et IOCs détectés

TTP

Exploitation de vulnérabilités (CVE-2026-1281, CVE-2026-1340), Dépôt d’implant dormant, Utilisation d’un chargeur de classe en mémoire, Utilisation de paramètres HTTP pour le chargement en mémoire, Utilisation d’un Initial Access Broker (IAB) pour l’accès initial, Détournement de méthode equals(Object) pour point d’entrée, Absence d’activité post-exploitation immédiate

IOC

{‘hash’: ‘097b051c9c9138ada0d2a9fb4dfe463d358299d4bd0e81a1db2f69f32578747a’, ‘ip’: [‘104.219.171.96’, ‘108.64.229.100’, ‘115.167.65.16’, ‘138.36.92.162’, ‘146.103.53.35’, ‘148.135.183.63’, ‘151.247.221.59’, ‘166.0.83.171’, ‘172.59.92.152’, ‘185.240.120.91’, ‘185.239.140.40’, ‘194.35.226.128’, ‘193.41.68.58’, ‘77.78.79.243’, ‘62.84.168.208’, ‘45.66.95.235’, ‘46.34.44.66’]}


🔗 Source originale : https://defusedcyber.com/ivanti-epmm-sleeper-shells-403jsp