はじめに
この記事は先日書いた「GitHubのCode Scanningを使ってみる」の続きです。
Code Scanning の導入は下の記事を参照ください。
blog.motikan2010.com
前回は GitHub Code Scanning によって「SQL Injection」、「Insecure Deserialization(安全でないデシリアライゼーション)」、「Cross-Site Scripting(XSS)」が検出されるのかを検証しました。
本記事では前回に引き続き下記3つの脆弱性が検出されるのかを確認していきます。
- RCE (Remote Code Execution)
- Directory Traversal
- XML External Entity 攻撃
さらに今回は脆弱性の検出有無の確認だけでなく、Code Scanning の検出レポートを参考に脆弱性の修正し、脆弱性が検出されなくなったことも確認します。
スキャン実行
前回と同様に脆弱性を含んだ Java(Spring Boot) のアプリケーションで確認していきます。
下のリポジトリが脆弱性を含んだアプリケーションです。 github.com
スキャン結果の内容については前回の記事で説明しているため流す程度にします。
RCE (Remote Code Execution)
最初は RCE (Remote Code Execution) の確認です。
Code Scanning はプルリク作成時に実行されます。 RCE を含んだコードのプルリクを作成したので、想定通りであれば脆弱性が検出されるはずです。
スキャン結果は下画像の通り脆弱性が検出されました。
検出された脆弱性の詳細も確認することもできます。
Directory Traversal
次は Directory Traversal の脆弱性 です。
先ほどと同様に脆弱性が検出されました。
脆弱性の詳細は下画像の通りです。
XML External Entity 攻撃
最後は XML External Entity 攻撃 です。
この脆弱性も検出されました。
脆弱性の詳細も先ほとど同様に下の画像の通り表示されました。
この詳細には脆弱性の修正方法も記載されているので、次はこの記載に従ってソースコードを修正し、脆弱性が検出されなくなったことを確認していきます。
脆弱性を修正
ここで修正していく脆弱性は「XML External Entity 攻撃」です。
修正前のアプリケーションに対しては攻撃が成功できることが確認できます。
検出された脆弱性の詳細の下部に脆弱性の修正方法が記載されています。
XML External Entity 攻撃 の場合は下画像のように表示されています。
修正方法として
The best way to prevent XXE attacks is to disable the parsing of any Document Type Declarations (DTDs) in untrusted data.
と記載されていますので、 DTD(Document Type Definition) を無効にすれば良さそうです。
そして無効化するためのサンプルコードも記載されています。下記のコードを追加すればよさそうです。
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
先ほどの脆弱性が検出されたコードにこの修正を加えてみて、再度スキャンを実行してみます。
スキャン結果:脆弱性が検出されなくなりました。
修正後のアプリケーションに対して攻撃をしてみます。結果はエラーとなり攻撃は成功せず脆弱性は修正されたことが確認できます。
アプリケーション側のエラーメッセージからXML解析に制限が掛かっていることが確認できます。
まとめ
今回は3種類の脆弱性を Code Scanning で検出できるのかを確認してみましたが、問題なく検出することができました。
そして検出された脆弱性に関しては、検出レポート通りにアプリケーションを修正することで脆弱性が検出されなくなることも確認できました。
Code Scanning は脆弱性を検出するためのツールですが、検出レポートの説明が詳細に記載されているためセキュリティの学習のツールとしても活躍しそうです。
(学習者が事前に脆弱性の含んだアプリケーションを修正するなど...)
参考
更新履歴
- 2021年2月1日 新規作成