Mise en œuvre de l'option Verify Peer de la bibliothèque PHP cURL dans les applications qui requiert la vérification du certificat SSL

Numéro : IN11-003
Date : 20 decembre 2011

Objet

La présente note d'information vise à attirer l'attention sur une mise en œuvre courante, mais non sécurisée de l'option cURL PHP utilisée pour vérifier des certificats SSL.

Évaluation

Le langage PHP (préprocesseur hypertexte) est un langage de script côté-serveur adaptable. Il permet au développeur de générer des pages HTML de manière dynamique. Le langage PHP implante plusieurs bibliothèques de codes standards, notamment cURL (Client URL Request Library ou libcurl). Cette dernière comprend un ensemble de fonctions pour établir des connexions avec différents protocoles, dont HTTPS. Elle est également responsable de la mise en place de caractéristiques de sécurité, comme la validation des certificats SSL au moment d'établir des connexions HTTPS. Elle est couramment utilisée par les développeurs d'applications Web (p. ex., les applications de commerce et de paiements électroniques) pour établir une connexion sécurisée entre des systèmes hébergés sur différents segments du réseau, notamment la connexion à un service tiers de traitement des cartes de paiement.

Dans la bibliothèque, la fonction curl_setopt permet de régler plusieurs options d'exécution, comme la configuration de la vérification des certificats SSL selon les autorités de certification (AC) pertinentes. L'option CURLOPT_SSL_VERIFYPEER détermine si la bibliothèque va tenter de valider l'approbation des certificats SSL au moment de l'établissement de connexions sécurisées. Lorsque la bibliothèque cURL essaie de vérifier le certificat d'un serveur à distance auprès des AC approuvées conformément à l'option de configuration CURLOPT_CAINFO ou CURLOPT_CAPATH. L'option CURLOPT_SSL_VERIFYPEER est activée par défaut et, sur certaines plateformes, une liste des AC est prédéfinie. Or, ce cadre de validation est souvent désactivé par le développeur qui règle le paramètre de l'option CURLOPT_SSL_VERIFYPEER à « 0 » ou « Faux ». Si la vérification par les pairs est désactivée, les certificats SSL ne sont pas vérifiés pour approbation par la bibliothèque cURL. La non-validation des certificats SSL par l'application ouvre la porte à différents scénarios d'attaque de l'intercepteur (man-in-the-middle attack), ce qui peut mener à l'interception et à la modification des données en transit.

Les fonctions cURL sont fréquemment utilisées dans le cadre de communications serveur à serveur et, par conséquent, l'opérateur d'application (p. ex., un marchand qui exploite un commerce électronique) peut ignorer que ses applications font peut-être des transactions sur des canaux de communications non sécurisés.

Les progiciels étant habituellement fournis en code source, le développeur et l'opérateur du site devraient s'assurer que les fonctionnalités de sécurité sont activées conformément à la sensibilité et aux attentes en matière de protection des données transmises.

Mésures recommandées

Le CCRIC recommande aux opérateurs d'applications Web qui mettent en œuvre les connexions TLS/SSL pour la transmission de données sensibles au moyen de la bibliothèque PHP cURL de vérifier que la valeur booléenne de l'option CURLOPT_SSL_VERIFYPEER soit réglée à Vrai ou à la valeur correspondant au nombre entier 1 et de régler les paramètres de manière à ce que l'échec d'obtention d'une vérification réussie entraîne une erreur d'échec de connexion plutôt que l'établissement d'une connexion non approuvée et non sécurisée. Il suffit de faire une recherche dans le répertoire de codes sources des applications (voir les exemples d'entrées ci-dessous) pour obtenir des indications sur les paramètres utilisés dans la mise en œuvre cURL :

Exemples :

Le CCRIC recommande que les organismes qui traitent des transactions examinent leurs API en langage PHP distribuées et qu'ils s'assurent que les API font respecter la mise en œuvre adéquate de la vérification des certificats par les marchands et les partenaires affiliés.

Dans la mesure du possible, les développeurs de NIP d'applications sécurisés doivent certifier la validation selon le certificat d'AC qui sera utilisé. Cela peut être accompli en utilisant l'option CURLOPT_CAINFO et en distribuant le certificat public associé de l'AC et le code de programme dans le même progiciel. Veuillez consulter les documents de références ci-dessous pour obtenir des renseignements détaillés sur la mise en œuvre.

Le CCRIC recommande que les opérateurs d'applications Web vérifient régulièrement la disponibilité des mises à jour et des correctifs des progiciels et qu'ils les mettent à l'essai et les déploient adéquatement en temps opportun.

Sources

Le CCRIC désire remercier Kevin McArthur de StormTide Digital Studios Inc. et Tamir Israel de la Clinique d'intérêt public et de politique d'Internet du Canada (CIPPIC) pour leurs recherches et leur contribution à ce produit.

Références

Note aux lecteurs

En appui à la mission de Sécurité publique Canada de bâtir un Canada sécuritaire et résilient, le mandat du CCRIC est d'aider à assurer la sécurité et la résilience des cybersystèmes essentiels non gouvernementaux à la base de la sécurité nationale, de la sécurité publique et de la prospérité économique du pays. À titre d'équipe d'intervention en cas d'incident lié à la sécurité informatique du Canada, le CCRIC agit comme centre national de coordination pour la prévention, l'atténuation, l'intervention et le rétablissement liés aux incidents cybernétiques commis contre des systèmes non fédéraux. Pour ce faire, il formule des conseils éclairés, offre du soutien et coordonne l'échange de renseignements ainsi que l'intervention.

S'il vous plaît noter que la clé PGP du CCRIC a récemment été mise à jour.
http://www.securitepublique.gc.ca/cnt/ntnl-scrt/cbr-scrt/_fl/CCIRCPublicPGPKey.txt

Pour obtenir des renseignements de nature générale, veuillez communiquer avec la division des Affaires publiques de l'organisme :

Téléphone : 613-944-4875 ou 1-800-830-3118  
Télécopieur : 613-998-9589 
Courriel : ps.communications-communications.sp@canada.ca

Date de modification :