GitHubのセキュリティ機能を使って、コードベースにおけるLog4jの影響範囲を特定する

Image of Brittany O'Shea

人気Javaライブラリ「Apache Log4j」の2.16.0より前のバージョンに脆弱性が含まれているというニュースが、世界中で注目されています。この脆弱性が悪用されると、攻撃者は被害者のシステム上でリモートからコードを実行することができるようになります。GitHubのセキュリティチームは最近、GitHub.com、GitHub Enterprise Cloud、GitHub Enterprise Serverにおけるこの問題への対応方法をブログで共有しました。このブログ記事では、GitHubのセキュリティ機能を使用して、どのように影響範囲を評価し、対処することができるかについて詳しく説明します。

修正方法

現在、本脆弱性の影響を軽減するための最も推奨されている解決策は、アプリケーション内で使われている Log4j をバージョン 2.16.0 にアップグレードすることです。もし、バージョン 2.16.0 に更新できない場合、アプリケーションのクライアント側とサーバー側の両方のコンポーネントで、Dlog4j2.formatMsgNoLookups=true システムプロパティを確実に設定することをお勧めします。

GitHub Dependabotを使用し、影響範囲を特定

GitHub のユーザーで、Maven を使って Java の依存関係を管理している場合、GitHub Dependabot を使って Log4j が明示的に依存関係として定義されている場所をすべて表示することができます。Dependabotを有効にするには、この記事の一番下にあるドキュメントを参照してください。一度有効にすると、アラートとプルリクエストを受け取り、パッチを適用したLog4jのバージョンにアップグレードすることができます。GitHubでは、この脆弱性に関して、すでに175,000件以上のアラートとプルリクエストを送信しています。

Dependabotを有効にすると、Advisory Databaseを使用してLog4jの脆弱性に関するアラートの組織またはサーバー全体のリストを表示できます。

Gradleや他の方法でJavaの依存関係を管理している場合、Dependabotはそれらのリポジトリに対して警告を発しません。GitHubは、DependabotでGradleのサポートを含め機能拡張を継続的に行っています。詳細はパブリックロードマップをご覧ください。

GitHubのコードスキャニングを使用した評価と影響の低減

GitHub Advanced Securityを使っているユーザー、または公開しているオープンソースプロジェクトを管理している方は、試験的ではありますが、CodeQLクエリを開発したので、それを実行することで、GitHubリポジトリ内で影響を受ける可能性のあるコード行を特定することができます。このクエリは、信頼できないユーザーデータがLog4jのロギングステートメントに流れ込む状況を検出します。コードベースが脆弱な Log4j バージョンに依存している場合、このクエリによって生成されるアラートは、ほぼ確実にセキュリティリスクを示しています。

CodeQL CLIを使用してCodeQLクエリを実行するか、CodeQLワークフロー設定内のqueriesディレクティブを使用してカスタムクエリを設定することで、GitHubコードスキャンでクエリを有効にすることが可能です。

まとめ

エンジニアコミュニティ全体が影響度の評価とパッチの適用に迅速に取り組んでいますが、GitHubユーザーには、全体的な対応の一環としてDependabotを有効にすることを推奨します。これは、影響範囲の全体像を提供するものではありませんが、迅速にパッチを適用できる明示的な依存関係を素早く特定することができます。GitHub Advanced Securityのユーザーの皆様は、GitHubが試験的に作成したCodeQLクエリの利用も検討してください。

DependabotやGitHubのコードスキャニングや、CodeQLの有効化について不明点がある場合は、以下のドキュメントをご参照いただくか、当社の営業担当にご相談ください。