Переполнение кучи в OpenSSL

Discussion in 'Мировые новости. Обсуждения.' started by d3l3t3, 20 Apr 2012.

  1. d3l3t3

    d3l3t3 Banned

    Joined:
    3 Dec 2010
    Messages:
    1,771
    Likes Received:
    98
    Reputations:
    10
    В OpenSSL обнаружена ещё одна критическая уязвимость. Она касается всех версий OpenSSL на всех платформах, хотя самый очевидный вектор атаки подходит для 64-битных систем.

    Уязвимость связана с многочисленными ошибками целочисленных преобразований в коде функции asn1_d2i_read_bio(), что может вызвать повреждение памяти при обработке закодированных данных ASN.1. Злоумышленник может использовать эту информацию, чтобы осуществить атаку на системы, которые берут к обработке данные из непроверенных источников, такие как сертификаты X.509 и публичные ключи RSA.

    Хотя на данный момент готовых эксплойтов ещё не обнаружено, но их написание не представляется чем-то особо сложным. В данном примере показано, какая структура данных в формате DER приведёт к переполнению буфера.

    Code:
    $ 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.

    Дата: 20.04.2012
    http://www.xakep.ru/post/58592/