top | item 1441914

You don’t need a password. Posterous fail.

160 points| prabodh | 16 years ago |blog.dustincurtis.com | reply

75 comments

order
[+] jcnnghm|16 years ago|reply
It's possible to forge headers in certain circumstances. It's not easy. And this is the first time this has happened.

It's ridiculously easy to forge email headers. Headers are manually created whenever programmatically sending email messages. That's how messages can be sent from addresses that don't exist, like [email protected] or [email protected]. They don't even send a confirmation email that you have to approve before stuff is posted?

[+] jcnnghm|16 years ago|reply
Headers are manually created whenever programmatically sending email messages

To clarify this a little, in case anyone isn't familiar, to send an email message programmatically, you basically just send a string with some headers and body content to the email server. Here are what the headers look like:

  Date: Sat, 13 Jun 2009 06:53:06 -0400
  From: Mail Delivery Subsystem <MAILER-DAEMON>
  Message-Id: <200906131053.n5DAr2Nv025105@jclinux>
  To: <root@jclinux>
To change the sender, all you'd need to do is change the from line. For example:

  From: Steve Jobs <[email protected]>
A default sendmail implementation will deliver that message all day. Email headers should never be used for authentication.
[+] edanm|16 years ago|reply
As I understand it, they send you a mail telling you about the post and letting you remove it. Not perfect, but probably works 99% of the time.
[+] dcurtis|16 years ago|reply
I updated the post to reflect reality.

Usually, Posterous catches this stuff and sends an email asking you to confirm that you really are you. They analyze the headers more closely than just looking at the name. For some reason, this didn't work in this case.

[+] borisk|16 years ago|reply
Headers are name/value pairs, a typical email will have 20 of those. It's possible to copy them if you have received an email from the blog owner or maybe from a mailing list post.
[+] ergo98|16 years ago|reply
I honestly am at a loss to understand how Dustin Curtis keeps getting linked from here.
[+] a4agarwal|16 years ago|reply
Hey guys. I'm the cofounder of Posterous.

Yes, someone did figure out how to post to Dustin's site today. This security hole is now fixed.

We had a specific problem with the way we dealt with SPF records. Dustin didn't set any up, and there was a specific way that Robin Duckett's email server responded that caused us to flag it as a false negative for spoofing.

For the vast majority of users who use gmail, hotmail or other services, this was never an issue.

Since our launch on day one, we have taken email spoof detection very seriously. It's one of our core differentiators: to be able to securely post to your blog by emailing a single, easy to remember address. We don't want to do secret addresses or secret words.

Over the past 2 years, we've developed robust spoof detection ip and spend a ton of time trying to stay a step ahead of hackers. Fortunately, we've only had a few very specific, isolated cases where one of our sites was spoofed and each time we have improved our system.

Thanks for bringing this to our attention. We always need to be one step ahead of the hackers/spoofers, and we thank the Hacker News community for keeping us on our toes!

[+] uhspot|15 years ago|reply
Hi,

Is it possible to publish the algorithms and technique you are using to prevent spoofing. It would really be a big help to us as well as every body else.

Thanks,

Al

[+] robinduckett|16 years ago|reply
I did it. Sorry Dustin. It really was me. I changed one field in outlook.

I realise Posterous requires you to "confirm" the post, I just wanted to see if you had defaulted that requirement to off.

[+] vinhboy|16 years ago|reply
I find it bizarre that it took this long for someone to do this...
[+] apphacker|16 years ago|reply
You realize you broke the law and admitted to it.
[+] michael_dorfman|16 years ago|reply
This is definitely happening in the wild, as well. A friend of mine had some spam advertising a mobile phone site posted to her Posterous, which fed into her Facebook feed, etc..
[+] xinsight|16 years ago|reply
It is easy.

  $ /usr/sbin/sendmail -f [email protected]  
  [email protected]
  Subject: hi
  
  Spam spam spam
  
  ^D
[+] robinduckett|16 years ago|reply
You have to know his email address.

One quick whois lookup, and I found the email he was likely sending from. His site has another email listed, so I did a little digging.

[+] travisp|16 years ago|reply
You don't even need to know the command line, you can often do stuff like that just from Outlook.
[+] rantfoil|16 years ago|reply
Actually that's not going to work. This sort of approach would definitely hit our spoof filters.
[+] josefresco|16 years ago|reply
Sure active users will notice spam posts but what about the long tail of customers who no longer update their Posterous blog? What happens when a 'creative' link marketer finds a way to index those sites and inject posts?
[+] pg|16 years ago|reply
Running a spam filter on posts should work well.
[+] codeflo|16 years ago|reply
While we're talking about Posterous, does anyone know why it adds a random number to the end of article URLs, as in http://blog.dustincurtis.com/apparently-765 ? I know it's not a big deal, but I find that aesthetically unpleasing, as it kind of ruins an otherwise beautiful URL.
[+] mitchellhislop|16 years ago|reply
It might be a namespace thing? I have seen that too, and that is the only thing that comes to mind.
[+] jrnkntl|16 years ago|reply
It is a namespace thing. I am pretty sure. When I use a title for my posterous posts that no one ever used before, the permalink is just the title. When I for example post something titled generally like "photo" it becomes "photo-73864"
[+] nate|16 years ago|reply
Why not let users use email certificates if they want? That's what I've got going on in Tgethr. Let users decide if extra trouble of setting up an email cert is worth it (it's not that bad), and now all of a sudden you have spam proof email discussion lists. We just check the message signature to make sure yep your message is signed as [email protected] or whatever and we'll accept the message.
[+] gommm|16 years ago|reply
What I'm surprised is why posterous doesn't do more check on all the headers sent by the email software (X-Mailer, and so on) and ask for a confirmation if those other headers are different enough from a known correct configuration...

Of course someone who received an email from the blog owner could use that to fake all those headers but at least it would prevent people posting by simply guessing the email address.

[+] rantfoil|16 years ago|reply
Oh, we do that. This was a specific bug that is now fixed.
[+] DanielRibeiro|16 years ago|reply
Strange that none noted that identity based encryption (IBE for the acquainted ones)solves this problem quite easily (more on http://www.voltage.com/technology/ibe.htm). Boneh and Franklin scheme was the first proposed one, but nowadays this is not only on crypto papers, but they are even RFCS for such schemes: http://www.rfc-editor.org/rfc/rfc5409.txt. There are even some non-commercial implementations around: http://crypto.stanford.edu/ibe/.

Of course, not using such full blown solutions will mean that posterous' heuristics techniques will be susceptible to all sorts of attacks, such as man-in-the-middle, relay attacks and so forth.

On the other hand, looking for solutions that are resilient to more sophisticated attacks, mostly considering IBE schemes, is quite convoluted (it involves provable security models, such as http://www.google.com/#hl=en&q=provable+security+signatu... ). There are even variations on IBE, such as certificateless, which require you to trust even less people.

This is of course, assuming you are not willing to inconvenience users by making them reply a email you send them after they tried to poste. Such email would contain a custom made url (the secret) that would enable the post to actually be posted. On the other hand, this solution feels more inconvenient than using OAuth methods.

Nonetheless, not all users care about security/privacy (those that do, will always have the usual login scheme). If you chose to go other way, good luck to you. After all, people still use MD5 for security applications nowadays.

[+] Terretta|16 years ago|reply
Two solutions:

1. Change from "Contributors can post" to "Anyone can post". Counterintuitive, but the first is based on email FROM, the second is moderated.

2. Make a hash as your FROM address. Add it as an alias to send from in Gmail (or whatever you use). Send to posterous from the hash address. Your email address becomes your password.

[+] graywh|16 years ago|reply
To add an additional outgoing address to Gmail, don't you have to verify that you can receive messages at that account first?
[+] nailer|16 years ago|reply
> "Contributors can post" ... is based on email FROM

Sounds somewhat mislabelled then.

[+] mike-cardwell|16 years ago|reply
You should be able to PGP sign your emails to confirm that they're good. If an unsigned email suddenly appears, a confirmation email should be sent back to the sender address before it is posted.
[+] ashishbharthi|16 years ago|reply
Twitter had similar issue in their Text -> Tweet system. People were using softwares to send Text messages and using anybody's phone number as they want. They fixed it by using 4 digit pin and I think Posterous should do the same.
[+] borisk|16 years ago|reply
Not so big a deal IMHO. You can always set a pass if spammers start targeting your blog.
[+] Terretta|16 years ago|reply
The password is for visiting, not for posting. If you set a password, nobody can visit your blog w/o the password.

http://posterous.com/help/private_sites

"You can set a password on your Posterous site so only the readers you want can see it. To see your site, a user must go to your site url and also enter the correct password for your site."

[+] d0m|16 years ago|reply
Oh my I feel bad, I started this in the other post' comments.
[+] tman|16 years ago|reply
Posterous really does fail here. I can see why they would want to tolerate a little of this to preserve ease of use for their users (just like Amazon with their Kindle email address). However, there are a number of steps that Posterous can take to combat forged headers in ways that should not impact users at all. Enabling SPF, for example, would be a good start.

Technically, it's the same problem as email spam, and most of the same tools can be used to combat it. Posterous should flag posts that they aren't sure of and make users confirm them before putting them up, etc.

EDIT:

The other fix would be to use an email address that can't be guessed from the blog address. In other words, the email address is the password.

[+] prakashk|16 years ago|reply
> The other fix would be to use an email address that can't be guessed from the blog address. In other words, the email address is the password.

Multiply (http://multiply.com) does something similar. You set your post-by-email id. And, then email your posts to the [email protected]. You decide how complicated or easy you want your post-by-email-id to be.

As someone said, this is not 100% secure as the email address is sent as clear text as it passes through mail servers, but it's more difficult for someone to guess it.

They do perform additional checks on the message sent to make sure it came from you, perhaps similar to those that Posterous does.

[+] axod|16 years ago|reply
> "The other fix would be to use an email address that can't be guessed from the blog address. In other words, the email address is the password."

You'd still be sending your password in the clear, possibly through other peoples mail servers. Not great security.