summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-10-21Update docsv1.9.xFlorian Bruhin
2021-10-21CVE-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) # Conflicts: # qutebrowser/qutebrowser.py # tests/unit/test_qutebrowser.py
2020-05-02Add test for remembered ignored certificate errorsFlorian Bruhin
This is a continuation of the previous commit for #5403. The tests are split up from the commit itself so that the fix can be backported with less conflicts. See #5403 (cherry picked from commit 45a2be3f9f32f900c0b567998433d43055f722e2)
2020-05-02Security: Remember hosts with ignored cert errors for load statusFlorian Bruhin
Without this change, we only set a flag when a certificate error occurred. However, when the same certificate error then happens a second time (e.g. because of a reload or opening the same URL again), we then colored the URL as success_https (i.e. green) again. See #5403 (cherry picked from commit 021ab572a319ca3db5907a33a59774f502b3b975)
2020-01-08Release v1.9.0v1.9.0Florian Bruhin
2020-01-08Edit changelog for v1.9.0Florian Bruhin
2020-01-08Update user agent completionsFlorian Bruhin
2020-01-08Remove ua_fetch.pyFlorian Bruhin
The blog uses Cloudflare DDoS protection nowadays, and since we removed most UAs from the completion, doing updates by hand is feasible.
2020-01-05Handle yet another "too complex" sqlite errorFlorian Bruhin
2020-01-05Update sponsors FAQ for 2020Florian Bruhin
2020-01-04Run optipng on imagesFlorian Bruhin
2020-01-04Merge branch 'requires-io-master'Florian Bruhin
2020-01-04requirements: Add environment marker for typed_astFlorian Bruhin
2020-01-04Pin older jaraco.functools with Python 3.5Florian Bruhin
3.0.0 needs Python 3.6 or higher
2020-01-04requirements: Fix sip dependency for PyQt 5.11Florian Bruhin
Looks like PyQt 5.11 uses PyQt5-sip, so no need to have sip there. However, requires.io tries to upgrade it to PyQt5-sip 12.7.0 despite the wheel depending on < 4.20.
2020-01-04recompile_requirements: Ignore qutebrowser requirementFlorian Bruhin
2020-01-04recompile_requirements: Upgrade pipFlorian Bruhin
2020-01-04requirements: Blacklist hunter 3.1.0Florian Bruhin
Apparently, hunter 3.1.0 was accidentally tagged/pushed which causes requires.io to try to update to it, despite it not being available.
2020-01-04Recompile requirementsFlorian Bruhin
2020-01-04recompile_requirements: Use python3.7 for some environmentsFlorian Bruhin
Old PyQt versions need sip < 5 which doesn't work with Python 3.8. pylint doesn't install typed_ast with Python 3.8 (as the builtin ast module suffices).
2020-01-04recompile_requirements: Use python -m venvFlorian Bruhin
2020-01-04[requires.io] dependency updaterequires.io
2020-01-04Use Qt 5.14 API to set download filenameFlorian Bruhin
See #5013
2020-01-04Adjust copyrights for 2020Florian Bruhin
2019-12-31Clean up QtFont.to_pyFlorian Bruhin
2019-12-31Update _chromium_version commentFlorian Bruhin
[ci skip]
2019-12-31Drop support for macOS 10.12Florian Bruhin
Closes #5115
2019-12-31Appveyor: Upgrade to Qt 5.14Florian Bruhin
No remaining issues on Windows, IIRC.
2019-12-31Improve QtFont parsingFlorian Bruhin
This uses QtFont.setFamilies, similar to what QCssParser does in the commit where it was introduced: https://codereview.qt-project.org/c/qt/qtbase/+/240070 It also fixes a "font family too long" warning on Windows - see #5013
2019-12-31Fix changelogFlorian Bruhin
2019-12-30Fix :tab-give test and docsFlorian Bruhin
2019-12-30Also prevent :tab-give with tabs_are_windowsFlorian Bruhin
2019-12-30tests: Remove unnecessary fresh instanceFlorian Bruhin
2019-12-30Update changelogFlorian Bruhin
2019-12-30Merge remote-tracking branch 'origin/pr/5150'Florian Bruhin
2019-12-30config: Clean up migrations of YAML configFlorian Bruhin
2019-12-30Add more colors.contextmenu settingsFlorian Bruhin
2019-12-29Add a qt.force_platformtheme settingFlorian Bruhin
2019-12-29docs: Add another emacs-like configFlorian Bruhin
2019-12-28Remove unused importFlorian Bruhin
2019-12-28Merge pull request #5162 from jyscao/doc_stringsFlorian Bruhin
Use (slightly) clearer wording
2019-12-28Add missing )Florian Bruhin
...whoops :-/
2019-12-28Small cleanup in inspector codeFlorian Bruhin
2019-12-28Make sure images are always enabled for the inspectorFlorian Bruhin
Fixes #4517
2019-12-26Add config.stylesheet to check_coverageFlorian Bruhin
2019-12-26Use a Firefox UA for all accounts.google.com pagesFlorian Bruhin
Looks like at least for some users, /signin/... needs a Firefox UA to make the workaround work. Given that accounts.google.com only is used for things related to the sign-in form (settings live at myaccount.google.com), let's take a slightly bigger hammer and use a Firefox UA for the entire subdomain. See #5147, #4810
2019-12-26Fix ampersands in tab tooltipsFlorian Bruhin
This moves the setTabToolTip call to a better place - the previous update_tab_title call had various problems, such as replacing & by && (to avoid Qt interpreting it as a QShortcut accelerator) and exiting early if {current_title} isn't in the title format. None of those matter for the tab tooltip text, though.
2019-12-25Use (slightly) clearer wordingJethro Cao
2019-12-23Merge remote-tracking branch 'origin/pr/5139'Florian Bruhin
2019-12-23Update changelogFlorian Bruhin