Settings

Theme

Scastie: use any Scala compiler and Scala library in the browser

scala-lang.org

170 points by heathermiller 9 years ago · 33 comments

Reader

atemerev 9 years ago

(naturally, the very first thing I tried to evaluate is scala.io.Source.fromFile("/etc/passwd").getLines.mkString("\n") . Spoiler alert: it works!)

  • masgui 9 years ago

    It does and you are root. You are evaluating inside a docker container. It's not a bulletproof method but it will stop a few. The instances evaluating your code is also on a network not accessible from the internet. I'm not an expert in security, if you have any advice on how we can improve our defence please tell us.

    • atemerev 9 years ago

      I am not a pentesting expert. My first reaction is to leave everything as is, as it is a very cool to play with root access to docker containers (I managed to reboot one, but a new one immediately appeared on page reload).

      My worst concern now would be network security. With root access, it is trivial to e.g. install spambots in all your containers (just checked, command execution works, and external network access is enabled). I think it is a good idea to at least disable networking. (Update: and use a minimal Docker image like Alpine Linux).

      Proof:

      [__REDACTED__]

      • opportune 9 years ago

        I agree with this. What's to stop me from opening a bunch of the containers and using them to DDOS someone or to send out spam emails? I'm already playing around with system commands and they seem to be entirely unrestricted.

        Basically I can run any bash script, as is, with

            import sys.process._
            "BASH_COMMAND" !!
        
        And I seem to be able to at least cause the containers to endlessly restart quite simply.
      • masgui 9 years ago

        Yeah disabling networking was an idea. I prefer to leave it open so you can try http client/libraries that access the web. To limit spam, if it becomes an issue we could throttle the connection.

    • clhodapp 9 years ago

      The general rule is that you want as many layers of security as you can get away with without making things impractically inconvenient. In this case, the first step is probably not letting the user's code run as root in the container. Gaining container-root is going to be the first step in many, many exploits and by letting code just run that way, you are giving a potential attacker that step for free.

      Disclaimer: Absolutely not a security expert, just someone who is somewhat on the hook for security!

    • wsargent 9 years ago

      I put together a list of security tips:

      https://github.com/wsargent/docker-cheat-sheet#security-tips

      Probably the biggest one is to use Virtualbox or another virtual machine so that Docker isn't your only line of defence.

    • ronjouch 9 years ago

      Thumbs up for the honest upfront response!

      Maybe Jessica McKellar's "Building and Breaking a Python Sandbox" talk can bring some ideas. (But maybe not! It might be too Python-specific or too language-level whereas you want to remain at a higher level with just Docker)

      Video: https://www.youtube.com/watch?v=sL_syMmRkoU

      Slides: https://speakerdeck.com/pycon2014/building-and-breaking-a-py...

    • eranation 9 years ago

      Congrats Guillaume! How much of ScalaKata code is in there? Sorry if I missed it in the post, but is Scastie open source? I'd love to finally fix scalatutorials.com :) p.s. did you guys consider using a "serverless" architecture to isolate runners instead of docker? Also, are you running it with java -Djava.security.manager? If not then why?

    • j_s 9 years ago

      I recommend to at least wrap all the containers in a VM between the docker containers and your server-side orchestration code.

      SELinux also helps, from what I've read.

      https://news.ycombinator.com/item?id=14245428

  • monksy 9 years ago

    /etc/shadow works as well :S But there are not encrypted bits in it.

atemerev 9 years ago

Hi Heather!

Looks like you've got a Hacker News effect on your shoulders. :) Servers seem to be overloaded.

drewda 9 years ago

Seems like the Scala and SBT equivalent of https://npm.runkit.com/ (which allows in-browser use of Node and NPM packages)

mark_l_watson 9 years ago

This looks cool, I just experimented with it. I am curious: what is the business model for this? Server costs are probably fairly expensive.

stephen123 9 years ago

Its great to see so much good stuff going on in Scala land!

wiradikusuma 9 years ago

I'm a Scala developer but I don't understand what is Scastie. How does it benefit from the perspective of developers like me?

hayd 9 years ago

Will this allow running a play app? (with debug etc) ??

freekh 9 years ago

This looks so cool!!! Can't wait to try it out!

aghll0ihph2bbe8 9 years ago

How am I supposed to dismiss this modal window? http://i.imgur.com/atx6KsX.png

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection