В OpenSSL обнаружена ещё одна критическая уязвимость. Она касается всех версий OpenSSL на всех платформах, хотя самый очевидный вектор атаки подходит для 64-битных систем.
Уязвимость связана с многочисленными ошибками целочисленных преобразований в коде функции asn1_d2i_read_bio()
, что может вызвать повреждение памяти при обработке закодированных данных ASN.1. Злоумышленник может использовать эту информацию, чтобы осуществить атаку на системы, которые берут к обработке данные из непроверенных источников, такие как сертификаты X.509 и публичные ключи RSA.
Хотя на данный момент готовых эксплойтов ещё не обнаружено, но их написание не представляется чем-то особо сложным. В данном примере показано, какая структура данных в формате DER приведёт к переполнению буфера.
$ dumpasn1 testcase.crt
0 NDEF: [PRIVATE 3] {
2 2147483648: [1]
...
}
224 if (want > (len-off))
(gdb) list
219 }
220 else
221 {
222 /* suck in c.slen bytes of data */
223 want=(int)c.slen;
224 if (want > (len-off))
225 {
226 want-=(len-off);
227 if (!BUF_MEM_grow_clean(b,len+want))
228 {
(gdb) p c.slen
$18 = 2147483648
(gdb) p want
$19 = -2147483648
Организация OpenSSL оперативно выпустила пропатченные версии библиотеки OpenSSL 1.0.1a, 1.0.0i и 0.9.8v.