- Removed fennec::path, see #Security Ramblings in PLANNING.md
This commit is contained in:
36
PLANNING.md
36
PLANNING.md
@@ -6,6 +6,7 @@
|
||||
|
||||
1. [Introduction](#introduction)
|
||||
2. [TODO](#todo)
|
||||
1. [Security Ramblings](#security-ramblings)
|
||||
3. [C++ Language](#c-language-library-lang)
|
||||
4. [Math Library](#math-library-math)
|
||||
5. [Memory Library](#memory-library-memory)
|
||||
@@ -62,6 +63,41 @@ This however can be achieved using events at different stages of those engines t
|
||||
- 2D Physics (`physics2d`)
|
||||
- 2D & 3D Audio (`audio`)
|
||||
|
||||
### Security Ramblings:
|
||||
|
||||
Windows is starting to piss me off, so I am considering dropping official support for MSVC. MinGW and Cygwin
|
||||
will still work for compiling on Windows if this ends up being the case. The reason for this is that there are
|
||||
*a lot* of platform dependent security issues. MinGW and Cygwin wrap Linux and glibc headers for Windows, which would
|
||||
push the security onus onto the compiler and end-user.
|
||||
|
||||
The biggest blocker at the moment in terms of this is the filesystem. If we want to implement a filesystem that
|
||||
is safe across platforms, stdc++ *and* iso libc have no guarantees about the safety of their functions.
|
||||
|
||||
The crux of this issue falls at the following specific behaviour:
|
||||
- User selects an existing file to write to
|
||||
- Application interface confirms overwrite action
|
||||
- Application writes to the file after confirmation
|
||||
|
||||
A threat actor can introduce a malicious file or symlink to the file that was attempted access between the check and
|
||||
usage of the file. This is called TOCTOU (time of check, time of use).
|
||||
|
||||
This issue can be solved using `fopen("<file>", "w+")`, however this specific behaviour is not intuitive to those first
|
||||
learning how to work with file systems. We can attempt to abstract this away with another wrapper, or simply write
|
||||
the file structure to handle this behaviour properly. The downside to this method overall is that it will break
|
||||
common conventions of how humans interpret filesystems and the related control flow logic. What we can do is force the
|
||||
`'+'` flag to always be present for write operations, and raise an error, when desired, if the file is not empty. This
|
||||
unfortunately would have the downside of being unable to open a file as write only.
|
||||
|
||||
Using `"wx"` in this instance would not be sufficient since it would require a second call to fopen, which would
|
||||
create the conditions for the TOCTOU error described above.
|
||||
|
||||
Another issue arises when we are parsing a directory tree. The best we can do is take ownership of the directory that
|
||||
is opened as the root. However, this requires `dirent.h` which is not implemented in MSVC. A custom implementation of
|
||||
`dirent.h` may be written for MSVC, however this is one of the few things I am not willing to outsource to another
|
||||
library. Developing our own implementation would take a non-insignificant amount of time, between writing the library,
|
||||
debugging it, and testing for vulnerabilities. As stated above, this implementation is native to MinGW and Cygwin,
|
||||
so we would not have to entirely drop support for Windows. However, MSVC is the most widely used compiler for Windows
|
||||
applications and is native to Visual Studio and VSCode.
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user