Ulauncher: Consider using Unix sockets over Websockets for communicating with extensions

Created on 29 Oct 2019  路  6Comments  路  Source: Ulauncher/Ulauncher

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.

Linux Python bug contributor-friendly

Most helpful comment

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.

All 6 comments

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:

  • An attacker already has access to your PC and is able to create network connections to 127.0.0.1
  • You have at least 1 extension installed and the attacker knows ID/Name of that extension

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

Was this page helpful?
0 / 5 - 0 ratings

Related issues

frdrk picture frdrk  路  4Comments

sematula picture sematula  路  5Comments

andersfylling picture andersfylling  路  5Comments

uffejakobsen picture uffejakobsen  路  6Comments

sscarduzio picture sscarduzio  路  5Comments