ulauncher seems to listen at localhost tcp port 5054
tcp 127.0.0.1 5054 rlm-admin LISTEN . * * /sbin/python /usr/bin/ulauncher --hide-window
I'm running ulauncher in default configuration with no extra plugins or anything
What is the purpose of this ?
How can it be turned off ?
For contributors
It would be great if someone could create a branch with PoC where Unix sockets are used.
I wonder how big of the change that will be and if we have any issues with it.
What is the purpose of this ?
Ulauncher extensions run as separate processes and communicate with the main Ulauncher application by connecting to that port.
What is the purpose of this ?
Ulauncher extensions run as separate processes and communicate with the main Ulauncher application by connecting to that port.
Ok, thanks..
Process isolation is a good thing....
I haven't looked at the source - but unless there is some sort of security measures are taken... Then a nobody/guest account user on your local system could comminucate and act as your user through the ulauncher localhost socket...
Using a named pipe has the advantage of filesystem permissions. Any thoughts ?
Also if you are running as I am without any plugins it would be more secure if the listening socket only was active if any plugins was actually installed.
I have reviewed the code. This indeed is a vulnerability that can be exploited if:
I was considering Unix sockets in the beginning but I think found Websocket API way simpler with the variety of libraries in Python, so I chose it over the sockets.
Maybe it's worth switching to Unix sockets.
I've updated the title and the description with a note for contributors.
Hi uffejakobsen - if running ULauncher without any extensions, you can disable port 5054 opening by editing the following file with root permissions:
/usr/lib/python3/dist-packages/ulauncher/ui/windows/UlauncherWindow.py
And commenting out the following lines from around #112
ExtensionServer.get_instance().start()
time.sleep(0.01)
ExtensionRunner.get_instance().run_all()
if not get_options().no_extensions:
ExtensionDownloader.get_instance().download_missing()
Alternatively, manually disable the port opening with the "ulauncher --no-extensions" command line option, you can add on line 112:
if not get_options().no_extensions:
before the above paragraphs, and indent them once with tab.
Gornostal, for those not using extensions and wanting to harden their install, it might be nice to consider maybe including a separate command line option in future such as "--disable-extensions", which could close the port?
Gornostal, for those not using extensions and wanting to harden their install, it might be nice to consider maybe including a separate command line option in future such as "--disable-extensions", which could close the port?
I would personally vote :+1 for such a hardend solution
Most helpful comment
Ok, thanks..
Process isolation is a good thing....
I haven't looked at the source - but unless there is some sort of security measures are taken... Then a nobody/guest account user on your local system could comminucate and act as your user through the ulauncher localhost socket...
Using a named pipe has the advantage of filesystem permissions. Any thoughts ?
Also if you are running as I am without any plugins it would be more secure if the listening socket only was active if any plugins was actually installed.