Last active
December 29, 2016 18:02
-
-
Save mala/fad5e0bc8a82a9c0fc9d to your computer and use it in GitHub Desktop.
AFNetworking 2.5.2 以下の脆弱性について
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <s>未修正のアプリが数多く残っている状態なので、パブリックな場所での言及には注意して下さい</s> | |
| 未修正のアプリが数多く残っている状況ですが、すでに広く情報が公開されており、2.5.2で修正されたという情報が広まると混乱が生じるため広く周知する次第です。 | |
| # 問題と経緯 | |
| AFNetworking 2.5.1 にMITM攻撃を許す脆弱性があり、2.5.2で修正された、 | |
| と報道されていますが、これは誤りです。 | |
| - http://blog.mindedsecurity.com/2015/03/ssl-mitm-attack-in-afnetworking-251-do.html | |
| 2.5.2では問題が修正されていません。また、2.5.1だけではなく、他の 2.x 系列のバージョンにも脆弱性があります。次のリリースで問題が修正される見込みです | |
| - https://github.com/AFNetworking/AFNetworking/issues/2619 | |
| - https://github.com/AFNetworking/AFNetworking/commit/3e631b203dd95bb82dfbcc2c47a2d84b59d1eeb4 | |
| - 参考: http://blog.kazuhooku.com/2014/01/ssltls.html | |
| 別のサーバー用に発行された証明書でも、エラーを起こさずに正常に通信が成立するという状態です。 | |
| 過去にも問題が指摘されていましたが、修正されないままリリースされており、2.5.2でも修正されませんでした。 | |
| - https://github.com/AFNetworking/AFNetworking/issues/2549 | |
| - https://github.com/AFNetworking/AFNetworking/issues/2560 | |
| - https://github.com/AFNetworking/AFNetworking/pull/2527 | |
| - https://github.com/AFNetworking/AFNetworking/issues/2590 | |
| # 検証方法 | |
| httpsキャプチャ機能を備えたデバッグ用のproxyサーバーで、差し替える証明書の情報をいじってください。(そのようなオプションがあります) | |
| - 端末のルート証明書ストアを追加した状態で、mitmproxyの --no-upstream-cert オプションを使う | |
| - 信用できる認証局から発行された証明書であるが、接続対象のサーバー向けに発行されたものではない(ホスト名が違う) 状態になる | |
| - ブラウザ上での通信ではエラー、AFNetworking 2.5.2 や 2.x での通信は正常に成功する、という状態になります | |
| - https://mitmproxy.org/doc/features/upstreamcerts.html | |
| # 対策 | |
| 2015-03-30 | |
| - 早急にリリースする場合は、2.5.2 ではなく、githubのmasterから最新のものを使って下さい。 | |
| - もしくは self.validatesDomainName の箇所を自前で変更して下さい | |
| 2015-04-20 | |
| - https://github.com/AFNetworking/AFNetworking/issues/2619 の修正が含まれている 2.5.3 以上のバージョンを使用する | |
| - https://github.com/AFNetworking/AFNetworking/releases | |
| - validatesDomainNameのデフォルト値がYESになります(デフォルト設定で安全なポリシーになります) | |
| # 情報開示について | |
| 2015-03-30 | |
| 未修正のアプリが多くあり、またAppleの審査によって修正バージョンのリリースが遅れることが予想されるため、 | |
| この問題についてしばらくパブリックには言及しません。(影響を受けそうなアプリ製作者に個別に連絡しています) | |
| Minded Security に記事の訂正を要求していますが、いつごろになるかはわかりません。 | |
| 2015-04-22 | |
| - http://sourcedna.com/blog/20150420/afnetworking-vulnerability.html | |
| - http://www.macrumors.com/2015/04/21/security-flaws-1500-ios-apps-rootpipe/ | |
| - http://www.itmedia.co.jp/enterprise/articles/1504/22/news047.html | |
| https://github.com/AFNetworking/AFNetworking/releases/tag/2.5.3 | |
| # 補足 | |
| Alamofire 1.2.0 以下にも証明書検証不備があります | |
| - https://github.com/Alamofire/Alamofire/pull/394 | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <s>mitmproxy cnコピーするかどうかの処理が変わっていたので最新版だと検証できていなかった。</s> | |
| mitmproxyでの検証手順、transparent proxyとして設定してやらないと host == example.com 等になって正しいCNを返してしまうようなので、 | |
| CN検証不備を行うには有効な別サーバ向けの証明書を --cert で指定するか下記のように書き換える | |
| diff --git a/libmproxy/proxy/server.py b/libmproxy/proxy/server.py | |
| index a72f9ab..d390cea 100644 | |
| --- a/libmproxy/proxy/server.py | |
| +++ b/libmproxy/proxy/server.py | |
| @@ -257,9 +257,10 @@ class ConnectionHandler: | |
| if self.config.certforward and self.server_conn.ssl_established: | |
| return self.server_conn.cert, self.config.certstore.gen_pkey(self.server_conn.cert), None | |
| else: | |
| - host = self.server_conn.address.host | |
| + host = "mitmproxy" | |
| sans = [] | |
| if self.server_conn.ssl_established and (not self.config.no_upstream_cert): | |
| + host = self.server_conn.address.host | |
| upstream_cert = self.server_conn.cert | |
| sans.extend(upstream_cert.altnames) | |
| if upstream_cert.cn: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment