Aller au contenu

Règles Semgrep Swift


rules_lgpl_swift_autre_regle-ios-acl-biometrique

Résumé :

Contournement de l'authentification par faiblesse primaire

Sévérité : Critique

CWE : CWE-305

Description :

L'application utilise des drapeaux ACL biométriques faibles comme .biometryAny, .userPresence ou .touchIDAny lors de l'appel à SecAccessControlCreateWithFlags() pour protéger les éléments du trousseau. Ces drapeaux permettent à n'importe quelle biométrie enregistrée sur l'appareil de s'authentifier, ce qui signifie qu'un attaquant ayant accès physique à l'appareil peut ajouter sa propre empreinte digitale ou son visage et s'authentifier en tant qu'utilisateur légitime, contournant ainsi les contrôles de sécurité prévus.

Remédiation :

Envisagez d'utiliser SecAccessControlCreateWithFlags() avec le drapeau .biometryCurrentSet au lieu de .biometryAny pour garantir que seules les biométries actuellement enregistrées peuvent s'authentifier. Cela empêche un attaquant qui obtient un accès physique à l'appareil d'ajouter ses propres biométries pour s'authentifier en tant qu'utilisateur légitime. De même, privilégiez .touchIDCurrentSet plutôt que .touchIDAny lors du travail spécifiquement avec Touch ID. En créant des objets de contrôle d'accès, combinez ces drapeaux avec des attributs d'accessibilité du trousseau appropriés comme kSecAttrAccessibleWhenUnlockedThisDeviceOnly pour une protection en profondeur. Il est également recommandé de mettre en œuvre des facteurs d'authentification supplémentaires pour des opérations à haute sécurité au-delà des seules biométries.

OWASP :

  • A2:2017-Authentification rompue
  • A07:2021-Échecs d'identification et d'authentification

rules_lgpl_swift_other_rule-ios-file-no-special

Résumé :

Stockage en clair d'informations sensibles

Gravité : Critique

CWE : CWE-312

Description :

L'application utilise .noFileProtection ou FileProtectionType.none lors de l'écriture de fichiers, ce qui désactive le chiffrement de protection des données iOS pour ces fichiers. Les fichiers créés avec ces options sont stockés sans chiffrement sur le disque et restent accessibles même lorsque l'appareil est verrouillé, les rendant vulnérables à un accès non autorisé si l'appareil est physiquement compromis, lors d'une extraction judiciaire, ou à travers des vulnérabilités du système de fichiers. Cela viole les meilleures pratiques de sécurité iOS pour la protection des données sensibles des utilisateurs au repos.

Remédiation :

Envisagez d'utiliser FileProtectionType.complete lors de l'écriture de fichiers via Data.write(to:options:) pour garantir que les fichiers soient chiffrés et uniquement accessibles lorsque l'appareil est déverrouillé. Pour les fichiers qui doivent être accessibles pendant des tâches en arrière-plan alors que l'appareil est verrouillé, utilisez FileProtectionType.completeUnlessOpen, qui protège les fichiers sauf lorsqu'ils sont déjà ouverts. Pour les fichiers qui doivent être accessibles après le premier déverrouillage mais qui n'ont pas besoin de la protection maximale, utilisez FileProtectionType.completeUntilFirstUserAuthentication. Il est recommandé d'utiliser FileProtectionType.complete comme valeur par défaut pour les données sensibles telles que les informations d'identification utilisateur, les informations personnelles ou les données financières. Notez que les API Core Data et trousseau possèdent des mécanismes de protection séparés et doivent être utilisés pour des données hautement sensibles plutôt que pour un stockage basé sur des fichiers.

OWASP :

  • A3:2017-Exposition de données sensibles
  • A02:2021-Failles cryptographiques

rules_lgpl_swift_other_rule-ios-tls3-not-used

Résumé :

Sélection d'un algorithme moins sécurisé lors de la négociation ('downgrade d'algorithme')

Sévérité : Critique

CWE : CWE-757

Description :

L'application définit TLSMinimumSupportedProtocolVersion à .TLSv1_0, .TLSv1_1 ou .TLSv1_2, qui sont des versions de protocole TLS obsolètes. TLS 1.0 et 1.1 ont été officiellement dépréciés par l'IETF en mars 2021 en raison de vulnérabilités connues, y compris la susceptibilité aux attaques BEAST, POODLE, et d'autres attaques de downgrade. Bien que TLS 1.2 soit encore largement pris en charge, il lui manque les améliorations de sécurité modernes de TLS 1.3, y compris la confidentialité parfaite par défaut, un handshake simplifié réduisant la surface d'attaque, et la suppression des algorithmes cryptographiques obsolètes. L'utilisation de versions TLS plus anciennes expose l'application à des attaques de type homme du milieu et à des vulnérabilités au niveau du protocole.

Remédiation :

Envisagez de passer à TLS 1.3 en définissant TLSMinimumSupportedProtocolVersion à .TLSv13 dans URLSessionConfiguration ou lors de la configuration de NWParameters pour les connexions réseau. TLS 1.3 offre des améliorations de sécurité significatives, y compris la confidentialité parfaite obligatoire, des métadonnées de handshake chiffrées et la suppression des suites cryptographiques vulnérables. Lorsque vous utilisez URLSession, configurez la session avec une configuration .default ou .ephemeral et définissez explicitement la version minimale du protocole. Il est recommandé de tester soigneusement, car certains serveurs légendaires peuvent ne pas prendre en charge TLS 1.3, auquel cas TLS 1.2 peut être utilisé comme solution de secours avec des suites cryptographiques robustes imposées. Envisagez de mettre en œuvre le pinning de certificats en parallèle avec TLS 1.3 pour une protection supplémentaire contre les compromissions de l'autorité de certification.

OWASP :

  • A6:2017-Mauvaise configuration de la sécurité
  • A05:2021-Mauvaise configuration de la sécurité

rules_lgpl_swift_other_rule-ios-dtls1-used

Résumé :

Sélection d'un algorithme moins sécurisé lors de la négociation (« rétrogradation d'algorithme »)

Sévérité : Moyenne

CWE : CWE-757

Description :

L'application configure TLSMinimumSupportedProtocolVersion pour utiliser DTLSv10 (DTLS 1.0), qui est une version de protocole obsolète et peu sécurisée. DTLS 1.0 hérite des vulnérabilités de TLS 1.0, y compris la susceptibilité aux attaques BEAST, aux suites de chiffrement faibles, et l'absence de protections cryptographiques modernes. DTLS est utilisé pour sécuriser les protocoles basés sur des datagrammes comme UDP, et l'utilisation de la version 1.0 expose l'application à des faiblesses de sécurité connues qui peuvent compromettre la confidentialité et l'intégrité des données transmises.

Remédiation :

Envisagez de passer à DTLS 1.2 en configurant TLSMinimumSupportedProtocolVersion sur .DTLSv12 lors de la configuration des connexions réseau utilisant le framework Network ou des API similaires. DTLS 1.2 fournit des suites de chiffrement plus solides, une sécurité de poignée de main améliorée, et des protections contre des attaques connues sur les versions antérieures. Lors de l'utilisation de NWParameters pour des connexions UDP, configurez les options de sécurité pour exiger explicitement DTLS 1.2 ou supérieur. Il est recommandé de revoir et d'imposer une sélection de suites de chiffrement solides pour prévenir les attaques de rétrogradation. Notez que le support de DTLS 1.3 peut être disponible dans les versions iOS plus récentes et doit être préféré lorsque la compatibilité avec les anciens systèmes n'est pas requise.

OWASP :

  • A6:2017-Mauvaise configuration de la sécurité
  • A05:2021-Mauvaise configuration de la sécurité

rules_lgpl_swift_other_rule-ios-keychain-weak-accessibility-value

Résumé :

Contournement d'authentification par une faiblesse primaire

Gravité : Moyenne

CWE : CWE-305

Description :

L'application utilise des attributs d'accessibilité de trousseau faibles kSecAttrAccessibleAlways ou kSecAttrAccessibleAfterFirstUnlock lors de l'enregistrement d'éléments via SecItemAdd() ou des API de trousseau connexes. kSecAttrAccessibleAlways permet d'accéder aux éléments de la trousseau même lorsque l'appareil est verrouillé, n'offrant aucune protection contre le compromis physique de l'appareil. kSecAttrAccessibleAfterFirstUnlock rend les éléments accessibles après le premier déverrouillage suivant un redémarrage, ce qui signifie qu'ils restent accessibles pendant toute la durée de fonctionnement de l'appareil, quel que soit l'état de verrouillage. Les deux options ne parviennent pas à tirer parti de la protection des données iOS pour sécuriser des données sensibles lorsque l'appareil est verrouillé.

Remédiation :

Envisagez d'utiliser kSecAttrAccessibleWhenUnlocked comme valeur pour kSecAttrAccessible dans les requêtes de trousseau afin de garantir que les éléments ne soient accessibles que lorsque l'appareil est déverrouillé. Pour les éléments qui ne doivent pas se synchroniser entre les appareils, utilisez kSecAttrAccessibleWhenUnlockedThisDeviceOnly, qui offre à la fois un chiffrement lorsqu'il est verrouillé et empêche la synchronisation avec le trousseau iCloud. Pour des données extrêmement sensibles comme les jetons d'authentification ou les clés de chiffrement, envisagez de combiner le stockage dans le trousseau avec une authentification biométrique ou par code d'accès supplémentaire utilisant SecAccessControl avec les drapeaux .userPresence ou .biometryCurrentSet. Il est recommandé d'auditer tous les éléments du trousseau et de migrer l'utilisation héritée de kSecAttrAccessibleAlways vers des classes de protection plus fortes appropriées au niveau de sensibilité de chaque type de donnée.

OWASP :

  • A2:2017-Authentification Brisée
  • A07:2021-Échecs d'Identification et d'Authentification