Azure FunctionsにLog4Jの脆弱性の暫定対策を実施

はじめに

2021年12月10日に発覚したJavaのログ出力ライブラリ「Apache Log4j」にて、深刻な脆弱性「CVE-2021-44228」があることが発覚しています。

https://milestone-of-se.nesuke.com/sv-advanced/sv-security/cve-2021-44228-log4shell-logjam/

上記について、暫定的な回避策として、以下の2点が公開されています。

    1. Log4j バージョン 2.10 およびそれ以降
    • Log4j を実行する Java 仮想マシンを起動時に「log4j2.formatMsgNoLookups」という JVM フラグオプションを指定する
    • 環境変数「LOG4J_FORMAT_MSG_NO_LOOKUPS」を「true」に設定する
    1. Log4j バージョン2.10 より前
    • JndiLookup クラスをクラスパスから削除する

https://msrc-blog.microsoft.com/2021/12/11/microsofts-response-to-cve-2021-44228-apache-log4j2/

通常の物理サーバまたは、仮想サーバ上でJavaアプリケーションを動作させているケースと違い、 サーバレスのAzure Functionsの場合、どのように設定すればいいのか分からないという方もいるかと思われます。

本記事では、Azure Functions に対して、上記の1.Log4j バージョン 2.10 およびそれ以降への回避策を設定する方法を紹介します。

Azure Functionsのアプリケーション設定に環境変数を追加

Azure Functionsには、アプリケーション設定という、Functions内で利用することができる環境変数を定義することができる項目があります。

以下のAzure CLIコマンドを実行することで、Azure Functionsのアプリケーション設定に変数を追加することができます。

az webapp config appsettings set -g "リソースグループ名" -n "関数アプリ名" --settings JAVA_OPTS='-Dlog4j2.formatMsgNoLookups=true'
az webapp config appsettings set -g "リソースグループ名" -n "関数アプリ名" --settings LOG4J_FORMAT_MSG_NO_LOOKUPS='true'

おわりに

本記事では、Azure FunctionsにLog4Jの脆弱性の暫定対策を設定する方法を紹介しました、