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 Native Invoke
Abstract
El uso inadecuado de los servicios de invocación de plataforma puede provocar que las aplicaciones administradas sean vulnerables a los fallos de seguridad en otros lenguajes.
Explanation
Se producen errores de invocación nativa poco segura cuando una aplicación administrada utiliza P/Invoke para llamar al código (no administrado) nativo en otro lenguaje de programación.
Ejemplo 1: el siguiente código C# define una clase denominada
El siguiente código C define el método nativo implementado en la clase
Como el eco se ha implementado en el código administrado, podría parecer que este es inmune a problemas de memoria, como las vulnerabilidades de buffer overflow. Aunque el entorno administrado protege de forma eficaz las operaciones de memoria, esta protección no se extiende a las vulnerabilidades que se producen en el código nativo al que se accede mediante P/Invoke. A pesar de las protecciones de la memoria ofrecidas por el entorno de tiempo de ejecución administrado, el código nativo de este ejemplo es vulnerable al buffer overflow debido a que utiliza
La vulnerabilidad presente en el
Las vulnerabilidades del código nativo al que se accede a través de una aplicación administrada se explotan normalmente del mismo modo que en las aplicaciones escrita en el lenguaje nativo. El único reto que se le plantea al usuario malintencionado en relación con un ataque de este tipo consiste en identificar que la aplicación administrada utiliza código nativo para realizar determinadas operaciones. Esto puede lograrse de diversas formas, incluida la identificación de los comportamientos específicos que a menudo se implementan con el código nativo o explorando una fuga de información del sistema en la aplicación administrada que deje al descubierto su uso de P/Invoke.
Ejemplo 1: el siguiente código C# 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
{
[DllImport("mylib.dll")]
internal static extern void RunEcho();
static void main(String[] args)
{
RunEcho();
}
}
El siguiente código C define el método nativo implementado en la clase
Echo
:
#include <stdio.h>
void __stdcall RunEcho()
{
char* buf = (char*) malloc(64 * sizeof(char));
gets(buf);
printf(buf);
}
Como el eco se ha implementado en el código administrado, podría parecer que este es inmune a problemas de memoria, como las vulnerabilidades de buffer overflow. Aunque el entorno administrado protege de forma eficaz las operaciones de memoria, esta protección no se extiende a las vulnerabilidades que se producen en el código nativo al que se accede mediante P/Invoke. A pesar de las protecciones de la memoria ofrecidas por el entorno de tiempo de ejecución administrado, el código nativo de este ejemplo es vulnerable al buffer overflow debido a que utiliza
gets()
, que no lleva a cabo ninguna comprobación de límites en su entrada. Asimismo, buf
se asigna, pero no se libera, por lo que produce una fuga de memoria.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 esta operación no sea factible o posible en función de la disponibilidad del código fuente y la forma en que se ha creado el proyecto, aunque, en la mayoría de los casos, este método es suficiente. Sin embargo, la capacidad para compartir objetos entre los entornos administrado y nativo amplía el riesgo potencial de que se produzcan casos más insidiosos cuando una administración inadecuada de los datos en el código administrado puede provocar vulnerabilidades inesperadas u operaciones que no son seguras en el código nativo, lo que daña las estructuras de datos del código administrado.Las vulnerabilidades del código nativo al que se accede a través de una aplicación administrada se explotan normalmente del mismo modo que en las aplicaciones escrita en el lenguaje nativo. El único reto que se le plantea al usuario malintencionado en relación con un ataque de este tipo consiste en identificar que la aplicación administrada utiliza código nativo para realizar determinadas operaciones. Esto puede lograrse de diversas formas, incluida la identificación de los comportamientos específicos que a menudo se implementan con el código nativo o explorando una fuga de información del sistema en la aplicación administrada que deje al descubierto su uso de P/Invoke.
References
[1] How to: Call Native DLLs from Managed Code Using PInvoke
[2] Standards Mapping - Common Weakness Enumeration CWE ID 111
[3] Standards Mapping - Common Weakness Enumeration Top 25 2024 [12] CWE ID 020
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[8] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[9] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[10] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[11] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[20] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[21] 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
[22] 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
[23] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002560 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002560 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II, APSC-DV-002560 CAT I
[45] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
desc.dataflow.dotnet.unsafe_native_invoke