Reino: API Abuse

Un API es un contrato entre un autor de llamada y un receptor de llamada. Las formas de abuso de API más comunes los produce el autor de llamada cuando no consigue atender su fin de este contrato. Por ejemplo, si un programa no consigue llamar chdir() después de llamar chroot(), se viola el contrato que especifica cómo cambiar el directorio de origen activo de una forma segura. Otro buen ejemplo de un abuso de manual es esperar que el receptor devuelva una información de DNS de confianza al autor de llamada. En este caso, el autor de llamada abusa el API del receptor haciendo determinadas suposiciones sobre su comportamiento (que el valor de retorno se puede usar con fines de autenticación). También se puede violar el contrato entre el autor de llamada y el receptor desde el otro lado. Por ejemplo, si un codificador envía SecureRandom y devuelve un valor no aleatorio, se viola el contrato.

Often Misused: Encoding

Abstract
El reemplazo incorrecto de las clases de .NET Framework puede provocar que se ejecute código arbitrario en el servidor, que se abuse de la lógica de la aplicación o que se deniegue el servicio.
Explanation
Independientemente del lenguaje en el que esté escrito un programa, los ataques más devastadores normalmente incluyen la ejecución remota de código, con la cual un atacante consigue ejecutar código malintencionado en el contexto del programa. El método GetChars en las clases Decoder y Encoding, y el método GetBytes en las clases Encoder y Encoding de .NET Framework llevan a cabo aritmética de puntero de forma interna en las matrices de caracteres y bytes para convertir un intervalo de caracteres en un intervalo de bytes y viceversa.
Cuando se realizan operaciones de aritmética de puntero, los desarrolladores suelen sustituir los métodos anteriores incorrectamente e introducen vulnerabilidades como la ejecución de código arbitrario, el abuso de la lógica de la aplicación y la denegación del servicio.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 176
[2] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[3] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.2 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[4] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[5] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
desc.structural.dotnet.often_misused_encoding
Abstract
Este método es difícil de usar correctamente.
Explanation
Es fácil creer que este método de codificación le protegerá contra ataques de inserción; sin embargo, si el método no se usa exactamente en el contexto adecuado, puede ofrecer mucha menos protección de la que merece.

Ejemplo 1: la siguiente llamada de codificación permite a un atacante tener un poco de libertad para insertar JavaScript malintencionado:

out.println("x = " + encoder.encodeForJavaScript(input) + ";");
References
[1] OWASP ESAPI Secure Coding Guideline
[2] Standards Mapping - Common Weakness Enumeration CWE ID 176
[3] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[4] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.2 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[5] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[6] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
desc.structural.java.often_misused_encoding
Abstract
Es posible que la llamada ajuste perfectamente los caracteres. Los caracteres no admitidos que se transfieren a los métodos de la API de forma predeterminada se pueden asignar con ajuste perfecto a caracteres peligrosos.
Explanation
Cuando los juegos de caracteres entre el sistema operativo y las aplicaciones que se ejecutan en este no coinciden, los caracteres no admitidos que se pasan a los métodos de la API de forma predeterminada pueden asignarse con ajuste perfecto a caracteres peligrosos.

Ejemplo 1:en Objective-C, el ejemplo siguiente convierte un objeto NSString que contiene un carácter UTF-8 a datos ASCII de nuevo:


...
unichar ellipsis = 0x2026;
NSString *myString = [NSString stringWithFormat:@"My Test String%C", ellipsis];
NSData *asciiData = [myString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *asciiString = [[NSString alloc] initWithData:asciiData encoding:NSASCIIStringEncoding];
NSLog(@"Original: %@ (length %d)", myString, [myString length]);
NSLog(@"Best-fit-mapped: %@ (length %d)", asciiString, [asciiString length]);
// output:
// Original: My Test String... (length 15)
// Best-fit-mapped: My Test String... (length 17)
...


Si examina cuidadosamente el resultado, el carácter "..." se tradujo por tres puntos consecutivos. Si ha medido el búfer de salida basándose en el búfer de entrada, la aplicación podría ser vulnerable al buffer overflow. Se pueden asignar otros caracteres de un carácter a dos. El carácter griego "fi" se asignará a una "f" seguida de una letra "i". Al cargar el búfer con estos caracteres de carga frontal, un usuario malintencionado obtiene un control completo sobre el número de caracteres que se utilizan para provocar el buffer overflow.
References
[1] Apple Secure Coding Guide Apple
[2] String Programming Guide Apple
[3] Standards Mapping - Common Weakness Enumeration CWE ID 176
[4] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[5] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.2 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[6] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[7] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
desc.semantic.objc.method_may_best_fit_map_characters
Abstract
Es posible que la llamada ajuste perfectamente los caracteres. Los caracteres no admitidos que se transfieren a los métodos de la API de forma predeterminada se pueden asignar con ajuste perfecto a caracteres peligrosos.
Explanation
Cuando los juegos de caracteres entre el sistema operativo y las aplicaciones que se ejecutan en este no coinciden, los caracteres no admitidos que se pasan a los métodos de la API de forma predeterminada pueden asignarse con ajuste perfecto a caracteres peligrosos.

Ejemplo 1: En Swift, el ejemplo siguiente convierte un objeto NSString que contiene un carácter UTF-8 a datos ASCII de nuevo:


...
let ellipsis = 0x2026;
let myString = NSString(format:"My Test String %C", ellipsis)
let asciiData = myString.dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion:true)
let asciiString = NSString(data:asciiData!, encoding:NSASCIIStringEncoding)
NSLog("Original: %@ (length %d)", myString, myString.length)
NSLog("Best-fit-mapped: %@ (length %d)", asciiString!, asciiString!.length)

// output:
// Original: My Test String ... (length 16)
// Best-fit-mapped: My Test String ... (length 18)
...


Si examina cuidadosamente el resultado, el carácter "..." se tradujo por tres puntos consecutivos. Si ha medido el búfer de salida basándose en el búfer de entrada, la aplicación podría ser vulnerable al buffer overflow. Se pueden asignar otros caracteres de un carácter a dos. El carácter griego "fi" se asignará a una "f" seguida de una letra "i". Al cargar el búfer con estos caracteres de carga frontal, un usuario malintencionado obtiene un control completo sobre el número de caracteres que se utilizan para provocar el buffer overflow.
References
[1] Apple Secure Coding Guide Apple
[2] String Programming Guide Apple
[3] Standards Mapping - Common Weakness Enumeration CWE ID 176
[4] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[5] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.2 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[6] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[7] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
desc.semantic.swift.method_may_best_fit_map_characters