Я только что наткнулся на этот отчет об ошибке безопасности за несколько лет назад, CVE-2013-2028, по vnsecurity.Целые числа, подписанные Nginx, CVE-2013-2028
Однако первый момент интересовал меня, сказав, что ошибка была вызвана главным образом несоответствием знака.
Это просто разбирает фрагментированный ввод размера, как шестнадцатеричном и преобразовать его в базу 10. И так как ctx-> размер определяется с size_t, без знака типа, то значение переменного может быть неверно истолковано как отрицательный номер, когда кастинг для подписанного типа, как мы увидим позже.
Как мне было интересно об этом, я пошел искать struct
из «CTX», и я наткнулся на это:
struct ngx_http_chunked_s {
ngx_uint_t state;
off_t size;
off_t length;
};
Насколько я знаю, ctx-> size
это не size_t
но off_t
, который представляет собой целое число со знаком. Итак, могу ли я узнать, ошибаюсь ли я, или что он был перефразирован неправильно.
Более старую версию nginx можно найти в этом repo.
Заранее благодарен!
Эй, я думаю, что это правильный ответ, и писатель немного ошибся. – robobooga