Мир свободного софта поразила ещё одна критическая уязвимость, которой присвоено собственное имя: GHOST («призрак»). Дыра существует в Linux-системах, использующих библиотеку Glibc (GNU C Library), начиная с версии glibc-2.2 от 2000 года.
С помощью GHOST злоумышленник способен с удивительной лёгкостью (например, отправив письмо по электронной почте) получить полный контроль над компьютером жертвы, не владея заранее никакой информацией об учётных данных. Потенциально уязвимыми к GHOST называют почтовые серверы, MySQL-серверы, Secure Shell серверы, приложения обработки веб-форм и др.
Удалённое выполнение произвольного кода в системе происходит после переполнения буфера в функции __nss_hostname_digits_dots(), которую, в свою очередь, используют функции gethostbyname() и gethostbyname2() библиотеки Glibc.
Версия glibc-2.2 выпущена 10 ноября 2000 года. Баг исправлен патчем между релизами glibc-2.17 и glibc-2.18. К сожалению, его не классифицировали как патч безопасности, так что почти все популярные дистрибутивы с долговременной поддержкой остались на старой «стабильной» версии glibc. Среди них Debian 7 (Wheezy), Red Hat Enterprise Linux 6 & 7, CentOS 6 & 7, Ubuntu 12.04 и другие.
Подробно об уязвимости, которой присвоен технический идентификатор CVE-2015-0235, рассказали исследователи из компании Qualys.
В течение последнего времени Qualys тесно сотрудничала с вендорами, чтобы выпустить патчи для всех поражённых дистрибутивов Linux. С сегодняшнего дня патчи доступны для установки.
Проверка машины на наличие уязвимости GHOST осуществляется с помощью этой утилиты, которую выпустили исследователи из Qualys.
CVE-2015-0235 (GHOST) test code
- #include <netdb.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <errno.h>
- #define CANARY «in_the_coal_mine«
- struct {
- char buffer[1024];
- char canary[sizeof(CANARY)];
- } temp = { «buffer«, CANARY };
- int main(void) {
- struct hostent resbuf;
- struct hostent *result;
- int herrno;
- int retval;
- /*** strlen (name) = size_needed — sizeof (*host_addr) — sizeof (*h_addr_ptrs) — 1; ***/
- size_t len = sizeof(temp.buffer) — 16*sizeof(unsigned char) — 2*sizeof(char *) — 1;
- char name[sizeof(temp.buffer)];
- memset(name, ‘0‘, len);
- name[len] = ‘\0‘;
- retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno);
- if (strcmp(temp.canary, CANARY) != 0) {
- puts(«vulnerable«);
- exit(EXIT_SUCCESS);
- }
- if (retval == ERANGE) {
- puts(«not vulnerable«);
- exit(EXIT_SUCCESS);
- }
- puts(«should not happen«);
- exit(EXIT_FAILURE);
- }
- /* from http://www.openwall.com/lists/oss-security/2015/01/27/9 */
Взято с Xakep.ru
… [Trackback]
[…] Info on that Topic: portaltele.com.ua/news/software/uyazvimost-ghost-v-linux-obnaruzhili-spustya-14-let.html […]
… [Trackback]
[…] Read More on on that Topic: portaltele.com.ua/news/software/uyazvimost-ghost-v-linux-obnaruzhili-spustya-14-let.html […]
… [Trackback]
[…] Read More Information here on that Topic: portaltele.com.ua/news/software/uyazvimost-ghost-v-linux-obnaruzhili-spustya-14-let.html […]