top | item 838981

Using SVN makes your site extremely vulnerable

41 points| fdeth | 16 years ago |translate.google.com

46 comments

order

hassy|16 years ago

Summary:

A lot of people don't use "svn export" and leave .svn directories readable to everyone.

The authors of the article wrote a crawler that scanned 2.2 million domains, mostly in the .ru zone, for the vulnerability over the last couple of months.

They got access to (parts of) the source code of over 3 thousand sites, including some big ones like:

* yandex.ru and rambler.ru -- Russian search engines

* mail.ru -- Biggest Russian email host

* rbk.ru -- Large online publisher

* 003.ru, bolero.ru -- Online retailers

* habrahabr.ru -- Webdev/blogging/new media community site

* opera.com

ionfish|16 years ago

For your Apache config.

  # Disallow viewing of .svn and .git directory contents
  <DirectoryMatch \.(svn|git)>
    Order allow,deny
    Deny from all
  </DirectoryMatch>

bcl|16 years ago

May as well throw in .hg

Oh. Now we're blacklisting.

If you are going to use this solution, you are better off blacklisting all dotfiles except .htaccess, assuming you allow it.

patio11|16 years ago

For Nginx:

location ~ /\.(svn|git) { deny all; }

djdarkbeat|16 years ago

  # Disallow viewing of .svn and .git and .hg directory contents
  <Directory ~ \.(svn|git|hg)>
    Order allow,deny
    Deny from all
  </Directory>

djdarkbeat|16 years ago

As well as leaving .gitignore exposed also.

axod|16 years ago

Title is misleading and plain wrong.

The issue is not in "using SVN". It's in using any revision control system that has .svn .git etc directories, and accidentally making those directories world readable from a webserver.

User error.

cousin_it|16 years ago

Russian speaker here, I'll translate some selected comments for your convenience.

harm: We need more people who, upon finding a hole, go on to scan the whole Runet, for no nefarious reasons but just to warn unwitting site owners.

SilenceAndy: In olden times such people were called hackers, until journalists perverted that word to mean cyber criminals.

grayhex: This comment is impervious to Google Translate.

cancel: Google inurl:.svn/entries, lots of interesting stuff.

Nirvanko: This ain't new, see http://www.adamgotterer.com/2009/01/26/hacking-the-svn-direc...

SynteZ: IIS doesn't have this vulnerability :-) By default it doesn't send files without extensions, because it doesn't know the mime type.

varyen: Funny, Wii disks from SEGA also have .svn folders, though they're empty.

crazywebdev: Now I know how http://vkontakte.ru came about.

Sujan|16 years ago

Using a working copy as your website is a pretty bad idea. That's what svn export is meant for.

masklinn|16 years ago

.

It's especially bad because svn puts a .svn in each directory. With e.g. mercurial or git, you can tuck the (visible) site in a subdirectory of the repo itself (project/pages), and the .hg/.git (project/.hg|project/.git) won't be accessible.

Of course the best option is still to use exports and symlinks.

dolinsky|16 years ago

I will echo the sentiments of Sujan and masklinn. A production machine should not have a checked out version of a repository on it ever. If you want the ability to rollback, you have the last N exports of your repo in their versioned folders with a symlink from a 'current' folder pointing to the revision you want on live.

Don't blame the tool, blame the individual for using it improperly.

hlidotbe|16 years ago

Using a working copy allows you to deploy your website faster and safer (only the changes gets transfered, you can have hooks to do some cleanup and rollbacks are almost free).

I use Mercurial on all my websites (disabling access to .*/.hg of course) and never use FTP for anything.

walesmd|16 years ago

This isn't really a vulnerability - just developers not doing their job. Anyone who uses SVN (or any other version management system, for that matter) should know how it works.

I know SVN creates these hidden directories (named .svn) within every directory of my project that contains the working copies of the files within that directory. Therefore I either use export (to not upload the hidden folders) or I make them not accessible to the public via .htaccess.

Saying this is a vulnerability is like telling someone copying/pasting their code into a Pastie is a vulnerability. Common sense.

peterwwillis|16 years ago

People mis-configure Apache all the time. They leave their site wide open for attack. They're vulnerable.

Saying it's not a vulnerability when 3,000 sites all have their source code visible to the world is like having your arm chopped off and saying "no it isn't, it's just a flesh wound."

I know it's not a cool remote root buffer overflow exploit hat trick 540 front side flip, but it's a security hole which people need to be educated about.

InclinedPlane|16 years ago

tl;dr Don't accidentally leave an svn working copy available to the internet, it could be a security vulnerability.

masklinn|16 years ago

Actually, TFA isn't about svn repositories but about using working copies for your production site, and leaving .svn world-readable. svn repositories tend to at least use some kind of HTTP auth (if not https or ssh), but a world-readable .svn means your whole project is available.

ErrantX|16 years ago

Yes that was my thought too - at first I figured the translation was garbling what they were saying; I guess not.

brown9-2|16 years ago

From the translation:

It would seem that in the XXI century is difficult to find such a vulnerability.

Do Russian speakers generally write the century in roman numerals like that? That's kind of neat..

gcv|16 years ago

Yes, it is customary in Russian writing to write century numbers in Roman numerals. The Russian language is going through a significant anglicization phase right now, though, so this will probably change.

DrJokepu|16 years ago

I'm no security expert but I'm not sure if I get it - assuming that your code is well written, how would exposing the source code and change history make it more vulnerable? By using this logic, every piece of open source software is "vulnerable". Security through obscurity is not really security.

I thought not checking in safety critical things such as passwords or keys into the repository tree is a standard practice. If it's not, it should be.

maurycy|16 years ago

It depends on what the threat is.

If the threat is finding vulnerability, then you are right. If the threat is leaking the source code to the competition, then it is a serious matter.

Also, keep in mind the deployed source code is different than just the source code; it usually contains things like the database credentials and such.

masklinn|16 years ago

And as usual, PHP is at the top of the game: http://fr2.php.net/.svn/entries (note: interestingly, not all subdomains are open, the us* ones aren't, the uk* ones aren't either, and fr.php.net is also closed)

fdeth|16 years ago

Sorry for the machine translation but an English text is not up just yet.

DannoHung|16 years ago

It's actually surprisingly coherent. Is Russian easier to translate than other languages or has Google's automated translation just gotten that good?

kennu|16 years ago

Git is much nicer, because everything is in one .git directory and it can be kept outside the public webroot.

seedy|16 years ago

We deploy like this, and it looks like I cannot get to the source files in the way described.

It appears that IIS is naively not serving up these file types. If I drop a plain html file in the .svn folder I can get to it, but any .svn-base file or files lacking an extension are unreachable.

AndrewDucker|16 years ago

It's not actually clear to me what the problem is.

Are they saying that people can read your code (not actually a problem for open source projects) or that they can update it and thus alter your site?

The former doesn't seem so bad - the latter is obviously catastrophic.

I wish I spoke Russian...

InclinedPlane|16 years ago

Just reading. This is actually pretty bad. Consider all of the passwords embedded in connection strings and all the other various secrets contained in the source AND configuration files for a standard website. Even if your site uses all open source software, you still don't want J. Random Hacker to have write access to your database, for example.

chrismear|16 years ago

It's the former. Sure, it's not a problem if your code is already open-sourced, but plenty of people are working on things that aren't. And aside from code, you may have private data stored in your repository, such as API keys, or even just configuration information about your site setup that might help attackers.

bcl|16 years ago

Well duh. You shouldn't be publishing your repository. Use svn export instead.