Jour 9 • Encore du code source

Cette journée a été la continuité de la veille. Le matin, j’ai continué à chercher des solutions pour pallier les vulnérabilités trouvées sur l’application de gestion des déchets.
Pour l’échappement des caractères, je n’ai pas mieux trouvé que htmlspecialchars. Néanmoins, la fonction utilisée telle quelle n’échappe pas les guillemets simples. Il faut ajouter un paramètres à la fonction pour que les caractères &, ", ', < et > soient échappés :

htmlspecialchars('ma super donnée à échapper', ENT_QUOTES)

Néanmoins, même sans ajouter ce paramètre, ajouter cette fonction d’échappement résoudra bien des problèmes.

Petite pause le midi pour jouer à Left4Dead. Bizarrement, il a fallu quelques temps avant d’arriver à ce que nous puissions tous les trois rejoindre une même partie en réseau local alors que nous avions tous une version authentique. Ce fut bien rigolo.

L’après-midi, je me suis plus concentré sur la validation des fichiers envoyés sur le serveur. J’ai trouvé deux solutions. Elles peuvent être mises en place séparément, mais il me semblerait plus judicieux de tout le temps utiliser les deux…

  1. La première solution consiste à désactiver l’exécution de scripts PHP dans les dossiers uploads et de forcer le téléchargement des fichiers.
  2. La seconde solution consiste à vérifier le type et l’extension du fichier envoyé, et de rejeter tout fichier dont ces critères ne seraient pas autorisés.

D’une manière générale, la seconde méthode doit toujours être mise en place, car :

Ne jamais faire confiance aux données reçues.

La première solution n’est là que si la vérification aurait échouée.

Jour 8 • Un peu de code source

La journée a commencé avec deux voitures incendiées : en arrivant nous avons pu voir que deux voitures de fonction utilisées par la collectivité locale étaient en cendre. Une personne de la police scientifique était présente et s’adonnait à des prélèvements, photos, etc pour tenter de déterminer la cause. A priori, ce ne serait pas volontaire.

Voitures brûlées

La suite du programme a été de tester une application web1 permettant de gérer le recyclage de gros déchets.
P. s’est rapidement aperçu que les champs des formulaires n’étaient aucunement contrôlés : bonjour les failles XSS. D’autre part, l’envoi de fichiers n’était pas non plus sécurisé : nous avons pu envoyer un fichier PHP et l’exécuter. Et enfin les commandes systèmes exec, shell_exec et system n’étaient pas désactivées, ce qui nous a permis d’avoir la main mise sur le serveur…Capture faille exploitée par script PHPL’après-midi a été consacré à la recherche des lignes problématiques dans le code source que B. a pu nous fournir. Les développeurs ont utilisés le framework Zend pour leur application. Le problème, c’est que Zend n’échappe les caractères par défaut lors de réception de données2. Il faut donc qu’à chaque ligne où la méthode de Zend pour récupérer une requête est utilisée échapper les caractères avec la fonction htmlspecialchars3.
Sublime Text a su me fournir rapidement toutes les lignes à corriger. Reste maintenant à pouvoir modifier le code source du projet en intégration…


  1. Encore en développement, sur un serveur d’intégration 

  2. Données reçues en GET ou en POST 

  3. L’application est en effet codée en PHP 

Jour 7 • Bouclage des rapports

La matinée m’a permis de finir le second rapport non terminé hier.

Avec les conseils d’A. j’ai modifié le rapport envoyé hier. Il me conseille de privilégier les tournures impersonnelles : « Une version récente et à jour de Java est requise » plutôt que « Une version récente et à jour de Java doit être installée sur votre machine ». C’est une affaire de goût, le contenu et son sens n’étant pas changé. Ces petites modifications ont rapidement été faites. Un autre conseil d’A. a été d’ajouter les erreurs courantes que les utilisateurs pourraient rencontrer. L’outil étant multiplateforme et ne nécessitant que Java, seul une version ancienne de Java pourrait poser problème.

Avant de rentrer manger à la maison, il a fallu se décider sur ce que l’on voulait amener pour le barbecue de vendredi midi1. Les collègues se sont cotisés pour acheter un nouveau barbecue. Il va donc falloir l’étrenner

L’après-midi a permis de finir et de faire relire mon second rapport, celui sur les tests de montée en charge effectués la semaine dernière.
N’ayant toujours pas reçu les codes sources d’application car B. est malheureusement bien trop occupé en ce moment, j’ai essayé de continuer mes recommandations en matière de sécurité pour le développement d’applications web…


  1. Notre midi-LAN risque donc d’être déplacé à jeudi midi. 

Jour 6 • Rapports

Une nouvelle semaine commence au département sécurité de ma DSIT.

N’ayant pas encore reçu les codes sources des différentes applications web de la collectivité, j’ai pu mettre à la rédaction des deux rapports : l’un concernant les tests de montée en charge effectués du 4 juillet dernier, et l’autre sur l’utilisation de l’outil JMeter ayant permis de mener ces tests1.

La matinée et le début d’après-midi ont été nécessaires pour réaliser le rapport/manuel sur l’outil JMeter. Mon reponsable A. doit maintenant le lire pour valider ce que j’ai dit, et on devrait ensuite voir comment le partager sur le système de fichiers commun.

L’après-midi a donc été ensuite occupée par la réduction du premier rapport, celui sur le cas des tests. Le problème avec ce genre de rapport, c’est qu’il n’existe pas encore de documents types permettant de s’occuper essentiellement du contenu. Alors que pour l’instant, il faut non seulement s’occuper du contenu, mais aussi de la forme… Pour rendre ça le plus digeste et agréable


  1. Il s’agit donc plus d’un manuel d’utilisation que d’un rapport à proprement parlé 

Jour 5 • Finitions

Dernier jour de cette première semaine. La journée a été calme.

Il nous a été demandé la permission d’envoyer une table de la base de données à la société s’occupant du service technique d’une application. Le problème est qu’il s’agissait de la base de production, contenant des informations utilisateurs personnelles, et dans des commentaires, des mots de passe stockés en clair !
Notre réponse a été négative pour l’envoi de la table en l’état. Si la table envoyée était nettoyée de ces informations aucun souci.

Pendant la pause de midi, j’ai pu découvrir le midi-LAN. Nous avons joué à Blur, un jeu de voitures, dans l’esprit de Mario Kart. Il est possible d’obtenir des « bonus » permettant de ralentir ou faire ralentir ses adversaires. Nous avons fini avec une course-arène par équipe, où le but est de toucher le plus d’adversaire pour faire gagner des points à son équipe.

L’après-midi a été occupé pour continuer la rédaction du fameux document de référence pour les bonnes pratiques de sécurité pour les développeurs.

Ainsi s’est achevée la première semaine de stage