1,010 karma · joined March 12, 2010
If you can't afford to reboot your servers right now to install the patch, at least you can add this to your web.config and deploy your websites ASAP :
<configuration> <system.webServer> <caching enableKernelCache="false"/> </system.webServer> </configuration>
EVEN WITH NO RULES, YOU ARE VULNERABLE! My previous answer has been proven to be wrong!
curl -v http://example.com/image.png -H "Range: bytes=18-18446744073709551615"
I created a rule to cache all .png files and I changed the curl request to request a .png image on the server. I got a BSOD!
I read the microsoft security bulletin and it says that your IIS server is protected if Kernal Caching is off, maybe that's why our servers are neither blocking the request nor crashing with the request.
EDIT : It is indeed related to "Output Cache" setting in IIS as I said I was suspecting in another comment. I managed to crash our servers by going to IIS Management, select the website I wanted to test, go to Output Caching, enable the feature AND also add a rule (I added a rule for .png just to test). If you have NO rules it is the same as having the feature disabled so you are safe. If you add a rule and check "Enable Kernal Caching" you are vulnerable!
EDIT 2 : As some have asked, this is the command I used to crash our test server. I tested it after having created a new Output Caching rule to cache all .png files in kernel mode.
curl -v http://example.com/image.png -H "Range: bytes=18-18446744073709551615"
I didn't take a screenshot of the BSOD and I don't plan on crashing our test env a second time today because people are using it (I tested it early enough that not a lot of people were at the office yet).
I'm not interested in compilers, I hate writing code in low level languages, I cannot for the life of me understand assembly and Go works extremely well for what I want to do. I've used PHP/C#/Javascript my whole life and I'm more concerned about writing software than writing code. I don't want to nitpick on the tiny details of a running software with memory registers, cpu cycles, cache miss, etc unless there is an obvious bug or performance issue I need to fix. Those things should be abstracted away from me as a developer and go is a great compiled language that looks and feels like an interpreted language from a developer point of view.
If the point of that website was to educate people on the apis that jQuery calls under the hood, it chose a really poor name.
I try to design my app with 12-factor in mind (http://12factor.net/) so all the configuration is passed to the app at run time (either ENV vars, config files, args or pulled from etcd). I'm trying to run the exact same code while in dev and while deployed in prod. For example I will absolutely try and avoid having "if Env == Test" or "if Env == Prod" in my code.
For example, my service connects to S3 to store/retrieve files. The access key, secret key and even the bucket name are all passed as ENV variables so I can work on a test bucket easily with a test api key without changing code. Some services I can run locally (memcache or redis are really easy to spin up locally) and some services I'll rely on Amazon to provide like S3 even in dev/test. Of course this requires a reliable internet connection but it's the best way to deal with this for me as a single developer/devops.
I'm sure bigger teams handling larger projects could give a lot of valuable information on the subject, I would love to hear about it too.