This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org

Difference between revisions of "Race condition within a thread"

From OWASP
Jump to: navigation, search
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
{{template:CandidateForDeletion}}
  
{{Template:SecureSoftware}}
+
#REDIRECT [[Race Conditions]]
  
==Overview==
+
 
 +
Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}'''
 +
 
 +
 
 +
 
 +
==Description==
  
 
If two threads of execution use a resource simultaneously, there exists the possibility that resources may be used while invalid, in turn making the state of execution undefined.  
 
If two threads of execution use a resource simultaneously, there exists the possibility that resources may be used while invalid, in turn making the state of execution undefined.  
  
==Consequences ==
+
'''Consequences'''
 
 
* Integrity: The main problem is that - if a lock is overcome - data could be altered in a bad state.
 
  
==Exposure period ==
+
* Integrity: The main problem is that - if a lock is overcome - data could be altered in a bad state.
  
* Design: Use a language which provides facilities to easily use threads safely.
+
'''Exposure period'''
  
==Platform ==
+
* Design: Use a language which provides facilities to easily use threads safely.
  
* Languages: Any language with threads
+
'''Platform'''
  
* Operating platforms: All
+
* Languages: Any language with threads
 +
* Operating platforms: All
  
==Required resources ==
+
'''Required resources'''
  
 
Any
 
Any
  
==Severity ==
+
'''Severity'''
  
 
High
 
High
  
==Likelihood   of exploit ==
+
'''Likelihood of exploit'''
  
 
Medium
 
Medium
  
==Avoidance and mitigation ==
+
* Design: Use locking functionality. This is the recommended solution. Implement some form of locking mechanism around code which alters or reads persistent data in a multi-threaded environment.
 +
 
 +
* Design: Create resource-locking sanity checks. If no inherent locking mechanisms exist, use flags and signals to enforce your own blocking scheme when resources are being used by other threads of execution.
 +
 
  
==Discussion ==
+
==Risk Factors==
  
* Design: Use locking functionality. This is the recommended solution. Implement some form of locking mechanism around code which alters or reads persistent data in a multi-threaded environment.
+
TBD
  
* Design: Create resource-locking sanity checks. If no inherent locking mechanisms exist, use flags and signals to enforce your own blocking scheme when resources are being used by other threads of execution.
 
  
==Examples ==
+
==Examples==
  
 
In C/C++:
 
In C/C++:
Line 74: Line 81:
 
</pre>
 
</pre>
  
==Related problems ==
 
  
Not available.
+
==Related [[Attacks]]==
 +
 
 +
* [[Attack 1]]
 +
* [[Attack 2]]
 +
 
 +
 
 +
==Related [[Vulnerabilities]]==
 +
 
 +
* [[Vulnerability 1]]
 +
* [[Vulnerabiltiy 2]]
 +
 
 +
==Related [[Controls]]==
 +
 
 +
* [[Control 1]]
 +
* [[Control 2]]
 +
 
 +
 
 +
==Related [[Technical Impacts]]==
  
==Categories ==
+
* [[Technical Impact 1]]
 +
* [[Technical Impact 2]]
  
[[Category:Vulnerability]]
 
  
[[Category:Synchronization and Timing Errror]]
+
==References==
  
[[Category:OWASP_CLASP_Project]]
+
TBD

Latest revision as of 12:26, 7 April 2009

Template:CandidateForDeletion

#REDIRECT Race Conditions


Last revision (mm/dd/yy): 04/7/2009


Description

If two threads of execution use a resource simultaneously, there exists the possibility that resources may be used while invalid, in turn making the state of execution undefined.

Consequences

  • Integrity: The main problem is that - if a lock is overcome - data could be altered in a bad state.

Exposure period

  • Design: Use a language which provides facilities to easily use threads safely.

Platform

  • Languages: Any language with threads
  • Operating platforms: All

Required resources

Any

Severity

High

Likelihood of exploit

Medium

  • Design: Use locking functionality. This is the recommended solution. Implement some form of locking mechanism around code which alters or reads persistent data in a multi-threaded environment.
  • Design: Create resource-locking sanity checks. If no inherent locking mechanisms exist, use flags and signals to enforce your own blocking scheme when resources are being used by other threads of execution.


Risk Factors

TBD


Examples

In C/C++:

int foo = 0;
    int storenum(int num)
    {
        static int counter = 0;
        counter++;
        if (num > foo) 
            foo = num;
            return foo;   
    }

In Java:

public classRace {
  static int foo = 0;

  public static void main() {
    new Threader().start();
    foo = 1;
  }

  public static class Threader extends Thread {
    public void run() { 
      System.out.println(foo);
    }
  }
}


Related Attacks


Related Vulnerabilities

Related Controls


Related Technical Impacts


References

TBD