2016-09-06 2 views
0

Я только что наткнулся на этот отчет об ошибке безопасности за несколько лет назад, 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.

Заранее благодарен!

ответ

2

С быстрым чтением я думаю, что писатель был немного смущен между местными и ctx->size.

Путь ввода является:

  1. ngx_http_parse_chunked:2011: ctx->size является знаковым ввода.
  2. ngx_http_parse_chunked:2183: подписан ctx->length комплект в соответствии с ctx->size.
  3. ngx_http_discard_request_body_filter:735: подписанный r->headers_in.content_length_n установлен на ctx->length.
  4. ngx_http_read_discarded_request_body:649: r->headers_in.content_length_n будут преобразованы в size_t и назначен size (если content_length_n < NGX_HTTP_DISCARD_BUFFER_SIZE, который будет всегда верно, если 0 > content_length_n).
  5. ngx_http_read_discarded_request_body:652: r->connection->recv вызывается с номером size в виде количества прочитанных байтов.
  6. ngx_http_read_discarded_request_body: size > sizeof (buffer) (NGX_HTTP_DISCARD_BUFFER_SIZE). Следовательно, произойдет переполнение стека.

Надеюсь, это понятно.

+0

Эй, я думаю, что это правильный ответ, и писатель немного ошибся. – robobooga

Смежные вопросы