Reino: Input Validation and Representation
Problemas de validação e representação da entrada são causados por metacaracteres, codificações alternativas e representações numéricas. Confiar na entrada resulta em problemas de segurança. Os problemas incluem: “Buffer Overflows”, ataques de “Cross-Site Scripting”, “SQL Injection”, entre outros.
Unsafe JNI
Abstract
O uso indevido da JNI (Java Native Interface) pode tornar aplicativos Java vulneráveis a falhas de segurança em outras linguagens.
Explanation
Erros de JNI não segura ocorrem quando um aplicativo Java usa a JNI para chamar um código escrito em outra linguagem de programação.
Exemplo 1: O seguinte código Java define uma classe denominada
O código C a seguir define o método nativo implementado na classe
Como o exemplo é implementado em Java, pode parecer que ele é imune a problemas de memória, como vulnerabilidades de buffer overflow. Embora o Java faça um bom trabalho de garantir a segurança de operações de memória, essa proteção não se estende a vulnerabilidades que ocorrem no código-fonte escrito em outras linguagens que são acessadas usando a Java Native Interface. Apesar das proteções de memória oferecidas em Java, o código C nesse exemplo é vulnerável a um buffer overflow por utilizar
O Sun Java(TM) Tutorial fornece a seguinte descrição da JNI [1]:
A estrutura JNI permite que seu método nativo use objetos Java da mesma forma que o código Java usa esses objetos. Um método nativo pode criar objetos Java, incluindo arrays e strings, e depois inspecionar e usar esses objetos para realizar suas tarefas. Um método nativo também pode inspecionar e usar objetos criados pelo código do aplicativo Java. Um método nativo pode até mesmo atualizar objetos Java que ele criou ou que foram transmitidos para ele, e esses objetos atualizados estão disponíveis para o aplicativo Java. Portanto, tanto o lado da linguagem nativa quanto o lado do Java de um aplicativo podem criar, atualizar e acessar objetos Java e depois compartilhar esses objetos entre eles.
A vulnerabilidade no
Vulnerabilidades no código nativo acessado por meio de um aplicativo Java são geralmente exploradas da mesma maneira do que em aplicativos escritos na linguagem nativa. O único desafio a um ataque desse tipo é que o atacante deve identificar que o aplicativo Java usa um código nativo para realizar determinadas operações. Isso pode ser feito de uma variedade de maneiras, entre elas identificando comportamentos específicos que muitas vezes são implementados com código nativo ou explorando um vazamento de informações do sistema no aplicativo Java que expõe seu uso de JNI [2].
Exemplo 1: O seguinte código Java define uma classe denominada
Echo
. A classe declara um método nativo que usa C para ecoar comandos inseridos no console de volta para o usuário.
class Echo {
public native void runEcho();
static {
System.loadLibrary("echo");
}
public static void main(String[] args) {
new Echo().runEcho();
}
}
O código C a seguir define o método nativo implementado na classe
Echo
:
#include <jni.h>
#include "Echo.h" //a classe java doExample 1
compilada com javah
#include <stdio.h>
JNIEXPORT void JNICALL
Java_Echo_runEcho(JNIEnv *env, jobject obj)
{
char buf[64];
gets(buf);
printf(buf);
}
Como o exemplo é implementado em Java, pode parecer que ele é imune a problemas de memória, como vulnerabilidades de buffer overflow. Embora o Java faça um bom trabalho de garantir a segurança de operações de memória, essa proteção não se estende a vulnerabilidades que ocorrem no código-fonte escrito em outras linguagens que são acessadas usando a Java Native Interface. Apesar das proteções de memória oferecidas em Java, o código C nesse exemplo é vulnerável a um buffer overflow por utilizar
gets()
, que não realiza nenhuma verificação de limites em sua entrada.O Sun Java(TM) Tutorial fornece a seguinte descrição da JNI [1]:
A estrutura JNI permite que seu método nativo use objetos Java da mesma forma que o código Java usa esses objetos. Um método nativo pode criar objetos Java, incluindo arrays e strings, e depois inspecionar e usar esses objetos para realizar suas tarefas. Um método nativo também pode inspecionar e usar objetos criados pelo código do aplicativo Java. Um método nativo pode até mesmo atualizar objetos Java que ele criou ou que foram transmitidos para ele, e esses objetos atualizados estão disponíveis para o aplicativo Java. Portanto, tanto o lado da linguagem nativa quanto o lado do Java de um aplicativo podem criar, atualizar e acessar objetos Java e depois compartilhar esses objetos entre eles.
A vulnerabilidade no
Example 1
pode ser facilmente detectada por meio de uma auditoria de código-fonte da implementação do método nativo. Isso pode não ser prático ou possível, dependendo da disponibilidade do código-fonte C e de como o projeto está estruturado, mas, em muitos casos, pode ser suficiente. No entanto, a capacidade de compartilhar objetos entre métodos Java e nativos expande o possível risco de casos muito mais traiçoeiros nos quais a manipulação imprópria de dados pode fazer com que vulnerabilidades inesperadas ou operações não seguras no código nativo corrompam estruturas de dados em Java.Vulnerabilidades no código nativo acessado por meio de um aplicativo Java são geralmente exploradas da mesma maneira do que em aplicativos escritos na linguagem nativa. O único desafio a um ataque desse tipo é que o atacante deve identificar que o aplicativo Java usa um código nativo para realizar determinadas operações. Isso pode ser feito de uma variedade de maneiras, entre elas identificando comportamentos específicos que muitas vezes são implementados com código nativo ou explorando um vazamento de informações do sistema no aplicativo Java que expõe seu uso de JNI [2].
References
[1] B. Stearns The Java Tutorial: The Java Native Interface
[2] JNI00-J. Define wrappers around native methods CERT
[3] INPUT-3: Define wrappers around native methods Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 111
[5] Standards Mapping - Common Weakness Enumeration Top 25 2024 [12] CWE ID 020
[6] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[7] Standards Mapping - FIPS200 SI
[8] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[9] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[10] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[11] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[12] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[13] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[14] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.6
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[23] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[24] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[25] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[26] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002560 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002560 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002560 CAT I
[46] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[47] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[48] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
desc.semantic.java.unsafe_jni