Uso de código nativo
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Categoria do OWASP: MASVS-CODE - Qualidade do código (link em inglês)
Visão geral
Os aplicativos Android podem aproveitar o código nativo escrito em linguagens como
C e C++ para funcionalidades específicas. No entanto, quando um aplicativo usa
a Java Native Interface (JNI) para interagir com esse código nativo, ele
se expõe a vulnerabilidades, como estouro de buffer e outros
problemas que podem estar presentes na implementação do código nativo.
Impacto
Apesar de impactos muito positivos, como otimização de desempenho e ofuscação,
o uso de código nativo em apps Android pode ter impactos negativos
na segurança. Linguagens de código nativo, como C/C++, não têm os recursos de segurança de memória do
Java/Kotlin, o que as torna suscetíveis a vulnerabilidades como estouro de buffer,
uso após a liberação e outros problemas de corrupção de memória, levando a falhas
ou execução arbitrária de código. Além disso, se houver uma vulnerabilidade no
componente de código nativo, ela poderá comprometer todo o aplicativo,
mesmo que o restante seja gravado com segurança em Java.
Mitigações
Orientações sobre desenvolvimento e programação
- Diretrizes de codificação segura: para projetos C/C++, siga os padrões de codificação seguros estabelecidos (por exemplo, CERT, OWASP) para reduzir vulnerabilidades como estouro de
buffer, estouro de inteiros e ataques de formatação de string. Priorize bibliotecas
como o Abseil, conhecido pela qualidade e segurança. Sempre que possível, considere adotar
linguagens seguras para a memória, como Rust, que oferecem desempenho comparável ao C/C++.
- Validação de entrada: valide de forma rigorosa todos os dados de entrada recebidos de
fontes externas, incluindo entrada do usuário, dados de rede e arquivos, para evitar
ataques de injeção e outras vulnerabilidades.
Aumentar a proteção das opções de compilação
As bibliotecas nativas que utilizam o formato ELF podem ser fortalecidas contra uma variedade de vulnerabilidades ativando mecanismos de proteção como proteção de pilha (Canary), realocação somente leitura (RELRO), prevenção de execução de dados (NX) e executáveis independentes de posição (PIE, na sigla em inglês). Por conveniência, as opções de compilação do
Android NDK já ativam todas essas proteções por padrão.
Para verificar a implementação desses mecanismos de segurança em um binário, é possível usar ferramentas como hardening-check
ou pwntools
.
Bash
$ pwn checksec --file path/to/libnativecode.so
Arch: aarch64-64-little
RELRO: Full RELRO
Stack: Canary found
NX: NX enabled
PIE: PIE enabled
Verificar se as bibliotecas de terceiros não são vulneráveis
Ao escolher bibliotecas de terceiros, priorize o uso daquelas com uma reputação sólida na comunidade de desenvolvimento. Recursos como o Índice do
SDK do Google Play podem ajudar a identificar bibliotecas confiáveis e bem conceituadas. Mantenha
as bibliotecas atualizadas com as versões mais recentes e procure proativamente
qualquer vulnerabilidade conhecida relacionada a elas usando recursos como os bancos de dados
do Exploit-DB. Uma pesquisa na Web usando palavras-chave como
[library_name] vulnerability
ou [library_name] CVE
pode revelar informações
importantes de segurança.
Recursos
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-26 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-07-26 UTC."],[],[],null,["# Use of native code\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE)\n\nOverview\n--------\n\nAndroid applications can take advantage of native code written in languages like\nC and C++ for specific functionalities. However, when an application utilizes\nthe Java Native Interface (JNI) to interact with this native code, it\npotentially exposes itself to vulnerabilities like buffer overflows and other\nissues that may be present in the native code implementation.\n\nImpact\n------\n\nDespite very positive impacts such as performance optimization and obfuscation,\nutilizing native code in Android applications can have negative security\nimpacts. Native code languages like C/C++ lack the memory safety features of\nJava/Kotlin, making them susceptible to vulnerabilities like buffer overflows,\nuse-after-free errors, and other memory corruption issues -- leading to crashes\nor arbitrary code execution. Additionally, if a vulnerability exists in the\nnative code component, it can potentially compromise the entire application,\neven if the rest is written securely in Java.\n\nMitigations\n-----------\n\n### Development and coding guidance\n\n- **Secure Coding Guidelines**: For C/C++ projects, adhere to established secure coding standards (e.g., CERT, OWASP) to mitigate vulnerabilities like buffer overflows, integer overflows, and format string attacks. Prioritize libraries like Abseil known for quality and security. Whenever possible, consider adopting memory-safe languages like Rust, which offer performance comparable to C/C++.\n- **Input Validation**: Rigorously validate all input data received from external sources, including user input, network data, and files, to prevent injection attacks and other vulnerabilities.\n\n### Harden the compilation options\n\nNative libraries utilizing the ELF format can be hardened against a range of\nvulnerabilities by activating protective mechanisms like stack protection\n(Canary), relocation read-only (RELRO), data execution prevention (NX), and\nposition-independent executables (PIE). Conveniently, the Android NDK\ncompilation options already enable all these protections by default.\n\nTo verify the implementation of these security mechanisms within a binary, you\ncan employ tools like `hardening-check` or `pwntools`. \n\n### Bash\n\n $ pwn checksec --file path/to/libnativecode.so\n Arch: aarch64-64-little\n RELRO: Full RELRO\n Stack: Canary found\n NX: NX enabled\n PIE: PIE enabled\n\n### Verify third-party libraries are not vulnerable\n\nWhen choosing third-party libraries, prioritize using those with a solid\nreputation in the development community. Resources like the [Google Play SDK\nIndex](https://play.google.com/sdks) can help you identify well-regarded and trustworthy libraries. Ensure\nyou keep the libraries updated to the latest versions and proactively search for\nany known vulnerabilities related to them using resources like the databases\nfrom [Exploit-DB](https://www.exploit-db.com/). A web search using keywords like\n`[library_name] vulnerability` or `[library_name] CVE` can reveal critical\nsecurity information.\n\nResources\n---------\n\n- [CWE-111: Direct Use of Unsafe JNI](https://cwe.mitre.org/data/definitions/111.html)\n- [Exploit database](https://www.exploit-db.com/)\n- [Check binaries for security hardening features](https://www.systutorials.com/docs/linux/man/1-hardening-check/)\n- [Check binary security settings with pwntools](https://docs.pwntools.com/en/stable/commandline.html#pwn-checksec)\n- [Linux binary security hardening](https://medium.com/@n80fr1n60/linux-binary-security-hardening-1434e89a2525)\n- [Hardening ELF binaries using Relocation Read-Only (RELRO)](https://www.redhat.com/fr/blog/hardening-elf-binaries-using-relocation-read-only-relro)\n- [OWASP binary protection mechanisms](https://mas.owasp.org/MASTG/Android/0x05i-Testing-Code-Quality-and-Build-Settings/#binary-protection-mechanisms)\n- [SEI CERT Coding Standards](https://wiki.sei.cmu.edu/confluence/display/seccode/SEI+CERT+Coding+Standards)\n- [OWASP Developer Guide](https://owasp.org/www-project-developer-guide/release/)\n- [Google Play SDK Index](https://play.google.com/sdks)\n- [Android NDK](/ndk)\n- [Android Rust introduction](https://source.android.com/docs/setup/build/rust/building-rust-modules/overview)\n- [Abseil (C++ Common Libraries)](https://github.com/abseil/abseil-cpp)\n- [PIE is enforced by the linker](https://cs.android.com/android/platform/superproject/main/+/main:bionic/linker/linker_main.cpp;l=425?q=linker_main&ss=android%2Fplatform%2Fsuperproject%2Fmain)"]]