Difference between revisions of "Unreleased Resource"

From OWASP
Jump to: navigation, search
 
Line 1: Line 1:
 
{{Template:Vulnerability}}
 
{{Template:Vulnerability}}
 
{{Template:Fortify}}
 
{{Template:Fortify}}
 +
{{Template:Vulnerability}}
 +
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}'''
  
==Abstract==
+
[[ASDR_TOC_Vulnerabilities|Vulnerabilities Table of Contents]]
 +
 
 +
[[ASDR Table of Contents]]
 +
__TOC__
  
The program can potentially fail to release a system resource.
 
  
 
==Description==
 
==Description==
 +
 +
The program can potentially fail to release a system resource.
  
 
Most unreleased resource issues result in general software reliability problems, but if an attacker can intentionally trigger a resource leak, the attacker might be able to launch a denial of service attack by depleting the resource pool.
 
Most unreleased resource issues result in general software reliability problems, but if an attacker can intentionally trigger a resource leak, the attacker might be able to launch a denial of service attack by depleting the resource pool.
Line 15: Line 21:
 
* Confusion over which part of the program is responsible for releasing the resource.  
 
* Confusion over which part of the program is responsible for releasing the resource.  
  
==Examples ==
 
  
'''Example 1:''' The following Java method never closes the file handle it opens. The finalize() method for FileInputStream eventually calls close(), but there is no guarantee as to how long it will take before the finalize() method will be invoked. In a busy environment, this can result in the JVM using up all of its file handles.
+
==Risk Factors==
 +
 
 +
* Talk about the [[OWASP Risk Rating Methodology|factors]] that make this vulnerability likely or unlikely to actually happen
 +
* Discuss the technical impact of a successful exploit of this vulnerability
 +
* Consider the likely [business impacts] of a successful attack
 +
 
 +
 
 +
==Examples==
 +
 
 +
===Example 1===
 +
The following Java method never closes the file handle it opens. The finalize() method for FileInputStream eventually calls close(), but there is no guarantee as to how long it will take before the finalize() method will be invoked. In a busy environment, this can result in the JVM using up all of its file handles.
  
 
<pre>
 
<pre>
Line 31: Line 46:
 
</pre>
 
</pre>
  
'''Example 2:''' Under normal conditions the following C# code executes a database query, processes the results returned by the database, and closes the allocated SqlConnection object. But if an exception occurs while executing the SQL or processing the results, the SqlConnection object is not closed. If this happens often enough, the database will run out of available cursors and not be able to execute any more SQL queries.
+
===Example 2===
 +
Under normal conditions the following C# code executes a database query, processes the results returned by the database, and closes the allocated SqlConnection object. But if an exception occurs while executing the SQL or processing the results, the SqlConnection object is not closed. If this happens often enough, the database will run out of available cursors and not be able to execute any more SQL queries.
  
 
<pre>
 
<pre>
Line 45: Line 61:
 
</pre>
 
</pre>
  
'''Example 3:''' The following C function does not close the file handle it opens if an error occurs. If the process is long-lived, the process can run out of file handles.
+
===Example 3===
 +
The following C function does not close the file handle it opens if an error occurs. If the process is long-lived, the process can run out of file handles.
  
 
<pre>
 
<pre>
Line 70: Line 87:
 
</pre>
 
</pre>
  
==Related Threats==
 
  
==Related Attacks==
+
==Related [[Attacks]]==
  
==Related Vulnerabilities==
+
* [[Attack 1]]
 +
* [[Attack 2]]
  
==Related Countermeasures==
 
  
==Categories==
+
==Related [[Vulnerabilities]]==
  
[[Category:Code Quality Vulnerability]]
+
* [[Vulnerability 1]]
 +
* [[Vulnerabiltiy 2]]
  
[[Category:Java]]
 
  
[[Category:Implementation]]
 
  
 +
==Related [[Controls]]==
 +
 +
* [[Control 1]]
 +
* [[Control 2]]
 +
 +
 +
==Related [[Technical Impacts]]==
 +
 +
* [[Technical Impact 1]]
 +
* [[Technical Impact 2]]
 +
 +
 +
==References==
 +
 +
TBD
 +
[[Category:FIXME|add links
 +
 +
In addition, one should classify vulnerability based on the following subcategories: Ex:<nowiki>[[Category:Error Handling Vulnerability]]</nowiki>
 +
 +
Availability Vulnerability
 +
 +
Authorization Vulnerability
 +
 +
Authentication Vulnerability
 +
 +
Concurrency Vulnerability
 +
 +
Configuration Vulnerability
 +
 +
Cryptographic Vulnerability
 +
 +
Encoding Vulnerability
 +
 +
Error Handling Vulnerability
 +
 +
Input Validation Vulnerability
 +
 +
Logging and Auditing Vulnerability
 +
 +
Session Management Vulnerability]]
 +
 +
__NOTOC__
 +
 +
 +
[[Category:OWASP ASDR Project]]
 +
[[Category:Code Quality Vulnerability]]
 +
[[Category:Java]]
 +
[[Category:Implementation]]
 
[[Category:Code Snippet]]
 
[[Category:Code Snippet]]

Revision as of 08:14, 3 October 2008

This is a Vulnerability. To view all vulnerabilities, please see the Vulnerability Category page.


This article includes content generously donated to OWASP by Fortify.JPG.

This is a Vulnerability. To view all vulnerabilities, please see the Vulnerability Category page.


Last revision (mm/dd/yy): 10/3/2008

Vulnerabilities Table of Contents

ASDR Table of Contents

Contents


Description

The program can potentially fail to release a system resource.

Most unreleased resource issues result in general software reliability problems, but if an attacker can intentionally trigger a resource leak, the attacker might be able to launch a denial of service attack by depleting the resource pool.

Resource leaks have at least two common causes:

  • Error conditions and other exceptional circumstances.
  • Confusion over which part of the program is responsible for releasing the resource.


Risk Factors

  • Talk about the factors that make this vulnerability likely or unlikely to actually happen
  • Discuss the technical impact of a successful exploit of this vulnerability
  • Consider the likely [business impacts] of a successful attack


Examples

Example 1

The following Java method never closes the file handle it opens. The finalize() method for FileInputStream eventually calls close(), but there is no guarantee as to how long it will take before the finalize() method will be invoked. In a busy environment, this can result in the JVM using up all of its file handles.

	private void processFile(String fName) throws FileNotFoundException, IOException
	{
	  FileInputStream fis = new FileInputStream(fName);
	  int sz;
	  byte[] byteArray = new byte[BLOCK_SIZE];
	  while ((sz = fis.read(byteArray)) != -1) {
		processBytes(byteArray, sz);
	  }
	}

Example 2

Under normal conditions the following C# code executes a database query, processes the results returned by the database, and closes the allocated SqlConnection object. But if an exception occurs while executing the SQL or processing the results, the SqlConnection object is not closed. If this happens often enough, the database will run out of available cursors and not be able to execute any more SQL queries.

	...
	SqlConnection conn = new SqlConnection(connString);
	SqlCommand cmd = new SqlCommand(queryString);
	cmd.Connection = conn;
	conn.Open();
	SqlDataReader rdr = cmd.ExecuteReader();
	HarvestResults(rdr); 
	conn.Connection.Close();
	...

Example 3

The following C function does not close the file handle it opens if an error occurs. If the process is long-lived, the process can run out of file handles.

	int decodeFile(char* fName)
	{
		char buf[BUF_SZ];
		FILE* f = fopen(fName, "r");
		
		if (!f) {
			printf("cannot open %s\n", fName);
			return DECODE_FAIL;
		} else {
			while (fgets(buf, BUF_SZ, f)) {
				if (!checkChecksum(buf)) {
				  return DECODE_FAIL;
				} else {
				  decodeBlock(buf);
				}
			}
		}
		fclose(f);
		return DECODE_SUCCESS;
	}


Related Attacks


Related Vulnerabilities


Related Controls


Related Technical Impacts


References

TBD