見出し画像

⚠️ガーベージコレクションはセキュア? リソース管理を怠ると危険 CWE/CERTしらべ 危険コーディング

多くのプログラミング言語は、言語仕様の一部として(例:RPL、Java、C#、D、[3] Go、およびほとんどのスクリプト言語)、あるいは実用的な実装のために効果的に(例:ラムダ計算などの形式言語)ガベージコレクションを必要とします。

https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)

ガベージコレクションは、アメリカのコンピュータ科学者ジョン・マッカーシーによって、Lispにおける手動でのメモリ管理を簡略化するために1959年頃に発明された[

https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)

ガベージコレクションがあるからリソース管理は完璧、いやどうもそうじゃないらしい

Javaガベージコレクタは、参照されないがまだ解放されていないメモリを解放するために呼び出される。しかし、ガベージコレクタは、開いているファイル記述子やデータベース接続などの非メモリ資源を解放することはできません。そのため、このようなリソースの解放に失敗すると、リソースを使い果たす攻撃につながる可能性があります。

https://wiki.sei.cmu.edu/confluence/display/java/FIO04-J.+Release+resources+when+they+are+no+longer+needed

Java コーディングスタンダード12. 入出力 (FIO)には、ガベージコレクタだけではリソースのすべては解放できないから気をつけろと言っている。

コーディングスタンダートベースでCWEがいろいろ立っているようだ。

性質 種類 ID 名前
844 CERT Oracle Secure Coding Standard for Java (2011) が対応する弱点。
HasMember Variant 67 Windows デバイス名の不適切な処理
HasMember Base 135 複数バイトの文字列長の不適切な計算
HasMember Base 198 不正確なバイト順序の使用
HasMember Base 276 デフォルトのパーミッションが正しくない
HasMember Variant 279 実行時に割り当てられたパーミッションが正し くない
HasMember Base 359 個人情報を権限のない者に公開すること
HasMember Class 377 安全でない一時的なファイル
HasMember Class 404 不適切なリソースのシャットダウンまたはリリース
HasMember Class 405 非対称な資源消費(増幅)
HasMember Base 459 不完全なクリーンアップ
HasMember Base 532 ログファイルへの機密情報の挿入
HasMember Class 732 重要なリソースに対する不正なアクセス権の割り当て
HasMember Base 770 制限またはスロットルなしのリソースの割り当て

https://amzn.to/3LnMYbZ

メモリ以外のリソースに目を向けよ、例えばリソースプールとか

リソースプールの枯渇の問題は、データベース接続の場合に悪化する。多くのデータベースサーバーは、設定やライセンスによって、固定数の接続しか許可しません。そのため、データベース接続の解放に失敗すると、利用可能な接続を急速に枯渇させることになります。この非準拠のコード例では、SQL 文の実行中または結果の処理中にエラーが発生した場合に、接続を閉じることに失敗します。

https://wiki.sei.cmu.edu/confluence/display/java/FIO04-J.+Release+resources+when+they+are+no+longer+needed
この非準拠のコード例では、最終ブロックにクリーンアップコードを追加することで、データベース接続の枯渇に対処しようとしています。しかし、rs、stmt、または conn が NULL である可能性があり、最終ブロック内のコードが NullPointerException をスローする原因となります。

より一般的にはCWE400

限られたリソースには、メモリ、ファイルシステムのストレージ、データベース接続プールのエントリ、およびCPUが含まれます。もし、攻撃者がこれらの制限付きリソースの割り当てを引き起こすことができても、リソースの数やサイズが制御されていなければ、攻撃者は利用可能なリソースをすべて消費してサービス拒否を引き起こす可能性があります。

https://cwe.mitre.org/data/definitions/400.html

Node.js には、リソースの枯渇に関する脆弱性が存在します。

https://jvndb.jvn.jp/ja/contents/2020/JVNDB-2020-011586.html

Python 用 httplib2 には、リソースの枯渇に関する脆弱性が存在します。

https://jvndb.jvn.jp/ja/contents/2021/JVNDB-2021-003623.html

Go には、リソースの枯渇に関する脆弱性が存在します。

https://jvndb.jvn.jp/ja/contents/2021/JVNDB-2021-009420.html

Active Record には、リソースの枯渇に関する脆弱性が存在します。

https://jvndb.jvn.jp/ja/contents/2021/JVNDB-2021-003755.html

お願い致します