Уязвимость в PHP подвергает опасности практически любой сайт

Уязвимость в PHP подвергает опасности практически любой сайт

Брешь позволяет злоумышленникам скомпрометировать учетную запись пользователя.

Вице президент WhiteHat Labs из WhiteHat Security Роберт Хансен (Robert Hansen) обнаружил уязвимость, которая получила название Magic Hash. Из-за ошибки в PHP при работе с хешами в некоторых ситуациях злоумышленник может подобрать пароль к учетной записи пользователя, обойти аутентификацию и другие средства обеспечения безопасности, полагающиеся на хеширование.

Проблема возникает при использовании оператора равно-равно (==) во время сравнения двух хешей. PHP использует кодировку base16, в результате получаем строку, подобную этой: “0e812389…”.

Если строка начинается с «0e» и после нее следуют только цифры, PHP будет интерпретировать эту строку как число с плавающей точкой. В итоге, условие if ('0e462097431906509019562988736854' == '0') будет истиной.

По мнению эксперта, эта брешь затрагивает миллионы сайтов и может стать действительно проблемой. Если хеш пароля пользователя в базе данных начинается с 0e, злоумышленник может воспользоваться любой строкой, которая при сравнении будет интерпретирована как 0, и успешно авторизоваться в системе без знания пароля.

В качестве временного решения эксперт предлагает использовать тройное равно (===) для подобных сравнений.

Эксперт также отмечает, что подобная проблема затрагивает не только PHP. Такие языки как Perl и JavaScript также подвержены уязвимости, поскольку не требуют обязательного объявления типа переменной перед ее использованием.