WordPressのプラグイン「WP Contacts Manager」における SQLインジェクションの脆弱性とその対策について
WordPress向けプラグイン「WP Contacts Manager」において、SQLインジェクションの脆弱性が報告されました。SQLインジェクションは現在でも多数報告され続けていることから、改めてSQLインジェクション、併せてオープンソースソフトウェアの対策についてご紹介いたします。
このニュースはこちらよりPDFファイルにてご覧いただくことができます。
1. 概要
2022年5月、WordPress向けプラグイン「WP Contacts Manager」において、SQLインジェクションの脆弱性(CVE-2022-1014)が報告されました。この脆弱性の悪用により、データベースへの攻撃が認証不要で可能なため、CVSS 3.1にてベーススコア「9.8 CRITICAL」と高い数値となっています。SQLインジェクションは古典的な脆弱性でありながら、現在でも多数報告され続けており、発生する被害も大きいことから、今回は改めてSQLインジェクションについて対策の必要性の観点で説明し、併せてオープンソースソフトウェアの対策についてご紹介いたします。
2. 2.SQLインジェクションとは
Webアプリケーションは、ユーザが入力した値を元にデータベースにアクセスし、情報の参照や更新などを行う場合があります。ユーザが入力した値が仕様想定外の場合には、エラー処理や入力値を文字列として扱うなどの処理を行います。SQLインジェクションとは、このような処理の欠如を原因として、攻撃者が入力したSQL文によるデータベースの不正な閲覧や改ざんを可能とする脆弱性、またはその攻撃を指します。 攻撃者がWebアプリケーションに対してSQLインジェクションで攻撃する場合を図にすると次のようになります。
【図1】SQLインジェクションの概要
攻撃例:認証を回避してのログイン ■通常のログイン 利用者がログイン画面からユーザID、パスワードにてログインを実行する場合 ①ユーザID「user1」、パスワード「password1」を入力してログインを実行する。 ②リクエストの入力値からSQL文「SELECT * user_table FROM WHERE user=’user1’ and pass=’password1’」がWebアプリケーションにて作成される。 ③上記SQL文がデータベースにて実行され、ユーザIDとパスワードが一致していることを確認しログインが成功する。 ■SQLインジェクションを使用しての不正ログイン 攻撃者がログイン画面からパスワードを入力せずに不正ログインする場合 ①攻撃者がユーザID「user1」、パスワード「’ or ‘1’ = ‘1」を入力してログインを実行する。 ②リクエストの入力値から不正なSQL文「SELECT * user_table FROM WHERE user=’user1’ and pass=’’ or ’1’ = ‘1’」がWebアプリケーションにて作成される。 ③上記SQL文をデータベースにて実行され、パスワードの入力なしで不正なログインが成功する。 (このSQL文はパスワードの入力がなくても毎回、正しい結果になる)
3. 攻撃による影響
攻撃が成功した場合、次のような影響が発生する場合があります。 ・データベース内の情報を攻撃者が入手し、アカウントや氏名、住所などの個人情報が外部に漏えいする。 ・データベース内の情報を攻撃者に改ざんや削除される。 ・データベース内のユーザIDとパスワードを使用するログイン認証にて不正にログインし、Webサイトを改ざんされる。 このように被害が大きくなるケースが多いのがこの脆弱性の特徴ですのでWebアプリケーション開発時から対策をとることが重要となります。
4. 今回脆弱性が報告されたWordPressのプラグインにおける脆弱性について
WordPressとはコンテンツマネジメントシステム(CMS)の一つで、Webアプリケーション開発の専門知識がなくても比較的容易にWebページを作成することができるオープンソースソフトウェアです。Web技術調査サービス「W3Techs」の調査では WordPressの世界でのシェアは6割以上、日本国内でのシェアは8割を超えています。WordPressはプラグインを使用することで必要な機能を追加することが可能で、WordPressと同様にプラグインも多用されています。 今回脆弱性が公表された「WP Contacts Manager」も、氏名やメールアドレスなどの管理機能を持つWordPress用プラグインの一つです。 WordPressとプラグインは無償で利用可能なものが多く、世界でのシェアも高いことから、攻撃者の標的にもなりやすく、これまでにWordPress及びプラグインの脆弱性は多数報告されています。 WordPressの脆弱性をついた攻撃については過去に弊社のe-Gateセキュリティニュースで取り上げております。詳細は下記ニュースをご参照ください。 ・注意喚起:WordPressの脆弱性を突いた攻撃の増加について https://www.ssk-kan.co.jp/wp/topics/topics_cat05/?p=11795
5. オープンソースソフトウェアの対策
オープンソースソフトウェア利用時のSQLインジェクション対策としては以下が考えられます。 ■開発時の対策 ・オープンソースソフトウェアを使用する場合は、既知の脆弱性の存否を確認する。 オープンソースソフトウェアやプラグインなどを利用する場合、利用するバージョンを確認した上でJVN(脆弱性対策情報データベース)などを活用して、すでに公開されている脆弱性の存否を確認する。 JVNのURL https://jvndb.jvn.jp/ 公表されている脆弱性はあくまでも過去に発見された脆弱性ですので、まだ発見・公表されていない脆弱性 (ゼロデイ脆弱性)が無いとも限りません。そのため、使用する機能について下記の対策をとることをお勧めします。 ・プリペアドステートメントを使用する ユーザからの入力値を反映させてSQL文の文字列を作成するときに、通常の文字列連結を使用せずに、プリペアドステートメントを使用してSQL文を組み立てる。 ・エスケープ処理をする シングルクォート「’」、バックスラッシュ「\」などSQLの構文を変化させられる特殊記号に対してエスケープ処理を行う。 ・入力値を検証する ユーザからの入力値を検証し不要な文字が含まれる場合にはSQL文を実行せず、エラーを出力する。 ・詳細なエラーメッセージを非表示にする エラーメッセージにデータベースの種類やエラーの原因、SQL文等の詳細な情報が含まれると、攻撃につながる有用な情報となったり、攻撃結果の出力箇所となったりするため、表示しないようにする。 ・データベースのアカウント権限を最小限にする 攻撃を受けた際の被害をなるべく小さく抑えるために、Webアプリケーションがデータベースに接続する際に使用するアカウントの権限を最小限にする。 ■運用時の対策 ・バージョンを管理する オープンソースソフトウェアなどは新しい脆弱性が発見・公表されることがあるため、現在利用中のバージョンでの新しい脆弱性の有無などを前述のJVNなど活用して定期的に確認する運用体制を整える。 ・WAFを導入する WAFなどのセキュリティ機器を導入して、開発時の対策に漏れがあった場合にも攻撃を検知、防御できるようにする。 今回は開発時の対策と運用時の対策について列挙しました。 このような対策をとり、被害を最小限にする取組が重要となります。
6. e-Gateの脆弱性診断サービスについて
当社診断サービスでもSQLインジェクションについては毎年10%前後検出されています。検出数は減少していますが、検出され続けていることが分かります。この傾向から完全に取り除くことが難しい脆弱性であることが考えられます。SQLインジェクションは被害が大きいことから、万が一にも脆弱性が混入しないよう開発が必要だと当社は考えます。
【図2】2019年1月~2022年6月に実施したWebアプリケーション診断全案件のうち SQLインジェクションが検出された案件の割合
e-Gateの脆弱性診断サービスでは、お客様のシステムにて潜在する脆弱性を診断し、検出されたリスクへの対策をご提案させていただいております。
■総合セキュリティサービス 「e-Gate」
SSK(サービス&セキュリティ株式会社)が40年以上に渡って築き上げてきた「IT運用のノウハウ」と最新のメソッドで構築した「次世代SOC“e-Gateセンター“」。この2つを融合させることによりお客様の情報セキュリティ全体をトータルにサポートするのがSSKの“e-Gate”サービスです。e-Gateセンターを核として人材・運用監視・対策支援という3つのサービスを軸に全方位のセキュリティサービスを展開しています。
【参考URL】
https://www.ssk-kan.co.jp/wp/e-gate/
7. 参考
・NVD CVE-2022-1014 https://nvd.nist.gov/vuln/detail/CVE-2022-1014
・独立行政法人情報処理推進機構 (IPA) 安全なウェブサイトの作り方 https://www.ipa.go.jp/security/vuln/websecurity-HTML-1_1.html
安全なSQLの呼び出し方 https://www.ipa.go.jp/security/vuln/websecurity.html#sql
・W3Techs https://w3techs.com/
※本資料には弊社が管理しない第三者サイトへのリンクが含まれています。各サイトの掲げる使用条件に従ってご利用ください。
リンク先のコンテンツは予告なく、変更、削除される場合があります。
※掲載した会社名、システム名、製品名は一般に各社の登録商標、または商標です。
≪お問合せ先≫
サービス&セキュリティ株式会社
〒150-0011
東京都渋谷区東3丁目14番15号 MOビル2F
TEL 03-3499-2077
FAX 03-5464-9977
sales@ssk-kan.co.jp