CVE 2023-0567
В ПХП нашли достаточно серьёзный, на мой взгляд, баг — на некоторых повреждённых хешах функция password_verify возвращает true на любой пароль. Получается, хитрый хакер может оставить себе тайный ход — поменять в базе хеш на битый, и пользователь ничего не заметит —
Вот как это выглядит:
var_dump(password_verify("foo", '$2y$04$00000000$')); // true
var_dump(password_verify("bar", '$2y$04$00000000$')); // trueУдивляет, что один из разработчиков попытался защитить текущее поведение интерпретатора:
The documentation for password_verify() clearly states that the $hash has to be valid:
> hash
> A hash created by password_hash().I fail to see how this is a bug if you feed it garbage; also the documentation to crypt states:
> Using characters outside of this range in the salt will cause crypt() to return
a zero-length string. The two digit cost parameter isthe base-2 logarithm of the iteration count for the underlyingBlowfish-based hashing algorithm and must be in range04-31, values outside this range will cause crypt() to fail.PHP clearly behaves as described.
Что бы ни было написано в документации, возвращать true на любой пароль из функции проверки правильности пароля — очень плохая идея, как мне кажется, это должно быть довольно очевидно.
При анализе оказалось, что баг занесён ещё
PHP’s implementation of crypt_blowfish differs from the upstream Openwall version by adding a «PHP Hack», which allows one to cut short the BCrypt salt by including a $ character within the characters that represent the salt.
Hashes that are affected by the «PHP Hack» may erroneously validate any password as valid when used with password_verify and when comparing the return value of crypt() against the input.
The PHP Hack exists since the first version of PHP’s own crypt_blowfish implementation that was added in 1e820ec.
No clear reason is given for the PHP Hack’s existence. This commit removes it, because BCrypt hashes containing a $ character in their salt are not valid BCrypt hashes.
«Ухарь-купец»
Не знал, что в начале двадцатого века существовало такое явление, как раскрашенные вручную фильмы. Как и многие, я слышал, что
А тут при изучении сайта «Утерянные медиа», наталкиваюсь на новость, что в прошлом году удалось разыскать считавшийся утерянным фильм «
Вот это постпродакшн! Длительность фильма — около восьми минут, что даёт нам, при скорости съёмки 15 кадров в секунду по стандарту того времени 7200 кадров (8×60×15).
Красили, правда, насколько я мог разобраться, не кисточкой, а методом вирирования, — это способ, который изобрёл Жорж Мельес, один из основоположников кинематографа. Метод заключался в вырезании трафаретов из напечатанных с плёнки дополнительных позитивов, при помощи которых покадрово наносились оттеночные химикаты.
Это едва ли не сложнее, чем покрасить плёнку обычной кисточкой, но с точки зрения получения нескольких копий куда выгоднее.
Стихотворение рассказывает о совращении проезжим купцом деревенской девушки с согласия её отца. Оно, кстати, в своё время изменило значение слова «ухарь». Первоначальное значение «весёлый, энергичный человек» перешло в негативное.
Было отчего — кончается стихотворение довольно мрачно:
Молится богу
старуха-жена,
Плакать бы надо — не плачет она.
Дочь их красавица поздно пришла,
Девичью совесть вином залила.
Что тут за диво! и замуж пойдет…
То-то, чай, деток на путь наведет!
Кем ты, люд бедный, на свет порожден?
Кем ты на гибель и срам осужден?
Фильм тоже не хеппиэндом кончается — дочь прибегает в родительский дом, и мать, поняв её нынешнее положение по символически обрезанной купцом косе, будит