Забавная уязвимость в libpam-pgsql или насколько важно иметь правильный IP

Забавная уязвимость в libpam-pgsql или насколько важно иметь правильный IP
Когда выходит оригинальная новость, непременно хочется поделиться ею с кем-то. Сегодня – это уязвимость в libpam-pgsql. Сама по себе уязвимость сложна в эксплуатации и не интересна с этой точки зрения. Но вот природа ошибки довольно забавна. Заключается она в том, что в файле src/backend_pgsql.c вызывается функция pg_execParam(), которая содержит следующий код:
      /* Make IP string */
      raddr = malloc(16);
      sprintf(raddr, "%d.%d.%d.%d",
         hentry->h_addr_list[0][0],
         hentry->h_addr_list[0][1],
         hentry->h_addr_list[0][2],
         hentry->h_addr_list[0][3]);
      raddr[15] = 0;


Эта функция использует спецификатор форматной строки %d для преобразования IP адреса, который не совсем корректно работает с числами более 127. В результате, если будет осуществлено подключение с IP адреса x.199.x.x, этот адрес будет преобразован в x.-57.x.x.

Таким образом, чтобы вызвать повреждение динамической памяти и аварийно завершить работу приложения или выполнить произвольный код на системе, нужно иметь ПРАВИЛЬНЫЙ IP адрес :)

Подробное описание уязвимости:
http://www.securitylab.ru/vulnerability/404943.php
Security уязвимости Юмор
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
Мы расшифровали формулу идеальной защиты!

Спойлер: она начинается с подписки на наш канал

Введите правильный пароль — подпишитесь!

Валерий Марчук

Блог посвящен безопасности и жизни секлаба