Sécurité des applications Swift : top 10 des vulnérabilités pour iOS/macOS

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : pourquoi la sécurité des applications Swift est cruciale

Swift est un langage de programmation puissant et moderne créé par Apple pour le développement d'applications sous iOS, macOS, watchOS et tvOS. Malgré les mécanismes de sécurité intégrés (ARC, gestion sécurisée de la mémoire, types optionnels), des milliers d'applications deviennent chaque année victimes d'attaques en raison d'erreurs de développeurs. Selon le rapport OWASP Mobile Top 10, la plupart des vulnérabilités dans les applications mobiles surviennent côté client. Dans cet article, nous analyserons les 10 vulnérabilités les plus courantes des applications Swift, fournirons des exemples de code et montrerons comment les éviter.



1. Stockage non sécurisé des données (Insecure Data Storage)

Problème

Les développeurs sauvegardent souvent des données confidentielles (jetons, mots de passe, clés API) dans UserDefaults, des fichiers Plist ou Core Data sans chiffrement. Sur les appareils jailbreakés, un attaquant peut facilement y accéder.

Exemple de code vulnérable

// Code vulnérableUserDefaults.standard.set("secret_token_123", forKey: "api_token")UserDefaults.standard.set("password123", forKey: "user_password")

Solution

Utilisez le Keychain pour stocker les données sensibles. Swift dispose de wrappers pratiques, comme KeychainSwift ou le framework Security.

// Stockage sécurisé avec Keychainimport KeychainSwift

let keychain = KeychainSwift()keychain.set("secret_token_123", forKey: "api_token")keychain.set("password123", forKey: "user_password", withAccess: .accessibleWhenUnlockedThisDeviceOnly)


2. Injection de code et injections SQL (Code Injection & SQL Injection)

Problème

Si votre application utilise SQLite, Core Data avec NSPredicate ou WebView pour afficher du contenu web, un attaquant peut injecter du code malveillant via une saisie utilisateur.

Exemple de code vulnérable

// Requête vulnérable à SQLitelet userInput = "1' OR '1'='1"let query = "SELECT * FROM users WHERE id = '\\(userInput)'"

Solution

Utilisez des requêtes paramétrées ou NSPredicate avec des substitutions sécurisées.

// Requête sécurisée avec paramètreslet query = "SELECT * FROM users WHERE id = ?"let statement = try db.prepare(query)try statement.bind(1, userInput)


3. Communication réseau non sécurisée (Insecure Network Communication)

Problème

Utilisation de HTTP au lieu de HTTPS, ignorance des certificats SSL (App Transport Security) ou envoi de données sans chiffrement.

Exemple de code vulnérable

// Code vulnérable : désactivation de ATSlet url = URL(string: "http://example.com/api/login")!let task = URLSession.shared.dataTask(with: url) { data, response, error in    // Traitement de données non sécurisées}

Solution

Configurez App Transport Security (ATS) dans Info.plist et utilisez HTTPS. Pour la vérification des certificats, appliquez le SSL pinning.

// Requête sécurisée avec SSL Pinning (exemple avec Alamofire)let evaluator = PinnedCertificatesTrustEvaluator(certificates: [certificate])let session = Session(serverTrustManager: ServerTrustManager(evaluators: ["example.com": evaluator]))session.request("https://example.com/api/login").responseJSON { response in    // Traitement de données sécurisées}


4. Injection via WebView (WebView Injection)

Problème

Le chargement de contenu HTML avec des données utilisateur dans WKWebView sans assainissement peut entraîner des attaques XSS et le vol de cookies.

Exemple de code vulnérable

// Code vulnérablelet userComment = "<script>alert('XSS')</script>"let html                

Blogs

Book Recommendations