Apache Log4j 2 CVE-2021-44228

更新日:2021年12月13日

CVE-2021-44228の更新として、バージョン2.15.0で行われた修正は、特定のデフォルト以外の構成では不完全でした。追加の問題が特定され、 CVE-2021-45046で追跡されています。 この脆弱性をより完全に修正するには、Log4j2 2.16.0 に更新することをお勧めします。 

————————————————————————————-

以下の元の投稿が更新されました:

2021年12月15日 12:49 PT

CVSSスコアが10.0である、新しく深刻なLog4j2の脆弱性 CVE-2021-44228の修正に多くの人が取り組んでいることを私たちは知っています。 Log4Shellという名前で、この脆弱性に取り組んでいるすべての人に #hugops と最高の願いを送ります。 非常に一般的なJavaロギングライブラリであるLog4j 2のこの脆弱性により、多くの場合、攻撃者が簡単に利用できるコンテキストからリモートでコードが実行される可能性があります。 たとえば、Minecraftサーバーで見つかったため、コマンドがロガーに送信されたときにチャットログにコマンドを入力できました。 これは、ロギングライブラリが非常に広く使用されており、悪用しやすい可能性があるため、非常に深刻な脆弱性になります。 多くのオープンソースメンテナは、ソフトウェアエコシステムの修正と更新に懸命に取り組んでいます。

この困難な時期にできる限りの支援をしたいと考えており、CVEの検出方法や潜在的な緩和策など、可能な限り多くの情報を収集しています。 

より多くの情報が利用可能になり次第、この投稿を更新します。

ログ4jの削除

私は脆弱ですか?

Log4j 2 の脆弱なバージョンは、バージョン 2.0 からバージョン 2.14.1 までです。最初の修正バージョンは2.15.0です。 2.15.0の修正は不完全であり、2.16.0がアップグレードに推奨されるバージョンになりました。 可能であれば 、最新バージョンに更新 することを強くお勧めします。 2.0より前のバージョンを使用している場合も、脆弱ではありません。

これらのバージョンを使用している場合は、構成によって既にこれが軽減されている可能性があるため (以下の「軽減策」セクションを参照)、ログに記録するものにユーザー入力が含まれていない可能性があるため、この脆弱性の影響を受けない可能性があります。 ただし、詳細にログに記録する可能性のあるすべてのコードパスと、それらがどこから入力を取得する可能性があるかを理解していないと、これを検証するのは難しい場合があります。 したがって、脆弱なバージョンを使用してすべてのコードをアップグレードすることをお勧めします。

の構成 ドッカースキャン コマンド Docker Desktop バージョン 4.3.0 以前で以前に出荷されましたが、残念ながらスキャンではこの脆弱性が検出されません。 に更新してください ドッカーデスクトップ4.3.1+ドッカースキャン 0.11.0+、本日2021年12月11日にリリースしました。

Linux から使用 docker scan している場合は、 こちらの手順 で説明されているように、 GitHub からバイナリをダウンロード し、プラグイン ディレクトリにインストールできます。Linux CLI バージョンをまもなく更新して、更新されたドッカー スキャンを含める予定です。

更新されたバージョンを使用すると、出力ログに次のようなメッセージが表示されます。

Upgrade org.apache.logging.log4j:[email protected] to org.apache.logging.log4j:[email protected] to fix
  ✗ Arbitrary Code Execution (new) [Critical Severity][https://snyk.io/vuln/SNYK-JAVA-ORGAPACHELOGGINGLOG4J-2314720] in org.apache.logging.log4j:[email protected]
    introduced by org.apache.logging.log4j:[email protected]

これをテストするには、脆弱なイメージ (たとえば、このイメージに脆弱なバージョンが含まれているなど) を確認します。

docker scan elastic/logstash:7.13.3

または、他のすべての脆弱性を切り取るために

docker scan elastic/logstash:7.13.3 | grep 'Arbitrary Code Execution'

Docker スキャンの詳細については、 ドキュメントを参照してください。

ドッカーハブスキャン

更新: 2021 年 12 月 13 日 1700 UTC 以降の Docker Hub セキュリティ スキャンで、Log4j2 の脆弱性が正しく識別されるようになりましたこの日付より前のスキャンには、現在この脆弱性は反映されていません。 これを修正する方法を検討しており、修正したらこの投稿を更新します。 2021年12月13日1700UTCより先にプッシュされた画像については、上記の更新バージョンから使用 docker scan してください。

緩和 策

軽減および修正プロセスの最初の部分として Web アプリケーション ファイアウォール (WAF) を使用することをお勧めします。

この問題は、以前のリリースの Log4j 2 (<2.16.0) では、クラスパスから JndiLookup クラスを削除することで軽減できます。

例:

zip -q -d
log4j-core-*.jarorg/apache/logging/log4j/core/lookup/JndiLookup.class

Docker 公式イメージ

多くのDocker公式イメージには、Log4j 2の脆弱なバージョンが含まれています。Docker 公式イメージの現在のステータス更新については 、https://docs.docker.com/security/ を参照してください。

ドッカーハブ上の他の画像

Docker 検証済み発行元と協力して、影響を受けるイメージを特定して更新しています。 影響を受ける画像を表示する方法を検討しており、より多くの情報が得られ次第、この投稿を更新し続けます。

Dockerのインフラストラクチャは影響を受けますか?

Docker Desktop および Docker Hub は log4j 2 の脆弱性の影響を受けません。 Dockerは主にGoコードを使用してアプリケーションを構築し、Javaは使用しません。 一部のJavaアプリケーションを内部で使用していますが、CVE-2021-44228およびCVE-2021-45046に対して脆弱ではないことを確認しています。