OpenSSL last vulnerabilities
The most anticipated OpenSSL announcement finally reveal no less than 14 vulnerabilities, with 2 of them classified as high severity. But even if this is not an Heartbleed 2, you would be foolish to not patch you servers.
First, FREAK (CVE-2015-0204) has been reclassified to high because EXPORT_RSA seems to be much more common that previously thought, leading the OpenSSL developpers to escalate it from low to high.
The second high vulnerability (CVE-2015-0291, "ClientHello") only concern the last OpenSSL version (1.0.2), and can lead to a DoS against your server. You can read the full report on the OpenSSL website.
https://www.openssl.org/news/secadv_20150319.txt
https://ma.ttias.be/openssl-cve-2015-0291-cve-2015-0286/
Vous avez certainement déjà tout lu sur la vulnérabilité « Ghost » de la GNU libc (alias CVE-2015-0235). Si ce n'est pas le cas, vous pouvez vous documenter sur le blog du découvreur ou bien en lisant cette analyse technique ultra-détaillée. Mais un aspect de cette faille a été peu remarqué : qui diable utilise encore l'API gethostbyname, complètement dépassée ?
La faille se trouvait en effet dans une fonction nommée __nss_hostname_digits_dots qui est appelée par les fonctions, bien plus connues, gethostbyname et gethostbyaddr. Ces fonctions servent à traduire un nom de domaine en adresse IP, en général en faisant appel au DNS. Elles sont dépassées depuis longtemps et ne devraient plus être utilisées, notamment parce qu'elles ne permettent pas de faire de l'IPv6.
Ce point a bien été noté par les découvreurs de la faille (et, indépendamment, par certains sur les rézosocios), auteurs qui notent, dans le rapport technique, « The gethostbyname*() functions are obsolete; with the advent of IPv6, recent applications use getaddrinfo() instead. ». En effet, en 2015, on n'imagine pas qu'il puisse exister des programmes qui se limitent volontairement à IPv4, en utilisant ces vieilles API.
Car ce n'est pas qu'une matière d'esthétique : les fonctions officiellement remplacées par des meilleures ne sont pas forcément aussi bien maintenues, et on peut penser que les failles n'y sont pas aussi vite repérées et corrigées. Les programmes utilisant les anciennes API ont donc plus de chance d'avoir des failles de sécurité comme Ghost.
Au fait, que faut-il utiliser depuis plus de quinze ans ? getaddrinfo, introduit à l'origine dans le RFC 2133 et actuellement normalisé dans le RFC 3493. (Vous trouverez mes exemples personnels dans mon article sur les structures de données réseau en C.) gethostbyname avait été marqué obsolescent dans POSIX en 2001 et supprimé complètement en 2008...
Aujourd'hui, si on cherche les « parts de marché » respectives de gethostbyname et getaddrinfo, on trouvera probablement qu'un grand nombre de programmes utilise toujours l'ancienne API. Ignorance, lecture de vieux HOWTO dépassés, cours jamais mis à jour...
Également à lire, sur Ghost :
Un très bon exposé de Bert Hubert parlant entre autres de la qualité du code DNS de la GNU libc et des nombreuses bogues qui s'y cachent, http://ds9a.nl/har-presentation-bert-hubert-3.pdf
Un article de Robert Graham qui dit la même chose que moi, http://blog.erratasec.com/2015/01/you-shouldnt-be-using-gethostbyname.html
Une excellente analyse technique de Ghost. http://lcamtuf.blogspot.fr/2015/01/technical-analysis-of-qualys-ghost.html
The GHOST vulnerability is a serious weakness in the Linux glibc library. It allows attackers to remotely take complete control of the victim system without having any prior knowledge of system credentials. CVE-2015-0235 has been assigned to this issue.
==========
See also: https://sourceware.org/bugzilla/show_bug.cgi?id=15946
"A heap-based buffer overflow was found in __nss_hostname_digits_dots(), which is used by the gethostbyname() and gethostbyname2() glibc function call. A remote attacker could use this flaw to execute arbitary code with the permissions of the user running the application."
A few months ago I decided to get started on fuzzing. I chose the reference implementation of the Network Time Protocol (NTP), ntpd, as my first target, since I have some background with NTP and the protocol seemed simple enough to be a good learning experience. Also, ntpd is available for many platforms and widely in use, including being part of the default OS X installation.