Properly sanitize attachment filenames#118
Open
The-Compiler wants to merge 1 commit intoakissinger:masterfrom
Open
Properly sanitize attachment filenames#118The-Compiler wants to merge 1 commit intoakissinger:masterfrom
The-Compiler wants to merge 1 commit intoakissinger:masterfrom
Conversation
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
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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