最近公開された CodeGuru Reviewer Detector Libraryがかなり良かったので紹介したい

2022.02.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

CodeGuru Reviewerでログインジェクション脆弱性を検出してくれるようになりました。
また、それとあわせてCodeGuru Reviewer Detector Libraryというドキュメントが公開されたので本日はこちらの紹介を兼ねて、ログインジェクション脆弱性検出の確認をしてみます。

ログインジェクション脆弱性検出

昨年末、Log4j2でのRCE脆弱性が話題になっていました。
AWSでもWAFマネージドルールが追加されていたり、各サービスの更新が行われています。

Update for Apache Log4j2 Security Bulletin (CVE-2021-44228)

今回のアップデートで、log4j2に限らずロガーに対してサニタイジングされていない入力が与えられている箇所が検出されるようになったようです。

CWE - CWE-117: Improper Output Neutralization for Logs (4.6)

CodeGuru Reviewer Detector Libraryとサンプルリポジトリ

次に、CodeGuru Reviewer Detector Libraryを紹介します。
CodeGuru Reviewer Detector Libraryは、簡単にいうとCodeGuru Reviewerで検出される項目の詳細情報がまとめられたドキュメントリソースです。

CodeGuru Reviewer Detectorで検出される項目がまとめられておりどの脆弱性に紐付いているか、準拠サンプルコードと非準拠サンプルコードなどがまとめられています。

言語はJavaとPythonのドキュメントが用意されています。

ログインジェクション脆弱性検出をためしてみる

Detector Libraryを参考に脆弱性検出を試してみました。
まぁここはドキュメントとおり実行して検出されて、「せやな」って感じになるだけなのであまり意味はないですが。

CodeCommitの事前にCodeGuru Reviewerを関連付けしたリポジトリへ脆弱性を含むコードをプッシュしてプルリクエストを作成します。

import logging
logger = logging.getLogger(__name__)

def logging_noncompliant():
    filename = input("Enter a filename: ")
    logger.info("Processing %s", filename)

CodeGuru Reviewerのジョブが自動実行されました。
プルリクエストごとに自動でレビューしてくれます。これ本当に便利だなぁ。

検出されましたね。
冒頭で紹介させて頂いたログインジェクション脆弱性に関する検出です。

ではこちらを準拠コードに変更します。
isalnumである必要はなく、正規表現での検証なども有効です。

import logging
logger = logging.getLogger(__name__)

def logging_noncompliant():
    filename = input("Enter a filename: ")
    if filename.isalnum():
        logger.info("Processing %s", filename)

検出されなくなりましたね。

さいごに

最初 Detector Libraryはおまけで紹介しようと思ったのですが、とても良かったです。
CodeGuru Reviewerでの利用に関わらず、一般的なセキュアコーディングのための参考資料にもなると思います。
Twelve-Factor Appのように色々なシーンで引用したいドキュメントだなと思いました。

そして、Detector Libraryでチェックされる項目を眺めていたのですが、セキュリティ上必須といえる様々な処理を自動でレビューし検出してくれるCodeGuru Reviewerはやはりすごい。
「よくわからないけど自動で何かを検出してくれる何か」みたいな印象が少しあったのですが(※AWSドキュメントではDetectorでどういう検出がされるかはこれまでも言及はちゃんとされています)、Detector Libraryがかなり見やすいので、CodeGuru Reviewerを訴求するためのドキュメントとしても活用できそうだと思いました。