summaryrefslogtreecommitdiff
path: root/tests
AgeCommit message (Collapse)Author
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)
2021-07-28Revert "Fix enum stringification for Python 3.10 a7+"Florian Bruhin
This reverts commit e2c5fe6262564d9d85806bfa9d4486a411cf5045. See https://mail.python.org/archives/list/python-dev@python.org/thread/ZMC67QA2JVQJSWSFWRS6IM6ZX4EK277G/#LSTMFAPSPD3BGZ4D6HQFODXZVB3PLYKF (cherry picked from commit 204721836133485efb1acba6d2795193788f9eda)
2021-07-28Handle and test more file path corner casesFlorian Bruhin
(cherry picked from commit 676c9db2fe9833e52b12f723c3ed62a38759f82d)
2021-06-28Adjust exception handling for adblock 0.5.0Florian Bruhin
See https://github.com/ArniDagur/python-adblock/issues/44 (cherry picked from commit 6dd402c0d0f7665d32a74c43c5b4cf5dc8aff28d)
2021-06-24tests: Ignore another Chromium messageFlorian Bruhin
2021-06-24More history test stabilizationFlorian Bruhin
2021-06-24Merge remote-tracking branch 'origin/pr/6372'Florian Bruhin
2021-06-15tests: Speculatively stabilize history testsFlorian Bruhin
If we're not waiting for the async INSERT in the SQL database, it can happen that :debug-dump-history gets called before the history entry was addeded to the actual database. See #5390
2021-06-13Merge remote-tracking branch 'origin/master' into 4nd3r/hostblock_subdomainsAnder Punnar
2021-06-11Greasemonkey: Make sure script names are uniqueFlorian Bruhin
Fixes #6353
2021-06-09Fix prefers_reduced_motion on WindowsFlorian Bruhin
See #6530
2021-06-09Add content.prefers_reduced_motionFlorian Bruhin
Closes #6530
2021-06-07tests: Fix flakiness in test_invocations.pyFlorian Bruhin
We don't need to check the log inside the test, as the quteproc fixture does that for us anyways. Also, looks like a new harmless message turned up.
2021-06-01Merge remote-tracking branch 'origin/master' into 4nd3r/hostblock_subdomainsAnder Punnar
2021-06-01Make dark mode tests work correctly on ARM/aarch64Florian Bruhin
Fixes #6489
2021-05-30Handle un-encodable initial text for editorFlorian Bruhin
2021-05-30Validate encoding for header settingsFlorian Bruhin
Also needed to add encoding check support to FormatString.
2021-05-29tests: Update import path for pytestqt SignalBlockerFlorian Bruhin
2021-05-29tests: Fix test_system_default_rendering with Noto Sans MonoFlorian Bruhin
2021-05-28Fix tests/lintFlorian Bruhin
We need to set XDG_RUNTIME_DIR properly in the tests so that the log is empty.
2021-05-28log: Handle JSONLogger in change_console_formatterFlorian Bruhin
Fixes #6482
2021-05-26RIP FreenodeFlorian Bruhin
2021-05-20Merge remote-tracking branch 'origin/master' into 4nd3r/hostblock_subdomainsAnder Punnar
2021-05-13Fix tests without QtWebEngineFlorian Bruhin
2021-05-13Fix state config unit testsFlorian Bruhin
2021-05-13Merge remote-tracking branch 'origin/pr/6462'Florian Bruhin
2021-05-13Remove service workers based on QtWebEngine versionFlorian Bruhin
See https://bugreports.qt.io/browse/QTBUG-93744
2021-05-13Fix crash in cmd completion for set-cmd-text.Ryan Roden-Corrent
2c4bb064e introduced support for showing bindings in the completion menu for commands initiated with set-cmd-text. This would crash if given a binding for just 'set-cmd-text' with no args. Fixes #6453.
2021-05-05tests: Fix test_check_coverage with Python 3.10Florian Bruhin
2021-05-05tests: Avoid deprecated SSL protocol valueFlorian Bruhin
See https://docs.python.org/3.10/whatsnew/3.10.html#ssl
2021-05-05Clarify backend version stringFlorian Bruhin
2021-04-24Merge remote-tracking branch 'origin/master' into 4nd3r/hostblock_subdomainsAnder Punnar
2021-04-23Fix tests on WindowsFlorian Bruhin
2021-04-23Fix :spawn -u -oFlorian Bruhin
Fixes #6407
2021-04-15Add QUTE_QTWEBENGINE_VERSION_OVERRIDEFlorian Bruhin
See https://github.com/NixOS/nixpkgs/pull/119376#issuecomment-820073044
2021-04-15tests: Fix test_version with git's init.defaultBranchFlorian Bruhin
2021-04-15Fix up testFlorian Bruhin
2021-04-13Merge remote-tracking branch 'origin/master' into 4nd3r/hostblock_subdomainsAnder Punnar
2021-04-13Fix quirk testsFlorian Bruhin
2021-04-10Merge commit '9a836e2'Florian Bruhin
2021-04-09add subdomain blocking testAnder Punnar
2021-04-09Merge remote-tracking branch 'origin/master' into 4nd3r/hostblock_subdomainsAnder Punnar
2021-04-09notifications: Fix image padding assertionFlorian Bruhin
The underlying Chromium pads images so that scanlines align on 4-byte boundaries. Thus, with an image size of e.g. 239x239, we'll have 3 bytes of padding (239 mod 4 = 3; 240 mod 4 = 0). Fixes #6375
2021-04-09Remove confusing returnFlorian Bruhin
2021-04-09Added tests for StatusbarWidget.Nicholas Schwab
2021-04-09fix testAnder Punnar
2021-04-09make _widened_hostnames public, move to urlutilsAnder Punnar
2021-04-08Revert all prefix-related commits.Nicholas Schwab
This reverts commits 02a64630aa83e37e47a28a60366e1c65f0eba3ac to 4ff204aecc96d77209a18594a14da96af703c43f.
2021-04-08Added tests for get_valid_prefixes.Nicholas Schwab
2021-04-08Added tests for configtypes.PrefixOrString.Nicholas Schwab