こんにちは、SSTでWeb脆弱性診断用のツール(スキャンツール)開発をしている坂本(Twitter, GitHub)です。
先日 Flutter 製のiOSアプリについて、「WiFi で Proxy 設定しても Burp でHTTP(S) 通信が見れないんですが・・・」と相談を受けました。
少し調べたところ、Flutter 製アプリはデフォルトでは WiFi の Proxy 設定に未対応であることが分かりました。
開発者の方と相談したところ、快くアプリを改修していただき、無事に WiFi の Proxy 設定をすれば Burp で HTTP(S) 通信をキャプチャできるようになりました。
本記事ではその件について簡単に紹介します。
Flutter と HTTP Proxy 対応状況
今回のトラブルは iOS アプリで発生しました。
iOSアプリの場合、iOSの標準ライブラリである NSURLSession/URLSession
またはそれをベースとしたライブラリであれば WiFi の Proxy 設定に応じてHTTP(S)通信を行います。
*1
一方、Flutter は Dart 言語で構築されたクロスプラットフォーム開発が可能なフレームワークです。
推測ですが、 Dart言語によるHTTP通信の実装で NSURLSession/URLSession
を使っていない、あるいは何らかのカスタマイズをしている可能性を考えています。
本来であれば自動で WiFi の Proxy 設定を参照する機能が、それにより無効化されているのではないかと考えています。
実際、日本の「じゃらん」開発チームの方が Flutter アプリでシステムのプロキシ設定が無視される問題を報告しています:
Flutter の GitHub Issue にも、「システムのプロキシ設定を参照してほしい」という内容の Issue がありました。
system_proxy パッケージによる対応
「じゃらん」のスライドや GitHub Issue でも "system_proxy" というパッケージが紹介されており、これを使うとシステムのプロキシ設定に対応してくれるようです。
簡単ですがまとめ
- Flutter 製のアプリでは、デフォルトではシステムの(= スマホの場合は WiFi 接続の) HTTP Proxy 設定を無視することがある。
- "system_proxy" パッケージを使うと簡単にシステムプロキシを参照できるらしい。
- 診断案件で遭遇した場合は、開発者と要相談。
もし開発者の方と連絡が取れないような状況であれば、先日の記事 Raspberry Pi 4 を使ったスマホ向け透過型Proxy環境の構築 - SSTエンジニアブログ で紹介したような環境を構築する必要があるかもしれません。
なお本記事の内容はあくまでも2021年7月までの情報に基づいています。 Flutter の将来のバージョンアップで状況が変わる可能性はありますので、ご注意ください。