Hi, > 1. Introduce an "untrusted" mode or flag in browser CLI tools for > opening external URLs > 2. Extend xdg-open to support passing this "untrusted" flag or context > to the browser > 3. Modify desktop environments or applications to invoke xdg-open with > the "untrusted" option when appropriate
As was said by Solar Designer, if a "safe" version is needed, it should probably be the default when going through URI scheme registrations. This is because, as you said, this kind of issue lies in the interaction between several components (URI sources, URI sinks and URI go-betweens such as xdg-open) and it would certainly be possible to find a way to bypass the behavior otherwise. For the sake of argument, we could mitigate right now with a wrapper script such as (http-open-wrapper.py): #!/usr/bin/python3 import sys from html import escape import os from tempfile import NamedTemporaryFile argv = sys.argv[1:] uri = argv[-1] if uri.startswith("http://") or uri.startswith("https://"): body = f'<a href="{escape(uri)}">Follow link</a>' body += '<script>document.querySelector("a").click()</script>'f = NamedTemporaryFile(delete=False, delete_on_close=False, suffix=".html", mode="wt")
f.write(body) f.flush() argv[-1] = f.name os.execvp(argv[0], argv) os._exit(255) with the caveat that you now have a dangling .html file hanging around. You would overwrite the existing MIME type registrations: [Desktop Entry] Comment= -Exec=/home/john/firefox/firefox +Exec=/home/john/http-open-wrapper.py /home/john/firefox/firefox Icon=/home/john/firefox/browser/chrome/icons/default/default128.png Name=Firefox NoDisplay=false Path= StartupNotify=true Terminal=false TerminalOptions= Type=Application StartupWMClass=firefox-nightly X-KDE-SubstituteUID=false X-KDE-Username= However this kind of "safer" URI opening would would break *many* legitimate use cases, right? This is exemplified by: ./http-open-wrapper.py https://setcookie.net/ wich does not receive SameSite=Strict cookies (as expected). Scenario: 1. you receive a legitimate email from a webapp with a link, https://myapp.example.com/foo; 2. you click on the link; 3. you opens "xdg-open --untrusted https://myapp.example.com/foo"; 4. this (somehow) triggers non-same-site navigation; 5. because you did not send the SameSite=Strict cookie, you appear to be logged out of the webapp; 6. because you are non-tech-savy, you are left wondering what is the issue. This assumes that the webapp is not completely well-behaved in regard to its cookie handling but this is the kind of webapp SameSite protections are intended to cater for. Regards, Gabriel
OpenPGP_signature.asc
Description: OpenPGP digital signature