Tags Posts tagged with "glibc"

glibc

przez -
0 880
Open Source

David Miller ogłosił wydanie Glibc 2.23, standardowej wersji biblioteki języka C, stworzonej w ramach projektu GNU. Udostępnia funkcjonalność wymaganą przez UNIX 98, Single UNIX Specification, POSIX (1c, 1d i 1j) oraz część funkcjonalności wymaganej przez normę ISO C99, a dodatkowo rozszerzenia uznane za konieczne lub użyteczne w trakcie tworzenia GNU. Glibc została napisana przez Rolanda McGratha pracującego dla FSF w latach 80. XX wieku.

Dodano wsparcie dla Unicode 8.0.0, zoptymalizowano kilka funkcji dla IBM z13, usunięto sporo błędów bezpieczeństwa, m.in. słynny GHOST. Zainteresowani powinni przejrzeć cały plik ze zmianami.

przez -
17 1060
Bezpieczeństwo i szyfrowanie

Pracownicy firmy Qualys poinformowali o poważnym błędzie bezpieczeństwa – CVE-2015-0235 w popularnej linuksowej bibliotece glibc. Podatność otrzymała kryptonim o nazwie GHOST, a za jej pomocą atakujący może przejąć całkowitą kontrolę nad serwerem. Atak można przeprowadzić zdalnie lub lokalnie, a podatne na ową lukę mogą być, ale nie muszą aplikacje: Apache, CUPS, Dovecot, GnuPG, isc-dhcp, Lighttpd, MariaDB, MySQL, nfs-utils, nginx, nodejs, OpenLDAP, OpenSSH, Postfix, proftpd, pure-ftpd, rsyslog, Samba, sendmail, sysklogd, syslog-ng, tcp_wrappers, vsftpd i xinetd.

Luka GHOST to typowy atak z przepełnieniem bufora (buffer overflow), który został znaleziony w funkcji __nss_hostname_digits_dots() biblioteki glibc. Służy ona do zamiany nazw DNS na adresy IP (i na odwrót). Warto zaznaczyć, że podatne są wszystkie aplikacje, korzystające z protokołu DNS poprzez funkcje z rodziny gethostbyname*().

Autorzy udostępniają też niewielki kod w języku C, sprawdzający czy jesteśmy podatni czy nie:

#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);
}

Sprawdzenia można dokonać przy pomocy poniższych poleceń:

cd /usr/src
wget https://gist.githubusercontent.com/koelling/ef9b2b9d0be6d6dbab63/raw/de1730049198c64eaf8f8ab015a3c8b23b63fd34/gistfile1.c --no-check-certificate
gcc gistfile1.c -o CVE-2015-0235
./CVE-2015-0235

Łatki zostały udostępnione przez: Red Hat (Bug 1183461), Canonical (USN-2485-1), Debiana (CVE-2015-0235).

Po aktualizacji należy zrestartować wszystkie usługi, które wykorzystują glibc, a najlepiej jest zrobić restart serwera:

lsof | grep libc | awk '{print $1}' | sort | uniq

Warto spojrzeć sobie na historię błędu GHOST, ponieważ pierwsze zgłoszenie zostało zarejestrowane już 12 stycznia 2013 roku i nadano mu numer Bug 15014. Poprzednia luka została naprawiona 21 maja 2013 roku, jednakże nie nadano jest statusu błędu krytycznego, przez co wiele systemów nie zrobiło aktualizacji do najnowszej wersji.

Ciekawy wydaje się również 4 komentarz, który brzmi następująco:

Florian *has* reviewed over 3000 past glibc bugs for security impact
(there are a fair number more, mostly older bugs, not yet given a security
flag), but as this case illustrates it may not be apparent from the bug
description that a buffer overrun was involved at all (the subject of this
bug rather suggests a conformance issue with a wrong errno value).

Now, if someone else wants to do their own review of over 3000 bugs with
“security-” flag, and to query cases where they disagree with that
assessment, that would be welcome, but probably also very tedious and not
likely to find many cases of misclassified bugs.

Wynika z niego, że w glibc zostało przejrzanych ponad 3000 błędów wstecz, ale żaden póki co nie otrzymał statusu krytycznego. Deweloperzy zalecają także samodzielne przeszukanie i zgłoszenie ewentualnych uwag.

przez -
9 598
GNU - logo

Inżynier Siddhesh Poyarekar z firmy Red Hat udoskonalił kilka funkcji matematycznych z biblioteki glibc. Aktualnie ciągle pracuje nad zwiększeniem wydajności wielu funkcji, odpowiedzialnych za liczby całkowite ze znakiem, wymierne i zmiennoprzecinkowe o dowolnej precyzji. Udało się zwiększyć ośmiokrotnie wydajność najwolniejszej funkcji pow(), a wiele innych otrzymało podobne udoskonalenia. Obecny kod znalazł się w wydaniu Glibc 2.18.

przez -
0 423
GNU - logo

David Miller ogłosił wydanie Glibc 2.20, standardowej wersji biblioteki języka C, stworzonej w ramach projektu GNU. Udostępnia funkcjonalność wymaganą przez UNIX 98, Single UNIX Specification, POSIX (1c, 1d i 1j) oraz część funkcjonalności wymaganej przez normę ISO C99, a dodatkowo rozszerzenia uznane za konieczne lub użyteczne w trakcie tworzenia GNU. Glibc została napisana przez Rolanda McGratha pracującego dla FSF w latach 80. XX wieku.

Zmiany, jakie zaszły:

  • Dokonano sporej liczby zmian w s390/s390x
  • Pojawiło się wsparcie dla file description locks
  • Zwiększono wydajność na architekturach ARMv7 i AArch64
  • Usunięto obsługę AM33
  • Naprawiono sporo błędów

przez -
5 468
Debian

Projekt Debian po pięciu latach użytkowania Embedded GLIBC (EGLIBC), powrócił znowu do standardowej biblioteki C – GLIBC. Zmiana jest spowodowana zaprzestaniem rozwoju EGLIBC, gdzie na stronie projektu widnieje informacja o zalecanym przejściu na GLIBC. Większość najważniejszych funkcji została zaimportowana, w tym możliwość użycia powłoki POSIX lub zmiana nazewnictwa słów kluczowych. Aktualnie trzeba jeszcze dołączyć 5 łatek, które znajdują się w gałęzi rozwojowej.

przez -
1 472
GNU - logo

David Miller ogłosił wydanie Glibc 2.18, standardowej wersji biblioteki języka C, stworzonej w ramach projektu GNU. Udostępnia funkcjonalność wymaganą przez UNIX 98, Single UNIX Specification, POSIX (1c, 1d i 1j) oraz część funkcjonalności wymaganej przez normę ISO C99, a dodatkowo rozszerzenia uznane za konieczne lub użyteczne w trakcie tworzenia GNU. Glibc została napisana przez Rolanda McGratha pracującego dla FSF w latach 80. XX wieku.

Udoskonalono obsługę C++11, zoptymalizowano wydajnośc funkcji string, dodano benchmark dla funkcji glibc. Pojawiły się nowe funkcje API oraz obsługa dla Intel TSX lock elision. Naprawiono sporo błędów. Dodano nowe architektury komputerowe: Xilinx MicroBlaze i IBM POWER8.

przez -
2 481
GNU - logo

David Miller ogłosił wydanie Glibc 2.17, standardowej wersji biblioteki języka C, stworzonej w ramach projektu GNU. Udostępnia funkcjonalność wymaganą przez UNIX 98, Single UNIX Specification, POSIX (1c, 1d i 1j) oraz część funkcjonalności wymaganej przez normę ISO C99, a dodatkowo rozszerzenia uznane za konieczne lub użyteczne w trakcie tworzenia GNU. Glibc została napisana przez Rolanda McGratha pracującego dla FSF w latach 80. XX wieku.

Najważniejsze zmiany:

  • Pojawiła się wersja na architekturę AArch64, czyli 64 bitowy ARM od Linaro
  • Zoptymalizowano funkcję memcpy() dla MIPS
  • Dodano SystemTap static probes do dynamicznego linkera
  • Zoptymalizowano funkcje znaków: strstr, strcasestr, memmem, memchr, wcschr, wcscpy i wcsrchr
  • Udoskonalono wsparcie dla kompilacji skrośnej (cross-compilation)

Nowa wersja jest zależna od jądra Linux 2.6.16 i wyższych wersji.

przez -
2 523
GNU - logo

Carlos O’Donell ogłosił wydanie Glibc 2.16, standardowej wersji biblioteki języka C, stworzonej w ramach projektu GNU. Udostępnia funkcjonalność wymaganą przez UNIX 98, Single UNIX Specification, POSIX (1c, 1d i 1j) oraz część funkcjonalności wymaganej przez normę ISO C99, a dodatkowo rozszerzenia uznane za konieczne lub użyteczne w trakcie tworzenia GNU. Glibc została napisana przez Rolanda McGratha pracującego dla FSF w latach 80. XX wieku.

Pojawiło się wsparcie dla x32 ABI, które zostało dodane w jądrze Linux 3.4. Umożliwia to programom, skompilowanym jako 32 bitowe, wykorzystywać x32 ABI (Application Binary Interface), w celu dostępu do 64 bitowych rejestrów i ścieżek danych. Dzięki temu nie jest niwelowany narzut, związany z 64 bitowymi operacjami – mniejsze zużycie pamięci, a jednocześnie aplikacje 32 bitowe mogą wykorzystać część z udogodnień, jakie niesie ze sobą architektura 64 bitowa.

Dodano także wsparcie dla standardu C11 ISO-C. Kilka statycznych sond, który były używane w analizie wydajnościowej przez aplikacje takie, jak System Trap, mogą zostać zaimplementowane, podczas kompilacji biblioteki C. Udoskonalono także ogólną wydajność biblioteki funkcji matematycznych.

Porzucono wsparcie jądra Linux 2.4, natomiast jądro Linux 2.6 stało się domyślną konfiguracją minimalną. Przeniesiono także kod architektury Itanium z pakietów jądra “ports”. Wspiera on rodziny Tilera Tile-Gxi oraz TilePro.

Polecane

OSWorld

7 1275
Drodzy Czytelnicy, prowadzimy portal OSWorld.pl już ponad 10 lat. Z przykrością stwierdzamy, że mamy na niego coraz mniej czasu, dlatego chcielibyśmy przekazać prowadzenie serwisu osobie...