Reino: Input Validation and Representation

Los problemas de validación y representación de entradas están causados por metacaracteres, codificaciones alternativas y representaciones numéricas. Los problemas de seguridad surgen de entradas en las que se confía. Estos problemas incluyen: «desbordamientos de búfer», ataques de «scripts de sitios», "SQL injection" y muchas otras acciones.

Unsafe JNI

Abstract
El uso inadecuado de la interfaz nativa de Java (JNI, por sus siglas en inglés) puede provocar que las aplicaciones de Java sean vulnerables a los errores de seguridad de otros lenguajes.
Explanation
Los errores de JNI poco segura se producen cuando una aplicación de Java usa JNI para llamar a código escrito en otro lenguaje de programación.
Ejemplo 1: El siguiente código de Java define una clase denominada Echo. La clase declara un método nativo que utiliza C para devolver comandos introducidos en la consola al usuario.


class Echo {
public native void runEcho();

static {
System.loadLibrary("echo");
}

public static void main(String[] args) {
new Echo().runEcho();
}
}


El siguiente código C define el método nativo implementado en la clase Echo:


#include <jni.h>
#include "Echo.h" //the java class from Example 1 compiled with javah
#include <stdio.h>

JNIEXPORT void JNICALL
Java_Echo_runEcho(JNIEnv *env, jobject obj)
{
char buf[64];
gets(buf);
printf(buf);
}


Como el ejemplo se ha implementado en Java, es posible que parezca que es inmune a los problemas de memoria como, por ejemplo, las vulnerabilidades de buffer overflow. Aunque Java es eficaz a la hora de proteger las operaciones de memoria, esta protección se amplía a las vulnerabilidades que se producen en el código fuente escrito en otros lenguajes a los que se accede mediante la interfaz nativa de Java. A pesar de las protecciones de memoria ofrecidas en Java, el código C de este ejemplo es vulnerable a un buffer overflow debido a que utiliza gets(), que no realiza ninguna comprobación de límites en su entrada.

El tutorial de Sun Java(TM) ofrece la siguiente descripción de JNI [1]:

La estructura JNI permite al método nativo utilizar objetos de Java del mismo modo que el código de Java. Un método nativo puede crear objetos de Java, incluidas matrices y cadenas, y, a continuación, inspeccionar y usar estos objetos para realizar sus tareas. Un método nativo también puede inspeccionar y utilizar objetos creados por el código de aplicación de Java. Un método nativo puede incluso actualizar objetos de Java que este haya creado o que se hayan transferido al mismo; estos objetos actualizados están disponibles en la aplicación de Java. Por consiguiente, tanto la parte de lenguaje nativo como de Java de una aplicación pueden crear y actualizar objetos de Java, además de acceder a ellos, y, continuación, compartir estos objetos entre ellas.

La vulnerabilidad presente en el Example 1 podría detectarse fácilmente a través de una auditoría de código fuente de la implementación del método nativo. Es posible que esto no resulte factible o práctico en función de la disponibilidad del código fuente de C y el modo en que se ha creado el proyecto, aunque en la mayoría de los casos será suficiente. Sin embargo, la capacidad para compartir objetos entre los métodos de Java y nativos eleva el riesgo potencial a casos mucho más insidiosos en los que una administración inadecuada de los datos en Java puede provocar vulnerabilidades inesperadas en el código nativo u operaciones poco seguras en las estructuras de datos dañados del código nativo en Java.

Las vulnerabilidades del código nativo al que se accede mediante una aplicación de Java se suelen explotar del mismo modo que en las aplicaciones escritas en el lenguaje nativo. El único desafío frente a un ataque de este tipo es que el usuario malintencionado identifique la aplicación de Java que utiliza código nativo para realizar determinadas operaciones. Esto se puede lograr de diversas maneras, incluida la identificación de comportamientos específicos que a menudo se implementan con código nativo o mediante la explotación de una pérdida de información del sistema en la aplicación de Java que muestra su 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