Attack Surface: Cryptographic Misuse
- Description: Incorrect implementation of cryptographic functions, leading to weak encryption or data exposure.
androidutilcode
Contribution: ProvidesEncryptUtils
with various encryption and hashing functions (AES, DES, RSA, MD5, SHA). Easy-to-use APIs can lead to incorrect usage without understanding underlying cryptographic principles.- Example: A developer uses
EncryptUtils.encryptAES()
with a hardcoded key and a static IV, making the encryption easily breakable. - Impact: Compromise of sensitive data (passwords, personal information, API keys), potentially leading to identity theft, financial loss, or reputational damage.
- Risk Severity: Critical
- Mitigation Strategies:
- Developers:
- Never use MD5 or SHA-1 for security-sensitive operations.
- For password hashing, use strong, adaptive hashing algorithms like Argon2, bcrypt, or scrypt (use a dedicated library, not
EncryptUtils
). - For symmetric encryption (AES, DES), use the Android Keystore for key management. Never hardcode keys. Use secure modes of operation (GCM, CBC with proper padding) and random IVs.
- For asymmetric encryption (RSA), use OAEP padding and sufficiently large key sizes (2048+ bits).
- Thoroughly understand cryptographic best practices before using any encryption function. Consider using a higher-level library like Tink.
- Developers:
Attack Surface: Command Injection (Shell Execution)
- Description: Attackers inject malicious commands into shell commands executed by the application.
androidutilcode
Contribution: ProvidesShellUtils.execCmd()
for executing shell commands. If user input is directly incorporated into the command string without sanitization, it's vulnerable.- Example: An app uses
ShellUtils.execCmd("ping " + userInput)
to ping a host. An attacker provides input like"; rm -rf /sdcard/*"
, causing the app to delete files. - Impact: Arbitrary code execution, data deletion, device compromise, privilege escalation.
- Risk Severity: Critical
- Mitigation Strategies:
- Developers:
- Avoid using
ShellUtils
whenever possible. Explore alternative Android SDK APIs. - If
ShellUtils
must be used, never directly concatenate user input into the command string. - Use parameterized commands or rigorously sanitize all user input before passing it to
execCmd()
. Whitelist allowed characters rather than blacklisting dangerous ones.
- Avoid using
- Developers:
Attack Surface: Path Traversal (File I/O)
- Description: Attackers manipulate file paths to access files outside the intended directory.
androidutilcode
Contribution: ProvidesFileUtils
andFileIOUtils
for file operations. If these utilities don't properly sanitize file paths, they can be exploited.- Example: An app uses
FileUtils.writeFile(userInput, "data")
to write data to a file. An attacker provides a path like"../../../../data/data/com.example.app/databases/"
to overwrite the application's database. - Impact: Unauthorized access to sensitive files, data leakage, potential system compromise (on rooted devices), data corruption.
- Risk Severity: High
- Mitigation Strategies:
- Developers:
- Always validate and sanitize user-provided file paths before using them with any
androidutilcode
file function. - Use relative paths within the app's designated storage areas (internal or external with scoped storage). Avoid absolute paths.
- Enforce the principle of least privilege: the app should only have access to the files it absolutely needs.
- Use Android's built-in file storage mechanisms and APIs, which provide some built-in protection against path traversal.
- Always validate and sanitize user-provided file paths before using them with any
- Developers:
Attack Surface: Insecure Data Storage (SharedPreferences)
- Description: Sensitive data is stored insecurely in SharedPreferences, making it accessible to attackers.
androidutilcode
Contribution: ProvidesSPUtils
to simplify SharedPreferences access. This can encourage developers to store data in SharedPreferences that should be stored more securely.- Example: An app uses
SPUtils.put("auth_token", userToken)
to store a user's authentication token. On a rooted device, an attacker can retrieve this token and impersonate the user. - Impact: Exposure of sensitive data (API keys, tokens, potentially user data), leading to unauthorized access to services or data breaches.
- Risk Severity: High
- Mitigation Strategies:
- Developers:
- Never store sensitive data (passwords, API keys, tokens) directly in SharedPreferences, even with
SPUtils
. - Use the Android Keystore system for storing sensitive data securely.
- If using SharedPreferences for non-sensitive data, understand that it's accessible on rooted devices.
- Never store sensitive data (passwords, API keys, tokens) directly in SharedPreferences, even with
- Developers: