-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Modify S5847: Change text to LayC format (APPSEC-1214) (#3316)
- Loading branch information
1 parent
45539ed
commit 206114f
Showing
11 changed files
with
120 additions
and
112 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
When an application manipulates files, "Time-Of-Check to Time-Of-Use" can occur | ||
when a file-checking operation is disconnected from the actual operation it is | ||
bound to. | ||
|
||
For example, such a vulnerability occurs when a file existence check is | ||
performed strictly before a file creation operation. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
To prevent TOCTOU race condition issues, best practices recommend relying on | ||
file operations that can perform the necessary preliminary checks atomically. | ||
For example, file opening functions usually accept a parameter to check the file | ||
exists and return an error depending on the result. This check is atomic and is | ||
not susceptible to race conditions. | ||
|
||
When this is not possible, it might be possible to open a file directly, and to | ||
keep a reference to it for later use. If the conditions are set for the | ||
subsequent operations, the application can continue with its processing and use | ||
the open file pointer to read or write to the file. In the opposite case, an | ||
error might be raised that will need to be properly handled. | ||
|
||
To finish, for most complex operations, the application can create a dedicated | ||
working directory and set tight permissions on it. This needs to be performed | ||
atomically to prevent further race conditions. All subsequent sensitive file | ||
operations can then be performed in this dedicated directory. | ||
|
||
Note that this last solution is imperfect and is still susceptible to race | ||
condition attacks from privileged users and the application itself. It should be | ||
used when no other countermeasure is acceptable. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
==== Arbitrary code execution | ||
|
||
Executable or script file integrity and authenticity checks can be bypassed when | ||
exploiting a TOCTOU vulnerability. In such a scenario, attackers would change | ||
an executable file content between when its integrity is checked and when the | ||
application executes it. | ||
|
||
This attack would allow attackers to trick the application into executing | ||
malicious, arbitrary code. They would then be granted the same privilege levels | ||
as the application itself, which can be particularly severe when it runs with | ||
administration privileges. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
==== Denial of service | ||
|
||
When the application expects some file properties to be set at the operation | ||
time, it will often face unexpected errors when those properties have actually | ||
changed. This might be the case when writing to a file where newly set | ||
permissions forbid that operation or when reading from a deleted file. | ||
|
||
When such errors are faced, the application might unexpectedly stop, which can | ||
affect its availability. Depending on the application and hosting architectures, | ||
the interruption can be temporary or permanent, partial or complete. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
==== Privileges escalation | ||
|
||
When the attacker is a local user on the same server as the running application, | ||
the same attack is possible with extended probability. In such a case, attackers | ||
can exploit the reading and writing to configuration files, the creation of | ||
local network resources, or the use of temporary files to achieve the same code | ||
execution purpose. | ||
|
||
However, in that case, the attack is only meaningful when the application is | ||
running with high or otherwise interesting privileges. Attackers exploiting a | ||
TOCTOU vulnerability that way would achieve horizontal or vertical privilege | ||
escalation. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
The impact of a successfully exploited race condition is dependent on the | ||
business logic of the vulnerable application. The consequences will vary | ||
depending on what check is performed and how the file is used. | ||
|
||
In general, attackers use such attacks to escalate privileges, execute arbitrary | ||
code, or perform a denial of service. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
Race conditions can happen when file operations and their associated pre-checks | ||
are disconnected. Indeed, while the application assumes that the checked file | ||
property will not change before performing the operation, there is a chance that | ||
changes are applied to the file. | ||
|
||
Especially, a concurrent process, which an attacker can control, could modify a | ||
file right after a check is performed and before the actual use. This file can | ||
be deleted, created, altered, or see its permissions changed depending on the | ||
use case. |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.