
tough-cookieパッケージのバージョン4.1.3未満は、CookieJarをrejectPublicSuffixes=falseモードで使用する際のCookieの不適切な処理により、プロトタイプ汚染に対して脆弱です。この問題は、オブジェクトが初期化される方法に起因します。
https://nvd.nist.gov/vuln/detail/CVE-2023-26136
プロトタイプ汚染はJavaScriptに影響を与える脆弱性です。プロトタイプ汚染とは、既存のJavaScript言語コンストラクトのプロトタイプ(オブジェクトなど)にプロパティを注入する能力を指します。JavaScriptではすべてのObject属性を変更でき、proto、constructor、prototypeといった特別な属性も含まれます。攻撃者はこれらの属性を操作して、ベースオブジェクトのJavaScriptアプリケーションオブジェクトプロトタイプを上書き(汚染)し、他の値を注入します。Object.prototypeのプロパティは、プロトタイプチェーンを通じてすべてのJavaScriptオブジェクトに継承されます。これが発生すると、JavaScript例外を引き起こすことによるサービス拒否、あるいはアプリケーションのソースコードを改ざんして攻撃者が注入したコードパスを強制し、リモートコード実行につながります。
プロトタイプの汚染が発生する主な方法は2つあります:
重要メモ: https://github.com/salesforce/tough-cookie/issues/282 https://security.snyk.io/package/npm/tough-cookie/2.5.0
=> MemoryCookieStoreクラスの脆弱性を修正するには、cookie.domainが proto に設定された場合にプロトタイプ汚染を防ぐために、putCookieメソッドを変更する必要があります。
https://github.com/salesforce/tough-cookie/pull/283
a. tough_cookie_2.5.0\node_modules\tough-cookie\lib\memstore.js を変更します。
memstore.js 内の新しいオブジェクト作成のすべての箇所が、{} または Object.create(Object.prototype) から Object.create(null) に変更されました。
これにより、汚染可能なプロトタイププロパティを持たないオブジェクトインスタンスを使用します。
b. 新しいファイル /node_modules/tough-cookie/lib/test-unit.js を作成しました。 テストフォルダ内のファイル cookie_jar_test.js "Issue #282 - Prototype pollution" に基づいて、バニラJSで使用します。
コマンド: node test-unit.js
c. 新しいファイル /node_modules/tough-cookie/lib/testVerifyVulnerable.js を作成しました。 脆弱な動作が修正されたことを検証します。
コマンド: node testVerifyVulnerable.js
change.diff : https://github.com/ronmadar/Open-Source-Seal-Security/blob/cf768f1932f087c30ebec7fe60c3fca323b4e54b/change.diff
a. 通常のパッケージ tough-cookie V 2.5.0
コマンド: npm install [email protected] && node index.js
b. 変更を加えた圧縮パッケージ tough-cookie V 2.5.0 tgz 形式
コマンド: npm install ./tough-cookie-2.5.0-PATCHED.tgz && node index.js
c.
プロトタイプ汚染: プロパティを直接 Object.prototype に追加すると、プロトタイプチェーン全体が汚染されるリスクがあります。 これにより、アプリケーション全体で予期しない動作が発生し、プロトタイプチェーンをたどる任意のオブジェクトが影響を受ける可能性があります。
セキュリティリスク: Webアプリケーションのコンテキストでは、攻撃者がプロトタイプ汚染を悪用してオブジェクトやプロパティを操作し、 権限昇格や情報漏洩などのセキュリティ脆弱性につながる可能性があります。
互換性の問題: Object.prototypeのようなコアプロトタイプを変更すると、標準的な動作に依存する他のライブラリやフレームワークとの互換性の問題が発生する可能性があります。 これにより、依存関係の統合や更新時にエラーや予期しない動作が発生する可能性があります。 d. 上記の通り記述しました。
このプロジェクトのインストール方法