まったり技術ブログ

主にWebエンジニア向けのセキュリティブログ。たまに開発も

GitHubのCode Scanningを使ってみる パート2

f:id:motikan2010:20210202005126p:plain:w500

はじめに

 この記事は先日書いた「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 を含んだコードのプルリクを作成したので、想定通りであれば脆弱性が検出されるはずです。

 スキャン結果は下画像の通り脆弱性が検出されました。

f:id:motikan2010:20210201223220p:plain

 検出された脆弱性の詳細も確認することもできます。

f:id:motikan2010:20210201230111p:plain

Directory Traversal

 次は Directory Traversal の脆弱性 です。

先ほどと同様に脆弱性が検出されました。

f:id:motikan2010:20210201223224p:plain

 脆弱性の詳細は下画像の通りです。

f:id:motikan2010:20210201230115p:plain

XML External Entity 攻撃

 最後は XML External Entity 攻撃 です。

この脆弱性も検出されました。

f:id:motikan2010:20210201223228p:plain

 脆弱性の詳細も先ほとど同様に下の画像の通り表示されました。

この詳細には脆弱性の修正方法も記載されているので、次はこの記載に従ってソースコードを修正し、脆弱性が検出されなくなったことを確認していきます。

f:id:motikan2010:20210201230119p:plain

脆弱性を修正

 ここで修正していく脆弱性は「XML External Entity 攻撃」です。

 修正前のアプリケーションに対しては攻撃が成功できることが確認できます。

f:id:motikan2010:20210202002512p:plain
脆弱性の修正前

 検出された脆弱性の詳細の下部に脆弱性の修正方法が記載されています。
XML External Entity 攻撃 の場合は下画像のように表示されています。
f:id:motikan2010:20210201230127p:plain

修正方法として

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);

 先ほどの脆弱性が検出されたコードにこの修正を加えてみて、再度スキャンを実行してみます。

 スキャン結果:脆弱性が検出されなくなりました。
f:id:motikan2010:20210202001914p:plain

 修正後のアプリケーションに対して攻撃をしてみます。結果はエラーとなり攻撃は成功せず脆弱性は修正されたことが確認できます。

f:id:motikan2010:20210202002416p:plain
脆弱性の修正後

 アプリケーション側のエラーメッセージからXML解析に制限が掛かっていることが確認できます。

f:id:motikan2010:20210202002310p:plain
XML解析に制限が掛かっている

まとめ

 今回は3種類の脆弱性を Code Scanning で検出できるのかを確認してみましたが、問題なく検出することができました。
そして検出された脆弱性に関しては、検出レポート通りにアプリケーションを修正することで脆弱性が検出されなくなることも確認できました。

 Code Scanning は脆弱性を検出するためのツールですが、検出レポートの説明が詳細に記載されているためセキュリティの学習のツールとしても活躍しそうです。
(学習者が事前に脆弱性の含んだアプリケーションを修正するなど...)

参考

更新履歴

  • 2021年2月1日 新規作成