有名事故・脆弱性7分で読める

Log4Shell(CVE-2021-44228)— ログ出力ライブラリの脆弱性と、使っているかすぐに確認できなかった理由

2021年12月、Javaのログ出力ライブラリLog4jにCVSS 10.0のリモートコード実行の脆弱性が見つかりました。別のライブラリ経由で影響を受ける推移的依存の問題と、SBOM・依存監視の教訓を解説します。

本文を読む
公開日
更新日
目次

過去の大きな事件を、攻撃の再現ではなく「いま自分の運用に効く教訓」に絞って振り返ります。

2021/12
発覚
10.0
CVSS(最悪クラス)
推移的依存
問題の核心
複数
後続の追随CVE

何が起きたか:ログを出力する処理が攻撃経路になった

Log4j は、ログを出力するというごくありふれた処理を担うライブラリで、Javaのアプリケーションに非常に広く使われていました。問題は、ログに含まれる文字列の中の特定の記述を、ライブラリが「外部を参照して解決する」機能として解釈し、結果として外部から指定されたコードを実行してしまう点にありました。

つまり、攻撃者が「ログに残るような場所」(ユーザー名、HTTPヘッダ等)に細工した文字列を入れるだけで、サーバー側でコード実行に至り得た。ログ出力という受け身の処理が攻撃経路になったことは、大きな驚きをもって受け止められました。

なぜ影響の有無をすぐに確認できなかったのか

多くのアプリは Log4j を直接入れた覚えがありません。フレームワークやSDKが内部で使っていたのです。これが**推移的依存(transitive dependency)**です。依存の依存の、そのまた依存。自分の「部品表」を持っていないと、影響の有無すら判断できませんでした。

あなたのアプリ(package.json に1行)
└─▶
フレームワーク / SDK(直接の依存)
└─▶
ロギング部品(依存の依存)
└─▶
Log4j ← ここに脆弱性(直接入れた覚えなし)
あなたが入れたのは1つでも、その奥に何十もの「依存の依存」がある。Log4jはその中に含まれていた。

最大の問題は、使っているかどうかを把握できなかったこと

「使っているか分からない」状態では、対処の優先順位も付けられません。自分の部品表(SBOM)を持っているかで、初動の速さが大きく変わりました。

時系列

  1. 2021-12-09〜10

    脆弱性が広く知られ、世界中が一斉に「うちは影響あるか」の確認に走る。
  2. 直後

    緊急パッチ適用と暫定緩和策が走る。攻撃の試行も急増。
  3. その後

    修正の不備を直す追随CVEが複数公表。「一度直した」では終わらなかった。

いま効く教訓

1

SBOM(部品表)を持つ

自分のアプリが内部で何を使っているかを可視化する。npm ls / ロックファイル / SBOM生成ツールで「実際に動いている依存」を把握。「直接入れたもの」だけ見ても足りない。

2

依存を機械で監視する

CVE が出た瞬間に、該当するかを自動判定(Dependabot / osv-scanner)。推移的依存まで含めて検査できるのが機械監視の強み。人力の巡回では必ず見落とす。

3

パッチ運用を速くする

緊急時に「すぐ上げて検証して出す」が回せるよう、普段から更新作業に慣れておく。依存追従のしくみも参照。

4

追随CVEまで追う

Log4Shell以降、修正の修正が複数出た。「一度直した」で打ち切らず、続報まで追いかける。

次に読む

出典と確認範囲

以下は上記の設定・影響範囲・対策を確認するための原典です。2026年10月23日に参照先を確認しました。各版・構成の条件は原典で確認してください。チェックリストの優先順位や教訓は当サイトの整理であり、記事全体の再検証や安全性の保証を意味しません。

よくある質問

QLog4Shellは何が新しい問題だった?
A

『自分が直接入れた覚えがなくても、別のライブラリの中で使われていて脆弱』という、推移的依存(transitive dependency)の危険を世界規模で明らかにした点です。自分のSBOM(部品表)を把握していないと、影響有無すら判断できませんでした。

Qなぜログ出力が攻撃経路になったの?
A

Log4jが、ログ文字列の中の特定の記述を『外部を参照して解決する』機能として解釈したためです。攻撃者は、ログに残る場所(ユーザー名・HTTPヘッダ等)に細工した文字列を入れるだけでよく、受け身のはずのログ出力が実行経路になりました。

Q同じことを繰り返さないには?
A

①依存を機械で監視(Dependabot/osv-scanner)して該当CVEを自動検知、②SBOMを生成して『何を使っているか』を可視化、③パッチを素早く当てる運用、の3点です。追随CVE(修正の修正)まで追うことも重要です。