回答:
Java文字列はchar配列に基づいており、Javaは配列の境界を自動的にチェックするため、バッファオーバーフローは異常なシナリオでのみ可能です。
JavaやC#などのマネージ言語にはこれらの問題はありませんが、実際にコードを実行する特定の仮想マシン(JVM / CLR / etc)には問題がある可能性があります。
すべての意図と目的のために、いいえ。
Javaには、割り当てられた配列の外側の領域からデータにアクセスできないことをチェックする配列境界チェックがあります。配列のサイズを超える領域にアクセスしようとすると、ArrayOutOfBounds
例外がスローされます。
バッファオーバーランが発生した場合、それはおそらくJava仮想マシンのバグによるものであり、私の知る限りでは、Java言語仕様やJava仮想マシン仕様で記述された意図された動作ではありません。
はいといいえ。いいえ、マネージドメモリモデルであるため、誤って作成してバッファーオーバーフローの脆弱性に自分を誤ってオープンすることはできません。ただし、JVMおよびJDKにバッファオーバーフローの脆弱性が存在する可能性があります。このSecuniaアドバイザリーをご覧ください:
http://secunia.com/advisories/25295
または、以前のいくつかのJDKおよびJREの脆弱性に関するこれらの古いアドバイザリを参照してください。
Javaランタイム環境(JRE)の「unpack200」JARアンパックユーティリティにおける整数およびバッファオーバーフローの脆弱性により、権限が昇格する可能性があるhttps://download.oracle.com/sunalerts/1020225.1.html
「unpack200」JAR解凍ユーティリティを使用した解凍アプレットおよびJava Web StartアプリケーションでのJavaランタイム環境(JRE)における整数およびバッファオーバーフローの脆弱性により、信頼できないアプレットまたはアプリケーションが特権を昇格させる可能性があります。たとえば、信頼できないアプレットは、ローカルファイルの読み取りと書き込み、または信頼できないアプレットを実行しているユーザーがアクセスできるローカルアプリケーションの実行を許可することができます。
Sunは、iDefense VCP(http://labs.idefense.com/vcp/)と協力して「regenrecht」とこれらの問題に注意を向けてくれたGoogleのChris Evansと協力して感謝します。
Sun Java Development Kit(JDK)およびJava Runtime Environment(JRE)に複数の脆弱性が確認されています。https://security.gentoo.org/glsa/200705-23
「システムクラスの不正使用」に関連する不特定の脆弱性が富士通セキュリティチームによって報告されました。さらに、Google Security TeamのChris Evansが、JPGまたはBMPファイルで使用されるICCパーサーでの整数オーバーフロー、および特定のBMPファイルの処理時の/ dev / ttyへの不正なopen()呼び出しを引き起こすオーバーフローを報告しました。
スタックまたはヒープ自体を上書きするという厳密な意味でのバッファオーバーフローには、次のいずれかが必要です。
バッファを使用するコードがあり、コードがそれを正しく解析する責任があるが、そうしないと、バッファオーバーフローが発生する可能性があります。たとえば、XMLパーサーを作成し、誰かが不正な(または正当であるが一般的ではない)リクエストを提供すると、パーサーの設計により、以前に検証されたデータが、アプリケーションの動作が低下する原因となるペイロードで上書きされます。
この後者の形式は可能性は低くなりますが、広く分散されたSQL文字列クレンジング関数の記述が不十分であり、このような問題が魅力的なターゲットになる可能性があります。
メソッドが、通常は整数オーバーフローを介して、意図していない配列の有効なエントリに書き込むことが可能です。
たとえば、以下は境界をチェックするには不十分です。
/* !! WRONG !! */ 0 <= off && 0 <= len && off+len <= buff.length /* !! WRONG !! */
IIRCにはStringBuffer
かつてそのようなバグがありましたが、あなたがそれを使ってできる興味深いことは何もありませんでした。
0 <= off && 0 <= len && off <= buff.length-len
私は思います。私を引用しないでください。見た目は同じですが、オーバーフローの可能性はありません(元のoff + lenでは負になる可能性があるため、明らかに配列の長さよりも小さくなります)。保守プログラマーがそれを明白な形に「整理」しないことを確認してください。整数オーバーフローは非常に混乱します。しばらく考えなければならないが、それから私はそれを間違えているというしつこい疑惑がある。ただし、もちろん、別のレビュー担当者と元のプログラマーがいるはずです。もちろん、エラーが発生する可能性はありません。(非)
JAVAの主要な機能の1つはセキュリティです。インタープリター言語で書かれたプログラムは、バッファーオーバーフローの悪用の傾向はありませんが、インタープリター自体で常にバッファーオーバーフローを引き起こす可能性があります。難しいでしょうが。同様にPythonもインタプリタ言語であり、バッファオーバーフローから安全です。