セッションポイズニング(「セッションデータ汚染」や「セッション改ざん」とも呼ばれる)は、サーバーアプリケーション内の入力検証の不備を悪用する手法です。通常、この種の攻撃に対して脆弱なサーバーアプリケーションは、ユーザー入力をセッション変数にコピーします。
根本的な脆弱性は状態管理の問題であり、共有状態、競合状態、使用上の曖昧さ、または保護されていない状態値の変更などが原因となる。
セッションポイズニングは、異なる悪意のないアプリケーション(スクリプト)が同じセッション状態を共有しながらも、使用方法が異なるサーバー環境で実証されており、曖昧さや競合状態を引き起こします。
セッションポイズニングは、攻撃者がサーバー環境に悪意のあるスクリプトを導入できるシナリオで実証されており、これは攻撃者と被害者が同じウェブホストを共有している場合に起こり得る。
セッションポイズニングは、フルディスクロージャーメーリングリストで(潜在的に新しい)脆弱性クラスとして初めて議論されました。 [ 1 ] アラ・ベズロウチコは、2006年1月に「Webアプリケーションにおけるセッションデータ汚染の脆弱性」が新しい問題かどうかを尋ねました。しかし、これは以前に他の人によって指摘された古い脆弱性でした。「これは典型的な状態管理の問題です」 - イヴァン・ボイリー[ 2 ]「これは新しいものではありません」 - 誰か[ 3 ]
これらの脆弱性の以前の例は、 Bugtraqなどの主要なセキュリティリソース/アーカイブで見つけることができます。
セッション汚染については、PHP Session Security、Przemek Sobstel、2007 などの記事でも取り上げられています。[ 6 ]
この問題の影響を受けやすいコード例を以下に示します。
セッション("ログイン") = リクエスト("ログイン") セッション("ユーザー名") = リクエスト("ユーザー名") これは、次のような些細な攻撃の対象となる。
vulnerable.asp?login=YES&username=Mary
この問題は、ソフトウェアで発生する可能性があります。
logon.aspMaryチェックされた場合、logon.asp転送先vulnerable.asp?login=YES&username=Mary問題は、このスクリプトがvulnerable.aspページへのアクセスが悪意のない方法でのみ行われることを前提として設計されている点です。スクリプトの設計方法を理解した者であれば誰でも、ログオンユーザーを任意に設定するHTTPリクエストを作成することが可能です。
Alla Bezroutchkoは、2つの異なる目的で使用されるシナリオについて論じている$_SESSION['login']。[ 7 ]
競合状態が実証され、リセットスクリプトを悪用することで、ログインしているユーザーを任意に変更できることが示された。
Alla Bezroutchkoは、開発フォーラムで観察された例について議論しており、これにより任意のセッション変数に書き込むことが可能になる。[ 8 ]
最初の例は
$var = $_GET [ "何か" ]; $_SESSION [ " $var " ] = $var2 ;(ここで、$_GET["something"]はおそらく選択ボックスかそれに類するものです。)
攻撃は
vulnerable.php?something=SESSION_VAR_TO_POISON
php.ini: register_globals = onこの機能には、複数のアプリケーションにおけるセキュリティ脆弱性を引き起こすことが知られています。PHPサーバー管理者は、この機能を無効にすることをお勧めします。
注: register_globals = on によって有効化されるセッションポイズニングの実際の例は、2001 年 7 月の記事「Mambo Site Server バージョン 3.0.X の深刻なセキュリティホール」で公開されました。[ 9 ]
/someoneによる2番目の例は[ 10 ]です
if ( $condition1 ) { $var = 'SOMETHING' ; }; if ( $condition2 ) { $var = 'OTHER' ; }; $_SESSION [ " $var " ] = $var2 ;次のような場合に脆弱になります。
攻撃は
vulnerable.php?var=SESSION_VAR_TO_POISON
uw-team.org の「unknown」は、攻撃者と被害者が同じ PHP サーバーを共有するシナリオについて議論しています。[ 11 ]
攻撃はかなり簡単だ。
この攻撃に必要なのは、被害者と攻撃者が同じPHPサーバーを共有していることだけです。攻撃者がセッション識別子クッキーをあるクッキードメインから別のクッキードメインに移動するのは容易であるため、被害者と攻撃者が同じ仮想ホスト名を持っている必要はありません。