AFNetworkingのバグで個人情報漏洩の危険

公開: 2015-04-22 01:13
更新: 2016-04-29 06:03

サーバーとのやりとりを便利にしてくれるライブラリ「AFNetworking

あっきぃも自分のアプリだったり、お仕事のアプリで使いまくりですが、

ななんと個人情報が盗まれるかもしれない脆弱性が発見されたようです。

⇒ 1,500 iOS apps have HTTPS-crippling bug. Is one of them on your device? | Ars Technica





HTTPS-crippling bug

「HTTPS」はセキュアなHTTPです。個人情報を入力するときはURLがhttps://〜ってなる奴です。

「crippling」は「重大な障害を与える」という意味。

「bug」はバグです。


何だか分かりませんがHTTPSをどうにか機能しないようにし、
クレジットカード番号やログインパスワードなどの盗聴が可能になってしまうみたい。





問題となったコード

バージョン2.5.1で問題となっていたようです。

AFNetworking/AFSecurityPolicy.m内のこの部分

//ver2.5.1 問題あり
- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain {
        ...
        if (self.SSLPinningMode != AFSSLPinningModeNone && !AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) {
                return NO;
        }
        NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust);
        switch (self.SSLPinningMode) {
                case AFSSLPinningModeNone:
                        return YES;
                case AFSSLPinningModeCertificate: {
        ...
}

こちらの部分に問題があり、
ver2.5.2で以下のように修正されました。

//ver2.5.2
- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain {
        ...
        if (self.SSLPinningMode == AFSSLPinningModeNone) {
                if (self.allowInvalidCertificates || AFServerTrustIsValid(serverTrust)){
                        return YES;
                } else {
                        return NO;
                }
        } else if (!AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) {
                return NO;
        }
        
        NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust);
        switch (self.SSLPinningMode) {
                case AFSSLPinningModeNone:
                default:
                        return NO;
                case AFSSLPinningModeCertificate: {
        ...
}

ぱっと見た感じの勘で申し訳ないですが、

self.SSLPinningModeがデフォルト値のAFSSLPinningModeNoneの場合、この関数の評価は必ずYESになってしまいます。多分それがマズいのだと思います。

(2.5.2修正後にはself.allowInvalidCertificatesやAFServerTrustIsValidが通らない限り必ずNOになっているので)



当ブログにはコメント機能があるので、
ツッコミどころがあればどんどん書いてください♪





対象となるアプリは

どっかの調べによると約1500本のアプリでAFNetworkingのバグを抱えているそうです。

こちらのサイトからAFNetworkingを使用しているアプリが見つかります。(なんで分かるの?)

⇒ SourceDNA App Security

AFNetworkingのバグで個人情報漏洩の危険

とりあえず、すでに見つかっているFlixsterなる会社で調べてみるとこんな感じ。

Moviesってアプリのバージョン7.1および7.2.1でAFNetworking 2.5.1が使用されていることが分かります。



あなたのアプリは大丈夫?



⇒ 1,500 iOS apps have HTTPS-crippling bug. Is one of them on your device? | Ars Technica



この記事をシェア
この記事にコメントする
書き込む
あっきぃ(@appstars_aki)
Web、iOSなフリーランサーです。好きなものはお寿司です。でもお寿司は高いので普段は雑草とか拾ったドングリを食べています。お仕事や意味もなく毎月お小遣いをくれる人を探してます。

お仕事の依頼や自分で作ったアプリのレビューを希望しちゃう方はaki@appstars.jpまでご連絡ください。