Segurança de aplicações Swift: top 10 vulnerabilidades para iOS/macOS

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que a segurança de aplicativos Swift é crítica

Swift é uma linguagem de programação poderosa e moderna criada pela Apple para desenvolvimento de aplicativos para iOS, macOS, watchOS e tvOS. Apesar dos mecanismos de segurança integrados (ARC, gerenciamento seguro de memória, tipos opcionais), milhares de aplicativos se tornam vítimas de ataques todos os anos devido a erros de desenvolvedores. De acordo com o relatório OWASP Mobile Top 10, a maioria das vulnerabilidades em aplicativos móveis ocorre no lado do cliente. Neste artigo, analisaremos as 10 vulnerabilidades mais comuns em aplicativos Swift, forneceremos exemplos de código e mostraremos como evitá-las.



1. Armazenamento inseguro de dados (Insecure Data Storage)

Problema

Desenvolvedores frequentemente salvam dados confidenciais (tokens, senhas, chaves de API) em UserDefaults, arquivos Plist ou Core Data sem criptografia. Em dispositivos com jailbreak, um invasor pode facilmente acessá-los.

Exemplo de código vulnerável

// Código vulnerávelUserDefaults.standard.set("secret_token_123", forKey: "api_token")UserDefaults.standard.set("password123", forKey: "user_password")

Solução

Use o Keychain para armazenar dados confidenciais. Swift possui wrappers convenientes, como KeychainSwift ou o framework Security.

// Armazenamento seguro com Keychainimport KeychainSwift

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


2. Injeção de código e SQL Injection (Code Injection & SQL Injection)

Problema

Se seu aplicativo usa SQLite, Core Data com NSPredicate ou WebView para exibir conteúdo web, um invasor pode injetar código malicioso através da entrada do usuário.

Exemplo de código vulnerável

// Consulta vulnerável ao SQLitelet userInput = "1' OR '1'='1"let query = "SELECT * FROM users WHERE id = '\\(userInput)'"

Solução

Use consultas parametrizadas ou NSPredicate com substituições seguras.

// Consulta segura com parâmetroslet query = "SELECT * FROM users WHERE id = ?"let statement = try db.prepare(query)try statement.bind(1, userInput)


3. Comunicação de rede insegura (Insecure Network Communication)

Problema

Uso de HTTP em vez de HTTPS, ignorar certificados SSL (App Transport Security) ou enviar dados sem criptografia.

Exemplo de código vulnerável

// Código vulnerável: desabilitando ATSlet url = URL(string: "http://example.com/api/login")!let task = URLSession.shared.dataTask(with: url) { data, response, error in    // Processamento de dados não seguros}

Solução

Configure o App Transport Security (ATS) no Info.plist e use HTTPS. Para verificação de certificados, aplique SSL pinning.

// Requisição segura com SSL Pinning (exemplo com 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    // Processamento de dados seguros}


4. Injeção via WebView (WebView Injection)

Problema

Carregar conteúdo HTML com dados do usuário em WKWebView sem sanitização pode levar a ataques XSS e roubo de cookies.

Exemplo de código vulnerável

// Código vulnerávellet userComment = "<script>alert('XSS')</script>"let html                

Blogs

Book Recommendations