Intro
After reading this great post regarding the source of Dev.to, I got inspired.
In order to celebrate my 500th follower on here, I ...
For further actions, you may consider blocking this person and/or reporting abuse
Thanks for your awesome work. I promise we’ll keep upping the bug bounty program as we go, so keep up with the disclosures!
Is there a hackerone-style disclosure program?
Nice finding Antony,
For your information, the latest commit was still exploitable :) here is the poc to bypass the regex :
gist.github.com/n1nj4sec/9fc83e8bc... /../9fc83e8bc780e5c10739933ec3347460/raw/b46eef9822a00473f720680ed664873c3e20af9f/test.js" (the trick is to use /../)
and the fix implemented :
github.com/thepracticaldev/dev.to/...
This patch was also vulnerable ;)
As the regex ended with
$
, we could bypass it with a newline, then/../../..
+ raw gistgithub.com/thepracticaldev/dev.to/...
This was fixed by using
\A
and\Z
instead of^
and$
!Nice one!
@ben , isn't there an URI class or something like that in Ruby? I think it should handle parsing links much better than custom regex.
Probably you can slightly simplify the code using URI::regexp, is this what you mean?
Kinda. I think Ruby provides something like:
This would work for preventing non-
gist-github.com
hosts, but I think we strayed away from this because it wouldn't prevent Bypass 2, where JS is injected via a raw gist link.We could do something like this:
I think with the regex though it would be redundant to check the host.
How about something like this?
Plus, a bunch of test cases:
Although, we should probably check whether you're allowed to have unicode in your username 🤔
@joshcheek gonna take that
valid?
method for checking giphy links. :)Also that's pretty great. Might end up implementing it for the gist Liquid tag.
What an excellent post!
I learned so much from this, and I'm not even a ruby developer!
Really informative and really, really well explained without going over the top with the geekness!
Well done!
Great info and writeup! Thank you for sharing. I have to ask a few questions if you wouldnt mind answering. How much time did you spend on this? What is your primary motivation; curiosity, cash, just because? Was the meager $150 reward worth you efforts?
I found the initial XSS within 15 minutes, but the variations and bypasses took few hours.
The primary motivation is to make the internet more secure, and fun part of breaking websites. The challenges and the reward of having an
alert
is fun.The 150$ reward is plenty, I'm doing this for fun, and I like this website, so having a reward is only a nice bonus.
Nice! This is really awesome!
Great job Antony and thanks for the detailed explanation!
Oh wow, I was sweating as I read this! lol.
If dev.to was not open source, would you still be able to find this discovery? How much more effort? Using different approach? Thanks
Without the website being open source, I would have to perform a black box audit, and finding those vulnerabilities is definitely possible but might require more time.
Brilliant catch !!