Python
Outils
Bandit
Bandit est un scanner de vulnérabilité pour applications python.
Utilisation:
$ bandit exemple.py
ressource: https://github.com/PyCQA/bandit
Safety
Safety est un scanner de vulnérabilité de dépendances python.
ressource: https://github.com/pyupio/safety
Identifier les entrées utilisateur
Vérifier que les entrées utilisateurs sont bien filtrées et sanitize
Flask => flask.escape()
Django => django.utils.html.escape()
autres dépendances => bleach par exemple avec bleach.clean()
Vérifier si une fonction custom a été faite pour cela.
Vérifier que les requêtes SQL utilisent des named-parameters
Exemple:
Vérifier la présence de SSRF
Si une requête est envoyée vers une URL / un domaine / une IP fournie par l'utilisateur, vérifier que l'application valide le format de celle-ci (avec "validators" ou "urlparse" par exemple) et utilise une whiteliste de destinations de confiance.
Vérifier la présence de secrets codés en dur
Vérifier si l'application utilise un gestionnaire de secret ou des variables d'environnement pour stocker ses secrets et si ce n'est pas le cas, rechercher des secrets codés en dur.
Vérifier la présence de messages d'erreurs verbeux
Si l'application utilise un framework populaire, verifier que les messages d'erreurs verbeux sont désactivés ( Pour Django par exemple DEBUG = False
dans le fichier settings.py
).
Si l'application n'utilise pas de framework populaire, vérifier si une fonction permettant de gérer les exceptions existe et vérifier si ces exceptions ne font pas fuiter d'informations sensibles.
Vérifier la présence de journaux
Vérfier que l'application journalise bien les actions et événements importants et qu'elle ne journalise pas d'informations sensibles tels que des identifiants, des tokens, des clés de chiffrements / d'API ou encore des informations personnelles susceptibles de causer une infraction aux réglementations du RGPD. (la dépendance logging
est usuellement utilisée pour cela)
Vérifier que l'application utilise des formats de chaînes de caractères appropriées
Python3 possède quatre chaînes de caractères différentes, voici comment les choisir en fonction de l'usage que l'on souhaite en faire.
Old Style string format avec l'opérateur "%" (#1)
Ce format n'est plus utilisé et a été remplacé par le format #2 sur Python3.
New Style str.format (#2)
Ce format a été remplacé par le format #3 sur Python 3.6+
Literal string interpolation format (#3)
Très puissant et facile d'utilisation, il offre beaucoups de possibilités.
Template string format (#4)
Particulierement utile pour les entrées utilisateurs car ce format n'a pas accès au contenu des variables globales et est plus léger en terme de consomation de ressources que les autres formats.
Dependances et calls dangereux
Dernière mise à jour