What is OWASP security standards ? list down and explain the top 10 stds ?

#security#owasp#mobile-security#encryption#authentication#best-practices

Answer

What is OWASP?

OWASP (Open Web Application Security Project) is a nonprofit organization dedicated to improving software security. It provides free, open-source resources including:

  • Security standards and best practices
  • Testing tools and frameworks
  • Documentation and guides
  • Community-driven research

For mobile apps, OWASP maintains the OWASP Mobile Top 10, which lists the most critical security risks for mobile applications. The latest version (2024) represents the first major update since 2016.

OWASP Mobile Top 10 (2024)

Overview Table

RankRiskSeverityImpact
M1Improper Credential UsageHighUnauthorized access, account takeover
M2Inadequate Supply Chain SecurityHighMalicious code injection, data theft
M3Insecure Authentication/AuthorizationCriticalComplete app/data compromise
M4Insufficient Input/Output ValidationHighInjection attacks, data corruption
M5Insecure CommunicationHighMan-in-the-middle attacks, eavesdropping
M6Inadequate Privacy ControlsMediumPrivacy violations, GDPR/CCPA penalties
M7Insufficient Binary ProtectionsMediumReverse engineering, IP theft
M8Security MisconfigurationMediumExposure of sensitive data/functionality
M9Insecure Data StorageCriticalData leakage from device
M10Insufficient CryptographyHighData decryption, authentication bypass

Detailed Explanation

M1: Improper Credential Usage

What: Poor management of credentials such as API keys, passwords, tokens, or certificates hardcoded in source code, stored insecurely, or transmitted without protection.

Flutter Example - Vulnerable:

dart
// ❌ BAD: Hardcoded API key
class ApiClient {
  static const String API_KEY = 'sk_live_12345abcde'; // Exposed in source!
  static const String BASE_URL = 'https://api.example.com
}

Flutter Example - Secure:

dart
// ✅ GOOD: Use environment variables and secure storage
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';

class SecureApiClient {
  final _storage = FlutterSecureStorage();
  
  Future<String?> getApiKey() async {
    // Read from secure storage
    return await _storage.read(key: 'api_key');
  }
  
  Future<void> storeToken(String token) async {
    // Store securely, encrypted at rest
    await _storage.write(key: 'auth_token', value: token);
  }
}

M2: Inadequate Supply Chain Security

What: Security vulnerabilities introduced through third-party libraries, SDKs, or dependencies that haven't been properly vetted.

Mitigation in Flutter:

yaml
# pubspec.yaml - Pin versions to avoid unexpected updates
dependencies:
  # ✅ GOOD: Specify exact versions
  dio: 5.4.0
  shared_preferences: 2.2.2
  
  # ❌ BAD: Using caret allows breaking changes
  # some_package: ^1.0.0
bash
# Audit dependencies regularly
flutter pub outdated
flutter pub upgrade --dry-run

# Check for known vulnerabilities
dart pub deps

M3: Insecure Authentication/Authorization

What: Weak or missing authentication mechanisms allowing unauthorized access to app functionality or backend services.

Flutter Example - Vulnerable:

dart
// ❌ BAD: Client-side only authentication
class LoginScreen extends StatelessWidget {
  void login(String username, String password) {
    if (username == 'admin' && password == '1234') {
      // Navigate to home - easily bypassed!
      Navigator.push(context, MaterialApp(home: HomeScreen()));
    }
  }
}

Flutter Example - Secure:

dart
// ✅ GOOD: Server-side authentication with JWT
import 'package:dio/dio.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';

class AuthService {
  final Dio _dio = Dio();
  final _storage = FlutterSecureStorage();
  
  Future<bool> login(String username, String password) async {
    try {
      final response = await _dio.post(
        'https://api.example.com/auth/login
        data: {'username': username, 'password': password},
      );
      
      // Store JWT securely
      final token = response.data['token'];
      await _storage.write(key: 'jwt_token', value: token);
      
      // Add to all future requests
      _dio.options.headers['Authorization'] = 'Bearer $token';
      
      return true;
    } catch (e) {
      return false;
    }
  }
  
  Future<void> logout() async {
    await _storage.delete(key: 'jwt_token');
    _dio.options.headers.remove('Authorization');
  }
}

M4: Insufficient Input/Output Validation

What: Failure to properly validate and sanitize user input, leading to injection attacks (SQL, NoSQL, command injection).

Flutter Example - Vulnerable:

dart
// ❌ BAD: SQL injection vulnerability
Future<List<User>> searchUsers(String query) async {
  final db = await database;
  // Directly concatenating user input!
  return db.rawQuery("SELECT * FROM users WHERE name = '$query'");
}

Flutter Example - Secure:

dart
// ✅ GOOD: Parameterized queries
Future<List<User>> searchUsers(String query) async {
  final db = await database;
  // Use parameterized queries to prevent injection
  return db.query(
    'users',
    where: 'name = ?',
    whereArgs: [query], // Safely escaped
  );
}

// ✅ GOOD: Input validation
String sanitizeInput(String input) {
  // Remove special characters, limit length
  return input
      .replaceAll(RegExp(r'[<>"\';]'), '')
      .substring(0, min(input.length, 100));
}

M5: Insecure Communication

What: Data transmitted without encryption, exposing it to interception and tampering.

Flutter Example - Vulnerable:

dart
// ❌ BAD: HTTP instead of HTTPS
final response = await http.get(
  Uri.parse('http://api.example.com/users'), // Unencrypted!
);

Flutter Example - Secure:

dart
// ✅ GOOD: HTTPS with certificate pinning
import 'package:dio/dio.dart';
import 'package:dio/adapter.dart';

class SecureHttpClient {
  late Dio _dio;
  
  SecureHttpClient() {
    _dio = Dio();
    
    // Certificate pinning
    (_dio.httpClientAdapter as DefaultHttpClientAdapter)
        .onHttpClientCreate = (client) {
      client.badCertificateCallback = (cert, host, port) {
        // Verify certificate fingerprint
        return cert.pem == EXPECTED_CERTIFICATE_PEM;
      };
      return client;
    };
  }
  
  Future<Response> get(String url) async {
    // Always use HTTPS
    if (!url.startsWith('https://')) {
      throw Exception('Only HTTPS connections allowed');
    }
    return await _dio.get(url);
  }
}

M6: Inadequate Privacy Controls

What: Collecting, storing, or sharing user data without proper consent or violating privacy regulations (GDPR, CCPA).

Flutter Example - Secure:

dart
class PrivacyManager {
  final _storage = FlutterSecureStorage();
  
  // Request explicit consent
  Future<bool> requestAnalyticsConsent() async {
    final consent = await showDialog<bool>(
      context: context,
      builder: (context) => AlertDialog(
        title: Text('Privacy Notice'),
        content: Text('We collect usage data to improve the app. Allow?'),
        actions: [
          TextButton(
            onPressed: () => Navigator.pop(context, false),
            child: Text('Decline'),
          ),
          TextButton(
            onPressed: () => Navigator.pop(context, true),
            child: Text('Accept'),
          ),
        ],
      ),
    );
    
    await _storage.write(key: 'analytics_consent', value: '$consent');
    return consent ?? false;
  }
  
  // Data minimization
  Map<String, dynamic> getMinimalUserData() {
    return {
      'user_id': 'hashed_value', // Never send PII
      'app_version': '1.0.0',
      'timestamp': DateTime.now().toIso8601String(),
    };
  }
}

M7: Insufficient Binary Protections

What: Lack of code obfuscation allowing easy reverse engineering and exposure of business logic.

Flutter Mitigation:

bash
# Build with obfuscation
flutter build apk --obfuscate --split-debug-info=build/debug-info
flutter build ios --obfuscate --split-debug-info=build/debug-info
dart
// ProGuard rules (android/app/proguard-rules.pro)
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }

M8: Security Misconfiguration

What: Default credentials, unnecessary features enabled, verbose error messages exposing system details.

Flutter Example - Secure:

dart
// ✅ GOOD: Disable debug mode in production
class AppConfig {
  static const bool isDebugMode = bool.fromEnvironment('DEBUG', defaultValue: false);
  
  static void init() {
    if (!isDebugMode) {
      // Disable debug features
      debugPrint = (String? message, {int? wrapWidth}) {}; // Suppress logs
    }
  }
}

// AndroidManifest.xml - Disable backup
<application
  android:allowBackup="false"
  android:debuggable="false">

M9: Insecure Data Storage

What: Storing sensitive data in plain text in shared preferences, files, or databases accessible to other apps.

Flutter Example - Vulnerable:

dart
// ❌ BAD: Plain text storage
final prefs = await SharedPreferences.getInstance();
await prefs.setString('password', userPassword); // Unencrypted!

Flutter Example - Secure:

dart
// ✅ GOOD: Encrypted storage
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:encrypt/encrypt.dart';

class SecureStorage {
  final _secureStorage = FlutterSecureStorage();
  
  // Encrypted key-value storage
  Future<void> storeCredentials(String username, String password) async {
    await _secureStorage.write(key: 'username', value: username);
    await _secureStorage.write(key: 'password', value: password);
  }
  
  // Encrypted Hive database
  Future<void> initEncryptedHive() async {
    await Hive.initFlutter();
    
    // Generate encryption key
    final encryptionKey = Hive.generateSecureKey();
    await _secureStorage.write(
      key: 'hive_key',
      value: base64Encode(encryptionKey),
    );
    
    // Open encrypted box
    final box = await Hive.openBox(
      'secureBox',
      encryptionCipher: HiveAesCipher(encryptionKey),
    );
  }
}

M10: Insufficient Cryptography

What: Using weak encryption algorithms, hard-coded keys, or improper implementation of cryptography.

Flutter Example - Vulnerable:

dart
// ❌ BAD: Weak encryption
String encrypt(String data) {
  return base64Encode(utf8.encode(data)); // Not encryption, just encoding!
}

Flutter Example - Secure:

dart
// ✅ GOOD: Strong encryption with AES-256
import 'package:encrypt/encrypt.dart';
import 'package:crypto/crypto.dart';

class CryptoService {
  late final Key _key;
  late final IV _iv;
  late final Encrypter _encrypter;
  
  CryptoService() {
    // Generate secure key (256-bit)
    final secureRandom = Random.secure();
    _key = Key.fromSecureRandom(32); // 256 bits
    _iv = IV.fromSecureRandom(16);   // 128 bits
    
    // Use AES-256 in CBC mode
    _encrypter = Encrypter(AES(_key, mode: AESMode.cbc));
  }
  
  String encrypt(String plainText) {
    final encrypted = _encrypter.encrypt(plainText, iv: _iv);
    return encrypted.base64;
  }
  
  String decrypt(String cipherText) {
    final encrypted = Encrypted.fromBase64(cipherText);
    return _encrypter.decrypt(encrypted, iv: _iv);
  }
  
  // Hash passwords with salt
  String hashPassword(String password, String salt) {
    final bytes = utf8.encode(password + salt);
    return sha256.convert(bytes).toString();
  }
}

Security Checklist for Flutter Apps

Authentication:

  • Server-side authentication
  • JWT tokens with expiration
  • Biometric authentication for sensitive operations
  • Multi-factor authentication (MFA)

Data Protection:

  • Use
    text
    flutter_secure_storage
    for credentials
  • Encrypt databases with Hive encryption
  • Never store passwords in plain text
  • Implement certificate pinning

Code Security:

  • Build with
    text
    --obfuscate
    flag
  • Disable debug mode in production
  • Remove all
    text
    print()
    statements
  • ProGuard rules configured

Communication:

  • HTTPS only (no HTTP)
  • Certificate pinning implemented
  • API keys not hardcoded
  • Request/response validation

Dependencies:

  • Pin package versions
  • Regular security audits
  • Remove unused dependencies
  • Review package permissions

Testing for OWASP Vulnerabilities

bash
# Static analysis
flutter analyze
dart analyze

# Dependency audit
flutter pub outdated

# Build with security flags
flutter build apk --obfuscate --split-debug-info=build/app-debug-info

Learning Resources

Security First: Security is not a feature you add later—it must be built into your app from day one. Follow OWASP Mobile Top 10 guidelines, conduct regular security audits, keep dependencies updated, and never store sensitive data unencrypted. Remember: 80% of security breaches exploit known vulnerabilities that could have been prevented with proper security practices.