Hidden files are created automatically by many tools to save user-preferences, well-known examples are .profile
, .bashrc
,
.bash_history
or .git
. To simplify the view these files are not displayed by default using operating system commands like
ls
.
Outside of the user environment, hidden files are sensitive because they are used to store privacy-related information or even hard-coded
secrets.
Ask Yourself Whether
- Hidden files may have been inadvertently uploaded to the static server’s public directory and it accepts requests to hidden files.
- There is no business use cases linked to serve files in
.name
format but the server is not configured to reject requests to this
type of files.
There is a risk if you answered yes to any of those questions.
Recommended Secure Coding Practices
- Disable the serving of hidden files.
Sensitive Code Example
Express.js serve-static middleware:
let serveStatic = require("serve-static");
let app = express();
let serveStaticMiddleware = serveStatic('public', { 'index': false, 'dotfiles': 'allow'}); // Sensitive
app.use(serveStaticMiddleware);
Compliant Solution
Express.js serve-static middleware:
let serveStatic = require("serve-static");
let app = express();
let serveStaticMiddleware = serveStatic('public', { 'index': false, 'dotfiles': 'ignore'}); // Compliant: ignore or deny are recommended values
let serveStaticDefault = serveStatic('public', { 'index': false}); // Compliant: by default, "dotfiles" (file or directory that begins with a dot) are not served (with the exception that files within a directory that begins with a dot are not ignored), see serve-static module documentation
app.use(serveStaticMiddleware);
See