В одном из самых популярных фреймворков для работы с сетью в iOS и OS X системах была найдена критическая уязвимость. Под прицелом специалистов из Minded Security оказался AFNetworking, а именно версия 2.5.1.

image

В методе evaluateServerTrust (файл AFSecurityPolicy.m) происходит логика проверки SSL-сертификата.
- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust
      forDomain:(NSString *)domain
{
  NSMutableArray *policies = [NSMutableArray array];
  if (self.validatesDomainName) {
     [policies addObject:(__bridge_transfer id)SecPolicyCreateSSL(true, (__bridge CFStringRef)domain)];
  } else {
     [policies addObject:(__bridge_transfer id)SecPolicyCreateBasicX509()];
  }

  SecTrustSetPolicies(serverTrust, (__bridge CFArrayRef)policies);

  if (self.SSLPinningMode != AFSSLPinningModeNone &&
 !AFServerTrustIsValid(serverTrust) && 
!self.allowInvalidCertificates) {
   return NO;
 }

 NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust);
    switch (self.SSLPinningMode) {
        case AFSSLPinningModeNone:
            return YES;


По умолчанию SSLPinningMode выставлен в AFSSLPinningModeNone, что полностью отключает проверку сертификата. Благодаря этому становится возможен SSL MITM.
Данный фреймворк достаточно популярен. Его используют такие приложения как Pinterest, Heroku, Citrix OpenVoice Audio Conferencing, Alibaba и другие.

После публикации деталей уязвимости были проведены проверки других приложений из AppleStore. Результаты неутешительные. 1500 приложений оказались под управлением «дырявой» версии AFNetworking.
Следом был запущен сервис для проверки приложений на наличие уязвимости: searchlight.sourcedna.com/lookup
В версии 2.5.2 бага частично закрыта, но по-прежнему присутствует обход валидации сертификата из-за отсутствия проверки хоста.

Ссылки по теме:
SSL MiTM attack in AFNetworking 2.5.1 — Do NOT use it in production!
1,500 iOS apps have HTTPS-crippling bug. Is one of them on your device?
AFNetworking на Хабре

Комментарии (3)


  1. TimsTims
    03.05.2015 10:14
    +3

    Правильно ли я понимаю, что проверка сертификатов по умолчанию выключена и SSL вообще по сути не работает?


    1. mifki
      03.05.2015 15:43

      Они налажали в одной версии, 2.5.1, и было так до 2.5.2. Не то, чтоб сильно долго и страшно.
      Кстати, с учетом первого комментария тут github.com/AFNetworking/AFNetworking/commit/104ce04105098466ea0ea4e337af554d7b9df195#diff-508d2e2e91b3a2789fb4bf053ec4b125 не ясно, кто первым нашел.


  1. gloomka
    04.05.2015 10:25
    +1

    Выпустили 2.5.3 же, где эта уязвимость закрыта, причём ещё 20 апреля.

    А также мэйнтейнеры библиотеки выпустили официальное заявление с объяснениями по поводу шумихи вокруг этого бага и про «1500 приложений в Сторе подвержены»: gist.github.com/AlamofireSoftwareFoundation/f784f18f949b95ab733a