Skip to content

Properly sanitize attachment filenames#118

Open
The-Compiler wants to merge 1 commit intoakissinger:masterfrom
The-Compiler:sanitize-filenames
Open

Properly sanitize attachment filenames#118
The-Compiler wants to merge 1 commit intoakissinger:masterfrom
The-Compiler:sanitize-filenames

Conversation

@The-Compiler
Copy link
Collaborator

The "filename" field from notmuch seems to originate directly from the email's Content-Disposition header. It's not guaranteed that the suggested filename is supported on the current filesystem, or that it is safe.

For example, filenames may contain path separators, which could lead to files being written outside of the intended directory. This can be a security risk, as e.g. an attacker could craft an email that uses "../../home/user/.bashrc" as attachment filename, causing that file to be overwritten when attachments are viewed.

A minimal mitigation is to strip path separators from attachment filenames before using them, but this commit properly sanitizes more aspects of the filename (invalid characters on different OS and path length limits), using code from qutebrowser which has been used in production for multiple years (originally written by me, slightly simplified and adapted): https://github.com/qutebrowser/qutebrowser/blob/5d14f90ded9377b857dbe1147297d5e33535494a/qutebrowser/utils/utils.py#L441-L508

The "filename" field from notmuch seems to originate directly from the email's
Content-Disposition header. It's not guaranteed that the suggested filename is
supported on the current filesystem, or that it is safe.

For example, filenames may contain path separators, which could lead to files
being written outside of the intended directory. This can be a security risk,
as e.g. an attacker could craft an email that uses "../../home/user/.bashrc" as
attachment filename, causing that file to be overwritten when attachments are
viewed.

A minimal mitigation is to strip path separators from attachment filenames
before using them, but this commit properly sanitizes more aspects of the
filename (invalid characters on different OS and path length limits), using code
from qutebrowser which has been used in production for multiple years
(originally written by me, slightly simplified and adapted):
https://github.com/qutebrowser/qutebrowser/blob/5d14f90ded9377b857dbe1147297d5e33535494a/qutebrowser/utils/utils.py#L441-L508
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant