コードインジェクション
コードインジェクション とは何ですか?
コードインジェクション攻撃者が与えたデータがアプリケーションによってコードとして解釈・実行される脆弱性の総称。任意コード実行に直結する。
コードインジェクション(CWE-94)は、信頼できない入力が、後段でプログラムコードとして解釈される箇所に組み込まれ、ランタイムにより実行されてしまう脆弱性の総称です。OS シェルに到達するコマンドインジェクションと異なり、コードインジェクションはアプリ自身のインタプリタ内で実行されます。具体例として、JavaScript や Python の eval 注入、サーバサイドテンプレート注入、式言語注入(OGNL、SpEL)、ガジェットチェーンを誘発する安全でないデシリアライズ、ユーザデータに基づく動的クラスロードなどがあります。攻撃が成功すると、アプリケーションの権限でリモートコード実行となり、ホストやクラスタ全体への侵入につながることが多い深刻な問題です。
3 つの代表例が影響の大きさを示します。Apache Struts CVE-2017-5638 は、不正な Content-Type ヘッダー内の OGNL 式を実行可能にし、未パッチのインスタンスが 2017 年の Equifax 侵害(約 1 億 4700 万件流出)を引き起こしました。Log4Shell(CVE-2021-44228)(CVSS 10.0)は、JNDI ルックアップを含む任意のログ文字列を Java クラスのリモートロードに変えました。Spring4Shell(CVE-2022-22965) は Spring のデータバインディングを悪用して ClassLoader を操作し、Web シェルを設置しました。
flowchart TD
A[信頼できない入力] --> B{コードを評価するシンクに到達?}
B -->|eval / テンプレート / OGNL / デシリアライズ| C[インタプリタが攻撃者のコードを実行]
B -->|検証 / パラメータ化| D[不活性なデータとして扱う]
C --> E[アプリ権限で RCE]
E --> F[ホスト / クラスタ侵害]
D --> G[安全]対策:入力からコード・テンプレート・式を組み立てないこと、パラメータ化と許可リスト方式の API を使うこと、動的評価とデシリアライズを無効化またはサンドボックス化すること、フレームワークを速やかにパッチすること、そして RCE の影響範囲を最小化するため最小権限で実行することが挙げられます。
● 例
- 01
eval(request.body.expr) によって Node サービスで攻撃者制御の JavaScript が実行される。
- 02
Java アプリがユーザ提供のスクリプトに対し ScriptEngine.eval を呼ぶ。
● よくある質問
コードインジェクション とは何ですか?
攻撃者が与えたデータがアプリケーションによってコードとして解釈・実行される脆弱性の総称。任意コード実行に直結する。 サイバーセキュリティの 攻撃と脅威 カテゴリに属します。
コードインジェクション とはどういう意味ですか?
攻撃者が与えたデータがアプリケーションによってコードとして解釈・実行される脆弱性の総称。任意コード実行に直結する。
コードインジェクション からどのように防御しますか?
コードインジェクション に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
コードインジェクション の別名は何ですか?
一般的な別名: リモートコード実行, 任意コード実行。