summaryrefslogtreecommitdiff
path: root/misc
AgeCommit message (Collapse)Author
2022-01-04CVE-2021-41146: Add --untrusted-args to avoid argument injectionFlorian Bruhin
On Windows, if an application is registered as an URL handler like this: HKEY_CLASSES_ROOT https URL Protocol = "" [...] shell open command (Default) = ".../qutebrowser.exe" "%1" one would think that Windows takes care of making sure URLs can't inject arguments by containing a quote. However, this is not the case, as stated by the Microsoft docs: https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa767914(v=vs.85) Security Warning: Applications that handle URI schemes must consider how to respond to malicious data. Because handler applications can receive data from untrusted sources, the URI and other parameter values passed to the application may contain malicious data that attempts to exploit the handling application. and As noted above, the string that is passed to a pluggable protocol handler might be broken across multiple parameters. Malicious parties could use additional quote or backslash characters to pass additional command line parameters. For this reason, pluggable protocol handlers should assume that any parameters on the command line could come from malicious parties, and carefully validate them. Applications that could initiate dangerous actions based on external data must first confirm those actions with the user. In addition, handling applications should be tested with URIs that are overly long or contain unexpected (or undesirable) character sequences. Indeed it's trivial to pass a command to qutebrowser this way - given how trivial the exploit is to recreate given the information above, here's a PoC: https:x" ":spawn calc (or qutebrowserurl: instead of https: if qutebrowser isn't registered as a default browser) Some applications do escape the quote characters before calling qutebrowser - but others, like Outlook Desktop or .url files, do not. As a fix, we add an --untrusted-args flag and some early validation of the raw sys.argv, before parsing any arguments or e.g. creating a QApplication (which might already allow injecting Qt flags there). We assume that there's no way for an attacker to inject flags *before* the %1 placeholder in the registry, and add --untrusted-args as the last argument of the registry entry. This way, it'd still be possible for users to customize their invocation flags without having to remove --untrusted-args. After --untrusted-args, however, we have some rather strict checks: - There should be zero or one arguments, but not two (or more) - Any argument may not start with - (flag) or : (qutebrowser command) We also add the --untrusted-args flag to the Linux .desktop file, though it should not be needed there, as the specification there is sane: https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#exec-variables Implementations must take care not to expand field codes into multiple arguments unless explicitly instructed by this specification. This means that name fields, filenames and other replacements that can contain spaces must be passed as a single argument to the executable program after expansion. There is no comparable mechanism on macOS, which opens the application without arguments and then sends an "open" event to it: https://doc.qt.io/qt-5/qfileopenevent.html This issue was introduced in qutebrowser v1.7.0 which started registering it as URL handler: baee2888907b260881d5831c68500941937261a0 / #4086 This is by no means an issue isolated to qutebrowser. Many other projects have had similar trouble with Windows' rather unexpected behavior: Electron / Exodus Bitcoin wallet: - http://web.archive.org/web/20190702112128/https://medium.com/0xcc/electrons-bug-shellexecute-to-blame-cacb433d0d62 - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1000006 - https://medium.com/hackernoon/exploiting-electron-rce-in-exodus-wallet-d9e6db13c374 IE/Firefox: - https://bugzilla.mozilla.org/show_bug.cgi?id=384384 - https://bugzilla.mozilla.org/show_bug.cgi?id=1572838 Others: - http://web.archive.org/web/20210930203632/https://www.vdoo.com/blog/exploiting-custom-protocol-handlers-in-windows - https://parsiya.net/blog/2021-03-17-attack-surface-analysis-part-2-custom-protocol-handlers/ - etc. etc. See CVE-2021-41146 / GHSA-vw27-fwjf-5qxm: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41146 https://github.com/qutebrowser/qutebrowser/security/advisories/GHSA-vw27-fwjf-5qxm Thanks to Ping Fan (Zetta) Ke of Valkyrie-X Security Research Group (VXRL/@vxresearch) for finding and responsibly disclosing this issue. (cherry picked from commit 8f46ba3f6dc7b18375f7aa63c48a1fe461190430)
2021-11-26Revert "try to upgrade pip"Florian Bruhin
This reverts commit 0741e56289838f59d9687e17be07f9aeb8461849.
2021-11-26try to upgrade pipFlorian Bruhin
2021-11-26PyQt6 again for -pyqtFlorian Bruhin
2021-11-26Update requirements from masterFlorian Bruhin
2021-11-26Upgrade pyinstaller from masterFlorian Bruhin
2021-11-26requirements: Use proper Qt6 for PyInstallerFlorian Bruhin
2021-11-22PyQt 6.2.1Florian Bruhin
2021-11-09Update requirements for Qt 6Florian Bruhin
2021-10-04requirements: Fix stub package nameFlorian Bruhin
2021-10-04requirements: Add PyQt 6.2Florian Bruhin
2021-08-26Blanket PyQt5 -> PyQt6Florian Bruhin
2021-08-23Update dependenciesqutebrowser bot
2021-08-21Merge remote-tracking branch 'origin/pr/6633'Florian Bruhin
2021-08-21Merge remote-tracking branch 'origin/pr/6634'Florian Bruhin
2021-08-18Optionally provide unfiltered selection of secretsAndré Keller
Add an option to show all secrets, whether they match the current url or not.
2021-08-16Update dependenciesqutebrowser bot
2021-08-03Optionally ask for confirmation before inserting a passwordAndré Keller
The default behaviour of qute-pass userscript will insert a password automatically if there is only a single candidate found. This option will force the selection prompt (i.e. dmenu) to show regardless of how many password candidates are found.
2021-08-02Update dependenciesqutebrowser bot
2021-07-28Release v2.3.1Florian Bruhin
2021-07-26Update dependenciesqutebrowser bot
2021-07-19Update dependenciesqutebrowser bot
2021-07-13Made implementation simpler, removed unrelated changeJason Rosenzweig
2021-07-13Initial commit of fix for issue 6549Jason Rosenzweig
2021-07-13qute-keepass: Add missing exitFlorian Bruhin
Closes #6592
2021-07-12Update dependenciesqutebrowser bot
2021-07-06Merge pull request #6582 from qutebrowser/update-dependenciesFlorian Bruhin
Update dependencies
2021-07-06doc: Add userscript repo linkFlorian Bruhin
2021-07-05Update dependenciesqutebrowser bot
2021-06-28Merge remote-tracking branch 'origin/pr/6574'Florian Bruhin
2021-06-28Release v2.3.0v2.3.0Florian Bruhin
2021-06-28Update dependenciesqutebrowser bot
2021-06-21doc: Add untrack-urlFlorian Bruhin
See #6555
2021-06-21Update dependenciesqutebrowser bot
2021-06-14Add new types packages for mypyFlorian Bruhin
See http://mypy-lang.blogspot.com/2021/05/the-upcoming-switch-to-modular-typeshed.html
2021-06-14Update dependenciesqutebrowser bot
2021-06-07Update dependenciesqutebrowser bot
2021-06-04Update README.mdSidharth Arya
2021-06-04Update README.mdSidharth Arya
2021-06-02Merge pull request #6490 from rien333/patch-1Florian Bruhin
[readability-js] Add reference to AUR package
2021-06-01Release v2.2.3Florian Bruhin
2021-06-01Windows Uninstaller: Fix silent uninstall (again)bitraid
2021-06-01Merge remote-tracking branch 'origin/pr/6498'Florian Bruhin
2021-05-31Windows Installer: Allow elevation when silentbitraid
2021-05-31Update dependenciesqutebrowser bot
2021-05-30Add reference to AUR packageRijnder Wever
I just added the readability package to the [AUR](https://aur.archlinux.org/packages/nodejs-readability-git/). Not much of a difference from using npm directly, but, personally, (i) I prefer to manage all my (important) packages using yay, and (ii) like to perform all system upgrades from one place (i.e. yay --devel).
2021-05-26Merge remote-tracking branch 'origin/pr/6477'Florian Bruhin
2021-05-26RIP FreenodeFlorian Bruhin
2021-05-25Windows Installer: Update minimum OS versionbitraid
2021-05-24Update dependenciesqutebrowser bot