The product contains a concurrent code sequence that requires temporary, exclusive access to a shared resource, but a timing window exists in which the shared resource can be modified by another code sequence operating concurrently.
In languages that support it, use synchronization primitives. Only wrap these around critical code to minimize the impact on performance.
Use thread-safe capabilities such as the data access abstraction in Spring.
Minimize the usage of shared resources in order to remove as much complexity as possible from the control flow and to reduce the likelihood of unexpected conditions occurring. Additionally, this will minimize the amount of synchronization necessary and may even help to reduce the likelihood of a denial of service where an attacker may be able to repeatedly trigger a critical section (CWE-400).
When using multithreading and operating on shared variables, only use thread-safe functions.
Use atomic operations on shared variables. Be wary of innocent-looking constructs such as "x++". This may appear atomic at the code layer, but it is actually non-atomic at the instruction layer, since it involves a read, followed by a computation, followed by a write.
Our security experts can help you identify and remediate CWE-362 vulnerabilities in your codebase.
Get Security Assessment