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 Native Invoke
Abstract
O uso indevido de Platform Invocation Services pode tornar aplicativos gerenciados vulneráveis a falhas de segurança em outras linguagens.
Explanation
Erros de invocação nativa não segura ocorrem quando um aplicativo gerenciado usa P/Invoke para chamar um código nativo (não gerenciado) escrito em outra linguagem de programação.
Exemplo 1: O código C# a seguir define uma classe denominada
O código C a seguir define o método nativo implementado na classe
Como a classe Echo é implementada em um código gerenciado, pode parecer que ela é imune a problemas de memória, como vulnerabilidades de buffer overflow. Embora o ambiente gerenciado seja capaz de manter a segurança das operações de memória, essa proteção não se estende a vulnerabilidades que ocorrem no código nativo acessado com o uso de P/Invoke. Apesar das proteções de memória oferecidas no ambiente de tempo de execução gerenciado, o código nativo neste exemplo é vulnerável a um buffer overflow por utilizar
A vulnerabilidade no
Vulnerabilidades no código nativo acessado por meio de um aplicativo gerenciado são geralmente exploradas da mesma maneira que em aplicativos escritos na linguagem nativa. O único desafio a um ataque desse tipo é que o invasor deve identificar se o aplicativo gerenciado usa um código nativo para realizar determinadas operações. Isso pode ser feito de várias 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 gerenciado que expõe seu uso de P/Invoke.
Exemplo 1: O código C# a seguir 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
{
[DllImport("mylib.dll")]
internal static extern void RunEcho();
static void main(String[] args)
{
RunEcho();
}
}
O código C a seguir define o método nativo implementado na classe
Echo
:
#include <stdio.h>
void __stdcall RunEcho()
{
char* buf = (char*) malloc(64 * sizeof(char));
gets(buf);
printf(buf);
}
Como a classe Echo é implementada em um código gerenciado, pode parecer que ela é imune a problemas de memória, como vulnerabilidades de buffer overflow. Embora o ambiente gerenciado seja capaz de manter a segurança das operações de memória, essa proteção não se estende a vulnerabilidades que ocorrem no código nativo acessado com o uso de P/Invoke. Apesar das proteções de memória oferecidas no ambiente de tempo de execução gerenciado, o código nativo neste exemplo é vulnerável a um buffer overflow por utilizar
gets()
, que não realiza nenhuma verificação de limites em sua entrada. Além disso, buf
é alocado, mas não é liberado e, portanto, é um vazamento de memória.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 e de como o projeto está estruturado, mas, em muitos casos, pode ser suficiente. No entanto, a capacidade de compartilhar objetos entre os ambientes gerenciados e nativos aumenta o possível risco de casos muito mais traiçoeiros em que a manipulação imprópria de dados pode provocar vulnerabilidades inesperadas ou operações não seguras no código nativo, corrompendo estruturas de dados no código gerenciado.Vulnerabilidades no código nativo acessado por meio de um aplicativo gerenciado são geralmente exploradas da mesma maneira que em aplicativos escritos na linguagem nativa. O único desafio a um ataque desse tipo é que o invasor deve identificar se o aplicativo gerenciado usa um código nativo para realizar determinadas operações. Isso pode ser feito de várias 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 gerenciado que expõe seu 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