SysFailure

Technique

Imprimer

Les WAF - un concours canin

. Publié dans JSSI 2013

XyberShield

Fonctionnement général

Cet outil fonctionne par insertion de code dans l'application à protéger. L'entreprise indique que XyberShield permet de protéger le service contre les APT, les 0-days, la modification indûe, etc.

XyberShield protège contre les attaques simples, du type de celles d'un débutant, d'un mauvais testeur ou d'un outil de base. Mais son filtrage est facile à contourner, par une simple obfuscation des requêtes.

Le code PHP utilisé (pour protéger une application en PHP) positionne la variable error_reporting à E_ALL. Les erreurs de l'application sont alors affichées à l'utilisateur. Cela signifie que XyberShield peut abaisser le niveau de sécurité du service qu'il protège.

Toutes les informations reçues de l'internaute sont expédiées vers le nuage pour qu'elles soient analysées. La transmission utilise un chiffrement maison, à base de XOR, très facile à casser. Si l'application utilisait https afin de sécuriser les données envoyées par l'internaute, le renvoi vers le nuage est non sécurisé.

Contournement du WAF

L'analyse du code inséré dans l'application (toujours pour du PHP) fait apparaître deux contournements possibles.

  1. l'interception d'une requête provoque l'appel de deux fonctions spécifiques. L'examen de ces fonctions montre la présence d'une variable interne qui, si elle vaut 1, annule le filtrage du WAF. Cette variable est chiffrée (XOR), mais à l'aide d'une clé connue (présente dans les tutoriaux relatifs à dotNet). Il est donc possible de définir cette variable via une requête GET.
  2. Le cookie xybershieldstatus est composé de deux parties, P1 et P2. Chacune est un XOR avec la clé évoquée ci-avant. Si P2 est non nul, aucune vérification n'est faite par le WAF.

Interface d'administration

L'interface d'administration se révèle vulnérable à la modification de l'identifiant du client. Cela permet d'accéder aux informations d'un autre client (événements de sécurité, export, etc.)