На всякий случай напишу и здесь, вдруг кто еще не знает. Просьба к сообществу не переносить тему, а то на форуме ASP.Net мало не увидит.
В общем, путем модификации зашифрованных кукисов/поля ViewState и наблюдения за ошибкой сервера, пытающегося их расшифровать, удается вычислить мастер-ключ машины. В свою очередь знание мастер-ключа позволяет подменять кукисы + начиная с .Net 3.5 даже украсть Web.config-файл.
Я, кстати, давно догадывался об этой заразе и никогда ничего важного не шифровал мастер-ключом. А вот про Web.config впервые слышу. Даже сейчас не представляю как знание мастер-ключа помогает украсть Web.config. Ваши соображения?
0K>Я, кстати, давно догадывался об этой заразе и никогда ничего важного не шифровал мастер-ключом. А вот про Web.config впервые слышу. Даже сейчас не представляю как знание мастер-ключа помогает украсть Web.config. Ваши соображения?
вот что пишет Скот
The attack that was shown in the public relies on a feature in ASP.NET that allows files (typically javascript and css) to be downloaded, and which is secured with a key that is sent as part of the request. Unfortunately if you are able to forge a key you can use this feature to download the web.config file of an application (but not files outside of the application). We will obviously release a patch for this — until then the above workaround closes the attack vector.
Здравствуйте, 0K, Вы писали:
0K>Я, кстати, давно догадывался об этой заразе и никогда ничего важного не шифровал мастер-ключом.
Ключ тут как бы не при чем. Проблема в алгоритме, который при неправильном паддинге кидает специфический эксепшн. И если атакующий может понять когда происходит этот эксепшн, а когда другой — то это помогает сильно сократить время брутфорса.
Что можно сделать чтобы не выдавать такую информацию? Как везде уже написали, во-первых, отдавать специфическую страницу при ошибке,а не желтый экран смерти. Это уже сделано в 90% приложений.
Во-вторых, выдавать при ошибках всегда один код статуса. Это по умолчанию тоже есть, если только в customErrors не выставить разные статус-коды и страницы ошибок для них.
Самое неприятное, что об ошибках можно догадаться по времени, которое требуется, чтобы получить страницу ошибки. Поэтому в воркэраунде сделали рандомный Sleep.
Справедливости ради, это уязвимость не только ASP.NET приложений, и обнаружена она была для начала в JSF
0K> А вот про Web.config впервые слышу. Даже сейчас не представляю как знание мастер-ключа помогает украсть Web.config. Ваши соображения?
Пока не представляю как это можно сделать. Единственное, что приходит на ум — это хэндлеры типа webresource.axd и scriptresource.axd
Здравствуйте, Gollum, Вы писали:
G>Пока не представляю как это можно сделать. Единственное, что приходит на ум — это хэндлеры типа webresource.axd и scriptresource.axd
И то и другое отдает контент из ресурсов сборки.
В многих CMS на .NET админский доступ (который можно получить зная ключ) позволяет произвольно обращаться с файлами на сервере, что и дает злоумышленнику доступ к web.config в том числе.
Здравствуйте, gandjustas, Вы писали:
G>И то и другое отдает контент из ресурсов сборки.
Я в курсе. Но явно видно, что по-другому взять конфиг не получится, т.к. на *.config прописан HttpForbiddenHandler.
G>В многих CMS на .NET админский доступ (который можно получить зная ключ) позволяет произвольно обращаться с файлами на сервере, что и дает злоумышленнику доступ к web.config в том числе.
Тогда речь бы шла об уязвимости этих CMS, а не ASP.NET.
0K>Я, кстати, давно догадывался об этой заразе и никогда ничего важного не шифровал мастер-ключом. А вот про Web.config впервые слышу. Даже сейчас не представляю как знание мастер-ключа помогает украсть Web.config. Ваши соображения? вот подробности как можно посмотреть web.config
интересно кому в MS пришло в голову сделать так чтоб ScriptResource.axd отдавал web.config?
P.S. перловый скрипт доступен для скачки, жду волны kid scripting