Source: watchTowr Labs — Dans une publication technique, les chercheurs détaillent une nouvelle chaîne d’attaque menant à une exécution de code à distance (RCE) pré-authentifiée sur SolarWinds Web Help Desk (WHD), via désérialisation Java et contournements du modèle de sécurité WebObjects et des mécanismes de sanitation.

🚨 Contexte et historique: Le produit SolarWinds Web Help Desk, reposant sur le framework Java WebObjects, a déjà connu plusieurs failles de désérialisation pré-auth exploitées in-the-wild (ex. CVE-2024-28986) et des correctifs ultérieurs (CVE-2024-28988, CVE-2025-26399). Les auteurs revisitent ces chemins d’exploitation et montrent comment les correctifs précédents peuvent être contournés.

🔐 Nouvelles vulnérabilités: Les chercheurs annoncent trois CVE:

  • CVE-2025-40552 (WT-2025-0099): contournement d’authentification brisant le modèle hiérarchique WebObjects via le paramètre wopage, permettant d’attacher arbitrairement des pages sans authentification.
  • CVE-2025-40553 (WT-2025-0100): RCE via désérialisation (AjaxProxy/jabsorb) en contournant la sanitation du JSON; utilisation d’échappements \xNN non gérés par Jackson/Apache Commons mais décodés par org.json.JSONObject pour préserver des champs critiques (ex. params).
  • CVE-2025-40554 (WT-2025-0101): second contournement d’authentification ciblant des actions Ajax.

🧪 Chaîne d’exploitation: En combinant CVE-2025-40552 (accès à des composants internes pré-auth) avec CVE-2025-40553 (désérialisation contrôlée), les auteurs obtiennent une RCE. Bien que la suppression manuelle de la librairie c3p0 ait neutralisé un gadget initial, ils démontrent un gadget alternatif avec Apache Commons DBCP2 BasicDataSource: définition des propriétés JDBC et d’une validationQuery qui, une fois la connexion établie vers l’instance PostgreSQL locale (installée par défaut et configurée en mode « trust » sur loopback), permet l’exécution de commandes OS via COPY FROM PROGRAM.

🧩 Détails clés du bypass:

  • Pour CVE-2025-26399, les contrôles de longueur et de regex peuvent être contournés en jouant sur l’ordre de décodage (double parsing) et des séquences d’échappement \xNN que la sanitation ne normalise pas mais que JSONObject accepte, permettant de masquer des clés sensibles (ex. params, javaClass).
  • Le paramètre wopage dans un contexte de restauration de page en erreur permet d’attacher directement des pages internes (ex. LookAndFeelPref, JavaSystemProperties) sans suivre la hiérarchie attendue.

📅 Timeline: Vulnérabilités découvertes fin septembre 2025, confirmées par l’éditeur en octobre 2025, et publication des CVE-2025-40552/40553/40554 le 28 janvier 2025, avec mise à disposition d’un Detection Artifact Generator (DAG) pour tester la présence du bypass d’authentification et tenter la RCE.

IOC et TTPs:

  • TTPs:
    • Désérialisation Java setter-based via AjaxProxy/jabsorb (méthodes comme wopage.takeValueForKey/validateValueForKey).
    • Bypass de sanitation JSON grâce aux échappements \xNN (différence de parsing entre Jackson/Apache Commons et org.json.JSONObject).
    • Contournement WebObjects: utilisation du paramètre wopage pour forcer pageWithName et l’attachement arbitraire de pages.
    • Gadget JDBC: Apache Commons DBCP2 BasicDataSource avec validationQuery pour exécuter SQL immédiatement après connexion.
    • PostgreSQL local en mode trust (service installé par défaut, écoute locale) menant à COPY FROM PROGRAM pour exécution de commandes OS.
  • Indicateurs/artefacts techniques (IOCs techniques potentiels):
    • Accès à /helpdesk/WebObjects/Helpdesk.woa/ajax/... et /helpdesk/WebObjects/Helpdesk.woa/wo/... avec usage inhabituel de wopage.
    • Corps JSON contenant des clés encodées en \xNN (ex. variantes de params, javaClass).
    • En-tête X-Xsrf-Token présent dans des requêtes Ajax POST anormales.
    • Service PostgreSQL13ServiceWHD actif en local; port local PostgreSQL référencé (exposition locale décrite).

Conclusion: Publication de recherche technique visant à documenter une chaîne d’exploitation pré-auth RCE sur SolarWinds WHD, à expliquer les contournements de patchs et à fournir des artefacts de détection.

🧠 TTPs et IOCs détectés

TTP

Désérialisation Java setter-based via AjaxProxy/jabsorb, Bypass de sanitation JSON grâce aux échappements \xNN, Contournement WebObjects via le paramètre wopage, Gadget JDBC avec Apache Commons DBCP2 BasicDataSource et validationQuery, PostgreSQL local en mode trust menant à COPY FROM PROGRAM pour exécution de commandes OS.

IOC

Accès à /helpdesk/WebObjects/Helpdesk.woa/ajax/… et /helpdesk/WebObjects/Helpdesk.woa/wo/… avec usage inhabituel de wopage, Corps JSON contenant des clés encodées en \xNN, En-tête X-Xsrf-Token présent dans des requêtes Ajax POST anormales, Service PostgreSQL13ServiceWHD actif en local; port local PostgreSQL référencé.


🔗 Source originale : https://labs.watchtowr.com/buy-a-help-desk-bundle-a-remote-access-solution-solarwinds-web-help-desk-pre-auth-rce-chain-s/