Reino: Code Quality
Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.
Unreleased Resource: Unmanaged Object
Abstract
O programa não consegue descartar um objeto gerenciado que utiliza recursos de sistema não gerenciados.
Explanation
O programa não consegue descartar corretamente um objeto gerenciado que utiliza recursos de sistema não gerenciados.
A incapacidade de descartar corretamente um objeto gerenciado que utiliza recursos de sistema não gerenciados tem pelo menos duas causas comuns:
- Condições de erro e outras circunstâncias excepcionais.
- Confusão acerca de qual parte do programa é responsável pela liberação do recurso.
Um pequeno subconjunto de objetos .NET gerenciados usa recursos de sistema não gerenciados. O Coletor de Lixo do .NET pode não liberar os objetos gerenciados originais de maneira previsível. Dessa forma, o aplicativo pode esgotar a memória disponível, já que o Coletor de Lixo não está ciente da memória consumida pelos recursos não gerenciados. A maioria dos problemas de vazamento de recursos não gerenciados resulta em problemas gerais de confiabilidade de software. Porém, se um invasor puder provocar intencionalmente um vazamento de recursos não gerenciados, talvez ele consiga lançar um ataque de negação de serviço esgotando o pool de recursos.
Exemplo 1: O método a seguir cria um Objeto de Bitmap gerenciado a partir de um fluxo de entrada
Normalmente, é possível contar com o Coletor de Lixo para fazer isso em uma ocasião segura para objetos gerenciados que não utilizam recursos de sistema não gerenciados. O Coletor de Lixo chama
A incapacidade de descartar corretamente um objeto gerenciado que utiliza recursos de sistema não gerenciados tem pelo menos duas causas comuns:
- Condições de erro e outras circunstâncias excepcionais.
- Confusão acerca de qual parte do programa é responsável pela liberação do recurso.
Um pequeno subconjunto de objetos .NET gerenciados usa recursos de sistema não gerenciados. O Coletor de Lixo do .NET pode não liberar os objetos gerenciados originais de maneira previsível. Dessa forma, o aplicativo pode esgotar a memória disponível, já que o Coletor de Lixo não está ciente da memória consumida pelos recursos não gerenciados. A maioria dos problemas de vazamento de recursos não gerenciados resulta em problemas gerais de confiabilidade de software. Porém, se um invasor puder provocar intencionalmente um vazamento de recursos não gerenciados, talvez ele consiga lançar um ataque de negação de serviço esgotando o pool de recursos.
Exemplo 1: O método a seguir cria um Objeto de Bitmap gerenciado a partir de um fluxo de entrada
incomingStream
. O Bitmap é manipulado e mantido como persistente no fluxo de saída outgoingStream
. O método Dispose()
de incomingBitmap
e outgoingBitmap
nunca é chamado explicitamente.Normalmente, é possível contar com o Coletor de Lixo para fazer isso em uma ocasião segura para objetos gerenciados que não utilizam recursos de sistema não gerenciados. O Coletor de Lixo chama
Bitmap.Dispose()
quando ele considera apropriado. No entanto, o objeto Bitmap
utiliza recursos de sistema não gerenciados escassos. O Coletor de Lixo talvez não consiga chamar Dispose()
antes que o pool de recursos não gerenciados se esgote.
private void processBitmap(Stream incomingStream, Stream outgoingStream, int thumbnailSize)
{
Bitmap incomingBitmap = (Bitmap)System.Drawing.Image.FromStream(incomingStream);
bool validBitmap = validateBitmap(incomingBitmap);
if (!validBitmap)
throw new ValidationException(incomingBitmap);
Bitmap outgoingBitmap = new Bitmap(incomingBitmap, new Size(thumbnailSize, thumbnailSize));
outgoingBitmap.Save(outgoingStream, ImageFormat.Bmp);
}
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 772
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [21] CWE ID 772
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001094
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[5] Standards Mapping - NIST Special Publication 800-53 Revision 5 SC-5 Denial of Service Protection
[6] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 6.2.4
[14] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[15] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection
[16] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective C.3.3 - Web Software Attack Mitigation
[17] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 404
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002400 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002400 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002400 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002400 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002400 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002400 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002400 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002400 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002400 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002400 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002400 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002400 CAT II
[40] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
[41] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
desc.controlflow.dotnet.unreleased_resource_unmanaged_object