FlawOpen

flawopen.com/Teardowns/cve-2026-102255-sonicwall-sma1000-workplace-ssrf

● CVE-2026-102255 · CVSS 10.0[1] · Critique
Recherche · FlawOpen

CVE-2026-102255 : SSRF sur SonicWall SMA1000 WorkPlace

CVE-2026-102255 est une SSRF pré-authentification, CVSS 10,0, dans WorkPlace de SonicWall SMA1000. Le 12 octobre, le MS-ISAC indiquait qu’il n’existait alors aucun signalement d’exploitation dans la nature des quatre vulnérabilités de son avis. Il décrit aussi une voie conditionnelle vers l’exécution de code à distance si cette SSRF est chaînée à CVE-2026-102256, une faille distincte d’injection de commandes qui exige un compte administrateur authentifié. L’avis ne détaille ni la chaîne ni le franchissement de l’authentification : c’est une évaluation du risque, pas une chaîne démontrée. Des tentatives en honeypots compatibles avec CVE-2026-102255 ont été signalées le 9 octobre, sans compromission établie. Installez le correctif de plateforme.[1], [2], [3], [4], [5], [6]

💡 Explication en Langage Simple (ELI5)

Imaginez l’appliance comme une personne à l’accueil qui transmet des messages entre des salles. La faille permet à un inconnu de lui demander d’en transmettre un dans une salle protégée par un contrôle d’identité. SonicWall a corrigé ce chemin ; l’avis ne révèle ni route interne ni correctif source.[1]

Concepts Clés et Termes

Falsification de requête côté serveur (SSRF)
Un serveur est amené à envoyer une requête choisie par un appelant non fiable. SonicWall indique que l’appliance peut agir pour l’appelant et atteindre des fonctions internes.[1], [3]

Correspondances de référentiels

  • Référence CWE pour la faiblesse décrite dans ce guide : CWE-918

Analyse de Cause Racine

SonicWall décrit un chemin d’accès alternatif involontaire dans Appliance WorkPlace du SMA1000. Un attaquant distant non authentifié peut faire envoyer des requêtes par l’appliance en son nom, atteindre des fonctions internes et effectuer des opérations non autorisées. L’avis de SonicWall ne publie pas de diff du firmware. BleepingComputer cite le chercheur Ryan Dewhurst, qui rapporte des tentatives détectées par des honeypots : des requêtes OPTIONS visaient l’interface Extraweb de WorkPlace et le service CouchDB local. L’article ne permet pas d’établir qu’une tentative ait compromis un système ; cette page présente un signalement attribué de tentatives, pas une exploitation confirmée. Le payload et les identifiants rapportés ne sont pas reproduits. SonicWall attribue CVSS 10,0 Critique ; la fiche CVE indique CWE-918. Le fournisseur précise que les vulnérabilités d’octobre sont sans lien avec d’autres failles SonicWall. N’associez pas cette CVE aux divulgations SMA1000 antérieures dans une chaîne d’exploitation. L’avis SonicWall du 6 octobre indiquait qu’aucune preuve d’exploitation active n’était connue à cette date. Le 9 octobre, BleepingComputer a rapporté que le chercheur Ryan Dewhurst avait signalé des tentatives compatibles avec cette CVE détectées par les honeypots de Previdian ; leur réussite n’était pas établie. Mise à jour du 12 octobre 2026 : le MS-ISAC indique qu’il n’existe alors aucun signalement d’exploitation dans la nature des quatre vulnérabilités de cet avis. Cela concorde avec le signalement du 9 octobre de tentatives observées par des honeypots : ces tentatives ne prouvent pas une exploitation réussie et le MS-ISAC ne nomme aucune victime. Le même avis estime que la SSRF pré-authentification CVE-2026-102255 pourrait être chaînée à CVE-2026-102256, une faille distincte d’injection de commandes du système d’exploitation exigeant un administrateur authentifié, pour aboutir à une exécution de code à distance et à une compromission complète. Il n’explique pas comment satisfaire l’authentification, ne décrit aucune séquence démontrée et ne rapporte pas cette chaîne dans une activité observée. Traitez cela comme une évaluation conditionnelle du risque par une source gouvernementale, et non comme une chaîne confirmée ou reproductible. SonicWall indique les builds corrigés 12.4.3-03670+ et 12.5.0-03082+ ; appliquez le correctif même si la chaîne n’est pas établie.[1], [2], [3], [4], [6]

Déroulement de l'Attaque Étape par Étape

Étape 1

Une requête non authentifiée atteint WorkPlace

SonicWall situe la faille pré-authentification dans WorkPlace du SMA1000. BleepingComputer rapporte des tentatives OPTIONS observées par des honeypots contre l’interface Extraweb de WorkPlace ; cela ne confirme pas une compromission réussie.[1], [4]

Étape 2

L’appliance agit au nom de l’appelant

Le fournisseur indique que l’appliance peut atteindre des fonctions internes et effectuer des opérations non autorisées. Selon BleepingComputer, les tentatives visaient le CouchDB local, mais le chercheur n’avait pas établi de compromission réussie.[1], [4]

Étape 3

Réponse opérationnelle : appliquer le correctif et enquêter

SonicWall indique que les versions 12.4.3-03670+ et 12.5.0-03082+ sont corrigées. Si l’application du correctif est retardée, limitez l’exposition de WorkPlace comme mesure de confinement temporaire, conservez les journaux et enquêtez. Les tentatives signalées ne prouvent pas qu’une compromission a réussi.[1], [4], [5]

Code Source : Vulnérable vs Sécurisé

Le code source du firmware et le diff du correctif ne sont pas publics. Cet exemple Python générique limite l’appelant à un identifiant de service fixe ; l’application contrôle l’origine et le chemin et désactive les redirections. Ce n’est ni du code SonicWall, ni une reproduction de la CVE, ni une défense SSRF complète. Appliquez le hotfix SonicWall.[1]

Extrait source: Generic SSRF defense illustration; not SonicWall source

IMPLÉMENTATION VULNÉRABLE
# Illustration générique ; ce n’est ni du code SonicWall ni une reproduction de la faille.
def fetch_health(user_supplied_url, session):
    return session.get(user_supplied_url, timeout=3)
PATCH SÉCURISÉ ET ROBUSTE
# Modèle générique de défense contre les SSRF ; ce n’est ni du code SonicWall ni un correctif complet.
from urllib.parse import urljoin

SERVICE_PATHS = {"status": "/health"}
BASE_URLS = {"status": "https://status.example.internal"}

def fetch_health(service_id, session):
    base = BASE_URLS.get(service_id)
    path = SERVICE_PATHS.get(service_id)
    if base is None or path is None:
        raise ValueError("unknown service")
    # L’entrée utilisateur choisit une capacité fixe, jamais une URL ni un hôte.
    return session.get(urljoin(base, path), timeout=(2, 3), allow_redirects=False)

Liste de Contrôle de Sécurité pour l'Ingénierie

Sources