Reino: Code Quality
Una mala calidad del código lleva a un comportamiento no predecible. Desde la perspectiva de un usuario, muchas veces también supone una usabilidad limitada. Pero para un atacante es una oportunidad para atacar al sistema de formas insospechadas.
Unreleased Resource: Unmanaged Object
Abstract
El programa no se ha podido deshacer de un objeto administrado que utiliza recursos del sistema no administrados.
Explanation
El programa no se ha podido deshacer de un objeto administrado que emplea recursos del sistema no administrados.
La incapacidad para deshacerse correctamente de un objeto administrado que utilice recursos del sistema no administrado presenta al menos dos causas habituales:
- Condiciones de error y otras circunstancias excepcionales.
- Confusión en cuanto a la parte del programa responsable de liberar el recurso.
Un pequeño subconjunto de objetos .NET administrados utiliza recursos del sistema no administrados. Es posible que el recopilador de elementos no utilizados de .NET no libere los objetos administrados originales en la forma prevista. Por consiguiente, la aplicación puede quedarse sin memoria disponible, ya que el recopilador de elementos no utilizados no conoce la memoria consumida por los recursos no administrados. La mayoría de los problemas de pérdida de recursos no administrados provocan problemas generales de confiabilidad del software. Sin embargo, si un atacante puede activar de forma intencionada una pérdida de recursos no administrados, es posible que este pueda iniciar un ataque de denegación de servicios agotando el conjunto de recursos no administrados.
Ejemplo 1: el siguiente método crea un objeto de mapa de bits administrado a partir de una secuencia de entrada
Normalmente se puede confiar de forma segura en que el recopilador de elementos no utilizados realizará esta tarea en el momento seguro para los objetos administrados que no utilicen recursos del sistema no administrados. El recopilador de elementos no utilizados llama a
La incapacidad para deshacerse correctamente de un objeto administrado que utilice recursos del sistema no administrado presenta al menos dos causas habituales:
- Condiciones de error y otras circunstancias excepcionales.
- Confusión en cuanto a la parte del programa responsable de liberar el recurso.
Un pequeño subconjunto de objetos .NET administrados utiliza recursos del sistema no administrados. Es posible que el recopilador de elementos no utilizados de .NET no libere los objetos administrados originales en la forma prevista. Por consiguiente, la aplicación puede quedarse sin memoria disponible, ya que el recopilador de elementos no utilizados no conoce la memoria consumida por los recursos no administrados. La mayoría de los problemas de pérdida de recursos no administrados provocan problemas generales de confiabilidad del software. Sin embargo, si un atacante puede activar de forma intencionada una pérdida de recursos no administrados, es posible que este pueda iniciar un ataque de denegación de servicios agotando el conjunto de recursos no administrados.
Ejemplo 1: el siguiente método crea un objeto de mapa de bits administrado a partir de una secuencia de entrada
incomingStream
. El mapa de bits se manipula y almacena en la secuencia de salida outgoingStream
. Nunca se llama de forma explícita al método Dispose()
de incomingBitmap
y outgoingBitmap
.Normalmente se puede confiar de forma segura en que el recopilador de elementos no utilizados realizará esta tarea en el momento seguro para los objetos administrados que no utilicen recursos del sistema no administrados. El recopilador de elementos no utilizados llama a
Bitmap.Dispose()
cuando lo cree conveniente Sin embargo, el objeto Bitmap
utiliza pocos recursos del sistema no administrados. Es posible que el recopilador de elementos no utilizados llame a Dispose()
antes de que se agote el conjunto de recursos no administrados.
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