はじめに
普段はWebアプリケーション脆弱性診断に関わる業務を行っています。
最近、Flutterアプリの脆弱性診断が増えてきているのでどのようなソースコードで脆弱性が入るのか体験してみました。
脆弱性を試すのが目的だったので、シンプルなアプリを作ってSQLインジェクションを入れてみました。
ここではSQLインジェクションを実装したところをメインに紹介します。
動作確認環境
- macOS Ventura 13.6.2
- Flutter 3.13.3
- Dart 3.1.1
- sqflite 2.0.2
該当のソースコード
Androidアプリで、タイトル検索時のクエリでインジェクションできるようにしています。
※データストアはSQLiteを利用していて、sqflite経由でアクセスしています。
static Future<List<Map<String, dynamic>>> searchNotes(String title) async {
final db = await NoteViewModel.db();
return db.rawQuery('SELECT * FROM items WHERE title LIKE "%${title}%"');
}
こちらの例では検索時のパラメータをバリデーションやエスケープを実施せずに利用していて、SQLインジェクションすることが可能になっています。
おわりに
脆弱性の勉強がしたいという方の一助になれば幸いです。