セキュリティエンジニアが気になった脆弱性対策まとめ(SQLi編)
OSS(オープンソースソフトウェア)のソースコードを読むことは、多くのITエンジニアにとってたいへん良い勉強になります。
しかし個人的にはソースコードをただ読むのではなく、変更履歴を追跡して何故そのように変更したのか、何がダメだったのか等いろいろ考えてみることをお勧めしたいです。
特に脆弱性対策に関する変更履歴を追跡することは、セキュリティエンジニアの基礎体力向上に役に立つのではないかと考えます。
今回はSQLi(SQLインジェクション)対策に関するソースコードの変更履歴をピンポイントでご紹介いたします。
Apache Skywalking(CVE-2020-13921)
– sql.append(” and “).append(AlarmRecord.ALARM_MESSAGE).append(” like ‘%”).append(keyword).append(“%’ “);
+ sql.append(” and “).append(AlarmRecord.ALARM_MESSAGE).append(” like concat(‘%’,?,’%’) “);
+ parameters.add(keyword);
分散システム向けのアプリケーション性能モニタリングシステムです。
SQL文の生成処理を文字列連結からプレースホルダーに変更しています。
FUEL CMS
https://github.com/daylightstudio/FUEL-CMS/commit/47303d707a34e5818724e3124421a9ea6ac6753b
– $replace_id = $this->input->post(‘fuel_replace_id’);
+ $replace_id = (int) $this->input->post(‘fuel_replace_id’, true);
オープンソースのCMSです。
パラメーター値が数値であることを検証しています。
まとめのまとめ
SQLi(SQLインジェクション)はXSS(クロスサイトスクリプティング)と同様に広く知られた脆弱性です。
対策方法も既に確立していますが、今日でも根絶に至っていません。
脆弱性との戦いはこれからも続きます。
担当:TH