
Docker化した https://github.com/koseven/koseven[koseven] のハローワールドアプリケーションで、3.3.10未満のバージョンに影響するSQLインジェクション脆弱性 CVE-2019-8979 を試すためのものです。 このハローワールドは実際には https://koseven.dev/documentation/orm/examples/simple[ドキュメント] から持ってきたもので、Docker部分とPoCエクスプロイトを追加しただけです。
= CVE-2019-8979 このSQLインジェクション問題は、元々第三者によって https://github.com/koseven/koseven/issues/323[報告] され、2019年2月27日にmasterで修正されましたが、開発者は修正を含む新しいリリースを公開するのを忘れました。 その結果、当時の最新安定版である2018年11月20日公開の https://github.com/koseven/koseven/releases/tag/3.3.9[koseven-3.3.9] は脆弱なままで、2020年10月12日に https://github.com/koseven/koseven/releases/tag/3.3.10[koseven-3.3.10] がリリースされるまで修正されませんでした。これは、2020年10月10日に https://elttam.com[elttam] がその見落としに気づき、コア開発者に非公開で開示した後のことです。
= 制限事項
order by の方向入力に対して https://github.com/koseven/koseven/blob/3.3.9/modules/database/classes/Kohana/Database/Query/Builder.php#L236[strtoupper()] が呼び出されるため、MySQLから current_user()、database()、information_schema のテーブル名やカラム名などの一部の情報は取得できますが、他のテーブルからデータを取得できない可能性があります。
これは、MySQLがデータディレクトリが大文字小文字を区別するファイルシステム上にあるオペレーティングシステム上で実行されている場合、データベース名とテーブル名が大文字小文字を区別するためです。 その結果、このSQLiが完全に悪用可能となるのは以下の場合のみです:
lower_case_table_names システム変数が > 0 である詳細は https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html[識別子の大文字小文字の区別] を参照してください。
= デモ