Haxx0red!

In the interests of full disclosure, I'd like to announce that my blog was cracked into in the wee hours of the morning (PDT) two Saturdays ago (9/21/2007). I have yet to figure out the vector the crackers used to compromise my blog, but I will repost the details that I have found out so that others may be on their guard against such attacks.
Here's how I figured out I'd been cracked.
As you may already know, the theme that I am currently running is one that I developed myself (and even plan to release some day…) and so I constantly tinker with its innards. I keep all of the code in a Subversion repository and make semi-regular check-ins in the interests of keeping myself honest and making sure that I don't lose old changes.
Last Saturday (9/28), I noticed that my copyright statement in footer.php was still referring to 2007, so I quickly edited the file and then did an `svn status` prior to committing my revision. I usually execute a status before committing so that I can recall which files I've touched and thus present more meaningful commit log messages. When I executed the status, I noticed something a little funny:
$ svn status
? functions2.php
? 2590.php
? styles/phskyline
? styles/move
? styles/index.html
? styles/phskyline.css
? styles/default/phillyskyline.jpg
M footer.php
? layouts/index.php
? images/o.txt
? images/faq.php
Note the last two lines — I certainly did. (For you svn newbs out there: the "?" means that Subversion doesn't know about the files, the "M" means that the file is locally modified) The other files I expected to see there, as I have a couple of page-/post-specific files (2590.php, functions2.php) that I use as templates for my blog alone and thus would be of no use to others and the others were either abandoned or nowhere near complete custom templates. I was 100% certain, however, that I had not created anything in the images directory in a long time. My curiosity aroused, I issued an `svn diff` and noted the following output (pay attention to line 10):
$ svn diff
Index: footer.php
============================
--- footer.php (revision 131)
+++ footer.php (working copy)
@@ -63,6 +63,7 @@
4 Comments
Leave a comment
Additional comments powered by BackType





I've just discovered I've been hit by the same exact problem on several of my domains. I found one instance of the include-to-.txt and removed it. But spam links are still showing up. I've grepp'd my entire account for everything possible, and can't find the culprit. Really really frustrating. Would love to know if this is a WP issue, or just general hackery (I've updated to WP2.5).
Dan:
What version of WP were you running previously?
I've been operating under the assumption that the vector was WP's XML-RPC interface, as that's the only real point of entry for my setup (I also altered my admin password in an attempt to narrow down exploit holes).
It almost seemed as if the spammers in question got ahold of my login credentials somehow and used the Theme Editor to add the offending code.
Do either of you happen to use a plugin to stop multiple login attempts?
If not, it could be that they brute forced your password.
Feesh:
Blocking multiple logins is a bad idea, as some malefactor could well block you from your own blog simply by repeatedly attempting to log in as "admin", thus denying you access.
coffee2code's Last Logins plugin may be something to look into, as it at least logs all attempted logins, thus giving you an idea as to whether someone is attempting to get in and react in time (by changing passwords, etc.).