CXX.SV.PERSISTENT_COOKIE

永続的な cookie の不正使用

Web サイトでアプリケーションがセッション cookie ではなく永続的な cookie を変更のトラッキングに使用している場合、Klocwork は CXX.SV.PERSISTENT_COOKIE 欠陥を報告します。

脆弱性とリスク

永続的な cookie は、削除または期限切れになるまでクライアントデバイスに残ります。攻撃者が Web アプリケーションユーザーの永続的な cookie を再利用して、そのユーザーになりすましたり、セッションをハイジャックする可能性があります。cookie が残る期間が長くなるほど、cookie が攻撃者に悪用されるリスクが高くなります。

軽減と防止

一般的な軽減策は、cookie に保存されている情報がユーザーセッションの終了後に破棄されて再利用できないようにすることです。そのために役立つ方法として、セッション cookie があります。セッション cookie では、デバイスに関する情報が保持されたり、デバイスから情報が送信されたりすることはありません。セッション cookie は、セッションが期限切れになるか、またはブラウザーウィンドウが閉じられてセッションが終了すると、削除されます。

セッションハイジャックのリスクを減らすため、必ず永続的な cookie ではなくセッション cookie が生成されるように cookie 作成プロセスを構成してください。cookie の生成に使用されるフレームワークを見直し、セッション cookie が正しく生成されていることを確認してください。使用されるフレームワークによっては、cookie の有効期限を設定するために無効な日付を指定することが必要になる場合があります。

脆弱コード例 1

コピー
void create_cookie()
{
    QNetworkCookie cookie;
    cookie.setExpirationDate(QDateTime::currentDateTimeUtc().addSecs(60));  //CXX.SV.PERSISTENT_COOKIE
}

Klocwork が 4 行目で CXX.SV.PERSISTENT_COOKIE 欠陥を報告し、有効な日付が setExpirationDate() API に渡されているため、永続的な cookie が使用されていることを示します。

修正コード例 1

コピー
void create_cookie()
{
    QNetworkCookie cookie;
    cookie.setExpirationDate(0);    //no CXX.SV.PERSISTENT_COOKIE as invalid date is passed as argument
}

無効な日付を使用して setExpirationDate() API が呼び出されるので、Klockwork が CXX.SV.PERSISTENT_COOKIE 欠陥を報告しなくなります。この場合、セッション cookie が作成されています。有効期限が指定されていない場合、cookie は「セッション cookie」とみなされ、アプリケーションの終了時またはセッションの終了時に破棄されます。

拡張機能

チェッカーにパラメーターを追加し、API によって cookie 作成ライブラリの有効期限が設定されるようにして、このチェッカーを拡張することができます。詳細については、C/C++ 解析のチューニングを参照してください。