Slashdot Mirror


Reddit Javascript Exploit Spreading Virally

Nithendil writes "guyhersh from reddit.com describes the situation (warning: title NSFW): Based on what I've seen today, here's what went down. Reddit user Empirical wrote javascript code where if you copied and pasted it into the address bar, you would instantly spam that comment by replying to all the comments on the page and submitting it. Later xssfinder posted a proof of concept where if you hovered over a link, it would automatically run a Javascript. He then got the brilliant idea to combine the two scripts together, tested it and it spread from there."

34 of 239 comments (clear)

  1. proof of concept by yincrash · · Score: 2, Insightful

    seriously. using the 'onhover' event is considered inventive enough to call it a proof of concept?

    1. Re:proof of concept by MathFox · · Score: 2, Insightful
      It is just a reminder to programmers of public forum software how important input sanitation is.

      Apparently the damage was limited to only one site... But similar hacks could be done on other vulnerable sites.

      --
      extern warranty;
      main()
      {
      (void)warranty;
      }
  2. NoScript by corychristison · · Score: 4, Insightful

    "NoScript FTW!" comments commencing in 3... 2... 1...

    I skimmed the FAQ on the first link, and it seems reddit is responsible for not scrubbing input.

    Next!

    1. Re:NoScript by RiotingPacifist · · Score: 4, Insightful

      Cue me reposting my views on noscript being a pretty crappy tool for modern web security then.

      NoScript comes from a broken way of thinking, "you can identify attacking sites and trusted sites", the attack code for this was coming from reddit.com (a site you have to allow in order to use reddit). The only way this sort of bug can be protected against is by use of javascript filtering tools such as controldescripts that filter javascript request by type and domain, with such a tool it would be possible to protect yourself much more effectively.

      mouseclick is submitting info -> allow
      mouseover is requesting data -> allow
      mouseover is submitting data -> request user confirmation
      javascript function is doing something weird -> request user confirmation
      javascript is trying to use a known exploit* -> deny and notify user (as a workaround for 0-days simply blocking the bad JS calls will protect users much faster than browsers usually get patched) ...etc

      You could also combine this with domain checking to have lists of pages where you allow
      *no-js (untrusted),
      *simple-JS (google, youtube, etc) but [it might allow functionality but could prevent tracking],
      *complex-js (facebook, etc) [all the ajax stuff means simple-JS wouldn't work]
      *all-JS (fancynewsite.com) [even the complex list of functions you allow just isn't enough]

      Such tools could also help the paranoid among us use website that require JS, by disabling mousetracking and sending of data on non-click actions.

      As long as people stick to the broken thinking of trusted/untrusted domains, there is little chance of this actually happening. The worst thing about noscript is that for an unkown site you often have to allow JS on it to see what it looks like, so unless you plan on only browsing sites you've already been to and those that don't use javascript, it is completely useless yet its users claim, nay genuinely think they are more secure!

      --
      IranAir Flight 655 never forget!
    2. Re:NoScript by 0123456 · · Score: 2, Insightful

      The worst thing about noscript is that for an unkown site you often have to allow JS on it to see what it looks like, so unless you plan on only browsing sites you've already been to and those that don't use javascript, it is completely useless yet its users claim, nay genuinely think they are more secure!

      If I go to an unknown site and it doesn't display anything useful without JS then I generally go somewhere else; if the developers are so inept that they can't make their site do something useful without it then the site is probably a heap of steaming monkey poo or a malware distributor.

      Back in the real world, it's hard to see how allowing arbitrary JS to run on your system can be considered 'more secure' than only running it from sites you trust. This 'exploit' is nothing to do with insecurity, it's to do with crap programming on a trusted site.

      The mere fact that we need such protection goes to show what a heap of steaming monkey poo JS is.

  3. Re:Is this good news or bad? by pla · · Score: 5, Insightful

    it will hopefully educate webmasters to stop programming their sites in a way that requires javascript even for basic functionality.

    *cough*Slashdot*cough*

  4. Re:Is this good news or bad? by Anonymous Coward · · Score: 5, Insightful

    No, it won't. The other 6 million javascript exploits didn't do that. What makes you think this one will?

  5. Re:Well, that site has a terrible design by Trahald · · Score: 2, Insightful

    I'm a long time slashdotter and now spend equal time on reddit. What draws me to reddit is the spartan interface. Of course, the content on reddit is halfway between slashdot's and digg's, so I (unfortunately) have to keep coming back.

  6. Re:Is this good news or bad? by SanityInAnarchy · · Score: 5, Insightful

    Just as exploits in the image processing components of web browsers will hopefully educate people to surf in Lynx? Or exploits in their HTML rendering will hopefully educate people to surf by piping wget through less?

    This was not because of Javascript, nor is Javascript going away because of this.

    --
    Don't thank God, thank a doctor!
  7. Re:Is this good news or bad? by Anonymous Coward · · Score: 2, Insightful

    Indeed, it will educate people to surf with javascript turned off, and it will hopefully educate webmasters to stop programming their sites in a way that requires javascript even for basic functionality.

    Anyone who believes this has simply never written a web application. Javascript and cookies are absolutely essential to any web programmer who wishes have any type of dynamic content on a page. It annoys me to no end when someone says the solution to security holes is to turn these features off. The solution is for programmers to stop being idiots and write secure code, both in web applications and in the browsers themselves.

  8. Re:Well, that site has a terrible design by jmnugent · · Score: 2, Insightful

    Over the years I've also spent quite a bit of time on social sites like Slashdot, Fark, Metafilter, Digg,etc.... but now spend the majority of my time on Reddit. I actually like the design (its simple, efficient and useful). But the beauty of Reddit is the organized structure of the sub-reddits. If I'm short for time, i can just quickly browse the frontpage. If I have more time, I can browse my favorite sub-reddits where people know me. The commenting system is easy on the eyes and easy to follow. and the userbase is a nice balance of attitudes.

  9. A Good Idea by CopaceticOpus · · Score: 5, Insightful

    Hey, everyone, there is a javascript exploit on Reddit! Click on these links to Reddit to learn more.

    Incidentally, this old sock smells awful. You should smell it.

  10. Re:Is this good news or bad? by Anonymous Coward · · Score: 1, Insightful

    Anyone who believes this has simply never written a web application. Javascript and cookies are absolutely essential to any web programmer who wishes have any type of dynamic content on a page. It annoys me to no end when someone says the solution to security holes is to turn these features off.

    Wrong. We're not ignorant, we just think that "dynamic content" isn't important or useful.

  11. Re:Is this good news or bad? by Anonymous Coward · · Score: 5, Insightful

    As a web developer, I beg to differ. There is absolutely no excuse for writing a page that doesn't 'fail gracefully' when javascript isn't present. Let's face it, for every reputable page out there (att.net, youtube.com, etc) there are a hundred others designed by average joe-schmo webprogrammers. And lord only knows if they designed their page securely, and lord only knows if someone has hacked them and injected malicious scripts. I seem to recall hearing a few weeks ago that the majority of malicious scripts were being put into hollywood celebrity gossip sites that people were hitting off their google searches.

    For me, the solution is to just whitelist the sites I visit frequently, only allowing scripts/cookies when I know they can be trusted. I'm not saying that you shouldn't design without javascript, but I am saying that you shouldn't assume that everyone visiting your page is going to have it. Besides, how hard is it to write a page that vomits up its contents in a readable form when the javascript doesn't run to position all the css objects? It doesn't have to look pretty, but it should be usable.

  12. Re:Is this good news or bad? by ultranova · · Score: 4, Insightful

    Just as exploits in the image processing components of web browsers will hopefully educate people to surf in Lynx? Or exploits in their HTML rendering will hopefully educate people to surf by piping wget through less?

    There's a huge difference in complexity between image/HTML renderer and Javascript. Image file formats and HTML pages are not Turing complete, while Javascript is. Consequently, the former are "safe" in that it's possible to prove that a particular implementation is free of exploits that would allow running arbitrary code, while Javascript by definition can never be; the whole point of Javascript is to allow arbitrary code execution, so the best you could ever prove is that the code never leaves the confines of the Web browser - but having a script post comments does not require that.

    This was not because of Javascript, nor is Javascript going away because of this.

    Yes, this was because of Javascript, but no, sadly it won't be going away.

    --

    Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

  13. Re:Is this good news or bad? by aardvarkjoe · · Score: 4, Insightful

    The solution is for programmers to stop being idiots

    Any proposal that relies on any group of people to not be idiots is doomed to failure.

    --

    How can we continue to believe in a just universe and freedom to eat crackers if we have no ale?
  14. html tag to disable active content by TheLink · · Score: 4, Insightful

    Years ago I actually proposed to the W3C and the mozilla bunch to add a tag to disable dynamic stuff like javascript.

    Basically it would work something like this:

    <shield lock="some_random_hard_to_guess_string_here" enabled="basic_html_only">
    The browser will only recognize basic HTML stuff here, it won't recognize javascript or any _future_ dynamic stuff that the W3C or browser people think off
    </shield unlock="some_random_hard_to_guess_string_here">

    The some_random_hard_to_guess_string_here would be different for each page.

    The idea is while the website should still have filters, even if in the future the W3C or browser wiseguys create some new fangled way of inserting javascript or some other dynamic content that the filters do not protect against (since it's new and the filters have not been updated), the browser will just ignore the new stuff that some hacker inserts when it's between the tags.

    To me the current state of things is a bit crazy - basically it's like having a car with 1000 gas pedals (tags) and to stop the car you have to make sure all 1000 pedals are not pressed (escaped or filtered). There is not a single brake pedal! And worse, the W3C or MS or Mozilla or whoever could introduce a new gas pedal, and you the website operator have to filter out the new gas pedal when it's introduced.

    With something like this tag there is a brake pedal, so even if you don't manage to filter out all the 1000 gas pedals, the brake helps to keep stuff safe.

    If they had implemented such a tag, the google and myspace worms would not have worked for so many browsers.

    FWIW, these sort of worms are not new. I managed to find a hole in advogato some years ago (iframe worm) - and hence my suggestion to the W3C and Mozilla.

    But it seems to me than NONE of them are really interested in improving security. They're all just interested in inventing new gas pedals for people (and hackers) to step on. They're not even interested in creating a single brake pedal. They just pay lip service to security.

    See the thing is - it's not too difficult to code a browser to go "OK from now on there's no such thing as javascript till I see a valid unlock tag", so even if there is a browser parsing bug and a hacker manages to insert javascript via a stupid browser bug (that the website filters naturally do not and cannot cater for) it does NOT matter - since javascript will be disabled - between those tags the browser will be respecting the flag that says "I do not know javascript, java and all that fancy stuff" - it does not even have to parse javascript - since for all intents and purposes between those tags, the browser does not know there's such a thing as javascript (or activex or flash etc).

    This is very useful for sites that have to include 3rd party content - sites like slashdot or webmail sites or even sites that serve up ads from 3rd parties.

    --
    1. Re:html tag to disable active content by Timmmm · · Score: 4, Insightful

      Well that's an overly complicated and... well *wrong* way to do it. The correct solution is:

      1. Escape all <'s and >'s and &'s in the input.
      2. Interpret BB-code to add links & basic formatting.

      Simple.

    2. Re:html tag to disable active content by TheLink · · Score: 2, Insightful

      That's all very nice and simple till stuff like UTF8, UTF7, etc get involved...

      See:
      http://nedbatchelder.com/blog/200704/xss_with_utf7.html
      http://www.securityfocus.com/bid/31183/discuss
      http://ha.ckers.org/blog/20060817/variable-width-encoding/

      You don't have to believe me when I tell you there are 1000 (or more) gas pedals and no brake pedal and it's a crazy situation. But that's the truth as I see it.

      I daresay many of the website folks who have been burnt before will believe me. Yes you can and SHOULD use the escaping libraries out there, but you'd still be screwed the day some hacker discovers a way to exploit a browser bug or new "feature" or even an ambiguity in standards[1] that causes the browser to see things differently from what the library handles.

      My memory isn't so good but I think there was even a case where a browser treated some unicode characters as "" for some reason with exploitable results.

      [1] Both the browser and library could be "right" but that's no comfort to your exploited users and you.

      --
    3. Re:html tag to disable active content by AusIV · · Score: 3, Insightful
      Reddit does escape all of those symbols, and they use Markdown for adding links. Still, they managed to get owned by an obscure vulnerability that was discovered only because their code is open source.

      And that's the point TheLink was trying to make. It would be far simpler to tell the browser not to accept javascript in a certain block of code than it is to explore all the possible exploits that could be leveraged against your alternative markup language. There are hundreds if not thousands of places you can make mistakes, and it could be remedied by a single mechanism that prevented javascript from existing in certain blocks of code.

  15. Re:Is this good news or bad? by ultranova · · Score: 3, Insightful

    Anyone who believes this has simply never written a web application. Javascript and cookies are absolutely essential to any web programmer who wishes have any type of dynamic content on a page.

    So by advising people to disable Javascript, I'm doing my part for killing off "Web Applications" and getting us back to good old Web Pages. Excellent.

    Seriously, why would I want "dynamic content" when all that really means is a thousand pauses as more data is fetched? Give me static pages whenever possible. Better yet, give me a single large static page rather than a dozen small pages, so I don't have to wait while the next page is being loaded and rendered.

    The solution is for programmers to stop being idiots and write secure code, both in web applications and in the browsers themselves.

    The solution is to understand that most web sites are not applications, from the users point of view, and stop stuffing them full of scripts that do nothing but slow things down.

    --

    Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

  16. Re:Is this good news or bad? by not+already+in+use · · Score: 3, Insightful

    It's 2009. We should be able to use the internet the way it is intended, with javascript. Javascript isn't the problem, poor programming on reddit's behalf is the problem.

    --
    Similes are like metaphors
  17. Re:Is this good news or bad? by Idiomatick · · Score: 4, Insightful

    This isn't a lesson about javascript. It is a lesson we should have learned from Bobby Tables a long time ago. This shouldn't have been possible regardless of javascript.

    For those not in the know: http://xkcd.com/327/

  18. Re:Is this good news or bad? by lysergic.acid · · Score: 2, Insightful

    What exactly does being Turing complete have to do with it? If a scripting language weren't turing complete, but had direct read/write access to your file system, would it be any safer than JS?

    The problem with Reddit isn't JavaScript but rather their markdown implementation. And the security threat here isn't to the user whose system is running the JS, but instead to the Reddit site. If you're using an up-to-date & secure browser, there's typically minimal risk to enabling JavaScript. That JavaScript can sometimes be used to do mischievous things is a reason why site owners should not recklessly allow JavaScript to be posted by untrusted users—just as you wouldn't want to allow unfiltered HTML code to be posted by untrusted users.

    If someone posts a link on a Slashdot, and that link eventually gets Slashdotted, then does that mean hyperlinks are inherently unsafe and need to be disabled, or just that some common sense precautions need to be taken when using them?

  19. Re:Reddit Hacks by Chris+Pimlott · · Score: 4, Insightful

    This is not a weakness or an exploit, it's simply a javascript bookmarklet. You could make something like this for any site, such as Slashdot.

    It's only an exploit if you can force other people to run that code without their consent.

  20. In a word: Crap. by Anonymous Coward · · Score: 1, Insightful

    If your security model is built on everyone else playing nice, you're fucked.

    The problem here is in the browser allowing the hijack.

    1. Re:In a word: Crap. by HeronBlademaster · · Score: 2, Insightful

      If your security model is built on everyone else playing nice, you're fucked.

      The problem here is in the browser allowing the hijack.

      It's not the browser here that's assuming everyone else is playing nice. It's Reddit's site. How were you modded insightful? You're just wrong.

      I agree with your sentiment (that you shouldn't assume everyone else is playing nice) but blaming Reddit's problems on browsers misbehaving is like blaming potholes on cars. Sure, nobody crashes if nobody's driving, but potholes are usually caused by ice breaking up the asphalt, not by drivers driving on roads.

      Let's place blame where blame is due, ok? It's not the browser's job to police what content can be posted to websites, it's the website's job.

  21. Re:Is this good news or bad? by jbezorg · · Score: 3, Insightful

    Yes, this was because of Javascript, but no, sadly it won't be going away.

    So, all bots that crawl forums to spam them are Javascript? Honestly, if Javascript could do this, I wonder what a more complex bot could have done. Are we all going to lament about the programming language that some forum bot was written in? C? Python?

    "Yes, this was because of C, but no, sadly it won't be going away."

    Can't see why people get such a hardon bashing Javascript. "Because it's not a real programming language!"? I guess it's the same mentality that leads people to bash PHP, Perl, Ruby, ASP, etc. etc.

    I look at it this way. Javascript is a tool and bad programming is bad programming and sadly, bad programming won't be going away.

    --
    I've lost all my marbles except one & It's fun to test angular & centripetal acceleration in my skull
  22. Re:Is this good news or bad? by Just+Some+Guy · · Score: 1, Insightful

    Image file formats and HTML pages are not Turing complete

    Hey, ultranova! I'd like you to meet my friend, PostScript.

    Consequently, the former are "safe" in that it's possible to prove that a particular implementation is free of exploits that would allow running arbitrary code,

    Mr. Hofstadter has the most interesting record player...

    I know what you mean on a non-literal level, but you have some interesting definitions of "safe" and "prove" that don't match well with computer science.

    --
    Dewey, what part of this looks like authorities should be involved?
  23. Re:Is this good news or bad? by spike2131 · · Score: 3, Insightful

    There is absolutely no excuse for writing a page that doesn't 'fail gracefully' when javascript isn't present.

    Yes there is. Making your page fail gracefully takes extra time and resources, which could be put to better use than supporting the 1% of users who choose to handicap their browsers by turning off javascript.

    Failing gracefully is an important concern, but its not the only concern, and should be balanced against other priorities.

    --
    SpyDock: Scientific Python in a Docker container
  24. Re:NSFW? by Neoncow · · Score: 2, Insightful

    And if you did have a braindead tripwire like that, it would have jumped on the fact that fuck is in the url in the summary.

  25. Re:Is this good news or bad? by psydeshow · · Score: 2, Insightful

    The idea is to build the page in fail-state first, and then use JavaScript to enhance it. Or in other words, build your DOM and then restyle, add event listeners, etc.

    It doesn't take extra time, and it's a great technique for future-proofing your pages. It also makes them accessible to people who, for whatever reason, can't take advantage of teh javascript. If your website is in the US, and is big enough for anyone to care, ADA compliance pretty much requires it.

  26. You have a narrow view of the problem. by pavon · · Score: 2, Insightful

    There are many situations other than forum posting where it is desirable to include third-party content in your site. Advertisements are the first thing that jump to mind, but web widgets are also becoming popular. Having some browser markup that will limit what the third-party code can do would enable this to be done safely, without having to trust the third party or load and filter third-party content server-side.

  27. Re:Is this good news or bad? by Jah-Wren+Ryel · · Score: 2, Insightful

    The problem with Reddit isn't JavaScript but rather their markdown implementation. And the security threat here isn't to the user whose system is running the JS, but instead to the Reddit site.

    Yes that's what makes this case special. Most javascript security problems are externalities to the websites that over-use javascript - they don't normally suffer the consequences of enabling javascript in the browser - the users do. This time the website is paying the price for their poor decisions. Finally the gander is getting goosed.

    If you're using an up-to-date & secure browser, there's typically minimal risk to enabling JavaScript. That JavaScript can sometimes be used to do mischievous things...

    No. Javascript vulnerabilities come in two flavors - exploited bugs and deliberate abuses. All of the web-tracking systems enhance their tracking of people via javascript, simply blocking cookies from 3rd party sites hasn't been sufficient to protect users from such deliberate abuses for many years now. Then there are the increasingly more common zero-day exploits that are installed via other vulnerabilities in a web-server that no amount of "regular updates" will protect users from.

    There is a reason NoScript is the #2 most popular firefox plugin with over 54 million downloads - that reason is because javascript is a huge vulnerability, people know it and are trying to do something about it.

    --
    When information is power, privacy is freedom.