トップページ サービスの詳細 セキュリティ情報 購読の申し込み
HotFix Report
/セキュリティ用語/

■OSコマンド・インジェクション(OS command injection)
 CGIのリクエストなどにOSコマンドを混ぜ込むことで、サーバ上でOSコマンドを実行させる攻撃。

 CGIで利用されるPerlのopen関数には特別な機能があり、「|」を付けると指定した外部プログラムを起動し、プログラムの標準出力を開くことなどが可能である。この機能は、Perlの仕様であり、sendmailに対してメールの内容を渡す際などによく利用される。

open関数 機能
open(FILE, "path") ファイルを読み込み用でオープン(ファイルが存在しなければエラー)
open(FILE, "<path") ファイルを読み込み用でオープン(ファイルが存在しなければエラー)
open(FILE, ">path") ファイルを上書き用でオープン(ファイルが存在しなければ作成)
open(FILE, ">>path") ファイルを追加用でオープン(ファイルが存在しなければ作成)
open(FILE, "+<path") ファイルを読み書き用でオープン(ファイルが存在しなければエラー)
open(FILE, "+>path") ファイルを読み書き用でオープン(ファイルが存在しなければ作成)
open(FILE, "+>>path") ファイルを読み追加用でオープン(ファイルが存在しなければ作成)
open(FILE, "program |") 外部プログラムを起動し、プログラムの標準出力を開く
open(FILE, "| program") 外部プログラムを起動し、プログラムへの標準入力を開く

 ただし、このような機能があるため、CGIのリクエスト処理を適切に行わないと、リクエストに埋め込まれたOSコマンドがそのまま実行されてしまう危険性がある。最悪の場合は、システム・ファイルが削除されるなどして、システムが破壊される可能性もある。単にファイルをオープンするだけの場合は、sysopen関数を使うことで、OSコマンド・インジェクションの脆弱性を回避できる。またほかの関数でも同様にOSコマンド・インジェクションを引き起こす可能性を持つものがあるので、入出力部で確実にサニタイジングを行うようにプログラミングする必要がある。

 
 
Copyright (C) Digital Advantage Corp.
無断で複製・再配信などを行うことはできません。

HotFix Reportでは、細心の注意を払って情報提供を行っておりますが、本サービスにおける情報の正確性、最新性、適切性などについて、明示的又は黙示的な保証を行いません。また本サービスの停止や欠陥、それらに起因して発生する損失や損害について、一切責任を負いません。