Experimental feature in GraalVM

セキュリティ

セキュリティの脆弱性については、脆弱性報告ガイドに記載されている手順に従って報告してください。GraalVM プロジェクト(TruffleRuby を含む)のセキュリティ問題に関する具体的なガイドラインは、SECURITY ファイルにあります。

MRI の脆弱性 #

MRI に対して報告された脆弱性は、Ruby の設計、または MRI と共有するコードに適用される場合があります。ここでは、報告された MRI の脆弱性を一覧表示し、MRI が脆弱性をどのように軽減したか(軽減策がテストされている場合はその方法)、および TruffleRuby がどのように軽減したかを説明します。古い報告書から詳細を把握するのが困難な場合が多いため、すべてのレガシー脆弱性を調査したわけではありません。

MRI のウェブサイトの詳細と相互参照してください。

番号 説明 それらの軽減策 テスト 私たちの軽減策
CVE-2024-27282 正規表現検索による任意のメモリアドレス読み取りの脆弱性 修正   Java のセマンティクスにより該当しません
CVE-2024-27281 RDoc の .rdoc_options における RCE の脆弱性 修正 テスト TruffleRuby は gem install で rdoc を生成しないため、該当しません
CVE-2024-27280 StringIO のバッファオーバーリード脆弱性 修正 テスト 該当しません。StringIO の Ruby 実装を使用しています
CVE-2023-36617 URI の ReDoS 脆弱性 修正 テスト TRegex により該当しません
CVE-2023-28756 Time の ReDoS 脆弱性 修正 テスト TRegex により該当しません
CVE-2023-28755 URI の ReDoS 脆弱性 修正 テスト TRegex により該当しません
CVE-2021-33621 CGI の HTTP レスポンス分割 修正 テスト 同様
CVE-2022-28739 String から Float への変換におけるバッファオーバーラン     Java のセマンティクスにより該当しません
CVE-2022-28738 正規表現のコンパイルにおけるダブルフリー     Java のセマンティクスにより該当しません
CVE-2021-41819 CGI::Cookie.parse の Cookie プレフィックス スプーフィング 修正 テスト 同様
CVE-2021-41817 日付における正規表現サービス拒否脆弱性 (ReDoS) 修正 テスト TRegex により該当しません
CVE-2021-41816 CGI.escape_html のバッファオーバーラン 修正 テスト CGI.escape_html の Ruby 定義を使用しているため、該当しません
CVE-2021-31810 Net::FTP の FTP PASV 応答の信頼性の脆弱性 修正 テスト 同様
CVE-2021-32066 Net::IMAP の StartTLS ストリッピング脆弱性 修正 テスト 同様
CVE-2021-31799 RDoc のコマンドインジェクション脆弱性 修正 バックポート テスト 同様
CVE-2021-28966 Windows 上の Tempfile のパス トラバーサル tmpdir.rb でのパスをサニタイズ test/mri/tests/test_tmpdir.rb tmpdir.rb でのパスをサニタイズ
CVE-2021-28965 REXML の XML ラウンドトリップ脆弱性 REXML 3.2.5 に更新 ruby/rexml 内 REXML 3.2.5 に更新
CVE-2020-10663 JSON の安全でないオブジェクト作成の脆弱性(追加の修正) 修正 仕様 使用している JSON の純粋な Ruby バージョンは安全です
CVE-2019-16255 Shell#[] と Shell#test のコードインジェクション脆弱性 修正 MRI テスト 同様
CVE-2019-16254 WEBrick の HTTP レスポンス分割(追加の修正) 修正 MRI テスト 同様
CVE-2019-15845 File.fnmatch と File.fnmatch? の NUL インジェクション脆弱性 修正 MRI テスト NUL バイトをチェック
CVE-2019-16201 WEBrick のダイジェストアクセス認証の正規表現サービス拒否脆弱性 修正 MRI テスト 同様
CVE-2012-6708 RDoc の複数の jQuery の脆弱性 jquery.js を削除 該当なし 同様
CVE-2015-9251 RDoc の複数の jQuery の脆弱性 jquery.js を削除 該当なし 同様
CVE-2019-8320 tar の解凍時にシンボリックリンクを使用してディレクトリを削除 展開されたパスをチェック MRI test/rubygems/test_gem_package.rb でテスト済み 同じパッチを適用
CVE-2019-8321 verbose のエスケープシーケンスインジェクション メッセージをサニタイズ ruby/spec :security でテスト済み 同じパッチを適用
CVE-2019-8322 gem owner のエスケープシーケンスインジェクション メッセージをサニタイズ ruby/spec :security でテスト済み 同じパッチを適用
CVE-2019-8323 API 応答処理におけるエスケープシーケンスインジェクション脆弱性 メッセージをサニタイズ ruby/spec :security でテスト済み 同じパッチを適用
CVE-2019-8324 悪意のある gem をインストールすると、任意のコードが実行される可能性があります インストール前のチェックの前に gem を検証 MRI test/rubygems/test_gem_installer.rb でテスト済み 同じパッチを適用
CVE-2019-8325 エラーのエスケープシーケンスインジェクション エラーメッセージをサニタイズ ruby/spec :security でテスト済み 同じパッチを適用
CVE-2018-16395 OpenSSL::X509::Name の等価性チェックが正しく機能しません      
CVE-2018-16396 一部のディレクティブを使用して Array#packString#unpack で汚染フラグが伝播されません 追加の汚染操作 ruby/spec :security でテスト済み 追加の汚染操作
CVE-2018-6914 tempfiletmpdir でのディレクトリトラバーサルによる意図しないファイルとディレクトリの作成 パスのサニタイズ ruby/spec :security でテスト済み パスのサニタイズ
CVE-2018-8779 UNIXServerUNIXSocket の汚染された NUL バイトによる意図しないソケットの作成 NUL バイトをチェック ruby/spec :security でテスト済み NUL バイトをチェック
CVE-2018-8780 Dir の汚染された NUL バイトによる意図しないディレクトリトラバーサル NUL バイトをチェック ruby/spec :security でテスト済み NUL バイトをチェック
CVE-2018-8777 WEBrick の大規模なリクエストによる DoS ヘッダー長のロジック MRI test/webrick/test_httpserver.rb でテスト済み 同じ軽減策を適用
CVE-2017-17742 WEBrick の HTTP レスポンス分割 無効なヘッダーのロジック ruby/spec :security でテスト済み 同じ軽減策を適用
CVE-2018-8778 String#unpack のバッファアンダーリード 範囲チェック ruby/spec :security でテスト済み 範囲チェック
CVE-2017-14033 Net::FTP のコマンドインジェクション脆弱性 コマンド内のパスを明示的にパスとして扱い、一般的な IO コマンドとしては扱わない MRI test/net/ftp/test_ftp.rb でテスト済み 同じ軽減策を適用
CVE-2017-10784 WEBrick の Basic 認証におけるエスケープシーケンスインジェクション脆弱性 ログの適切なエスケープ MRI test/webrick/test_httpauth.rb でテスト済み 同じ軽減策を適用
CVE-2017-0898 Kernel.sprintf のバッファアンダーラン脆弱性      
CVE-2017-14033 OpenSSL ASN1 デコードのバッファアンダーラン脆弱性      
CVE-2017-14064 JSON 生成におけるヒープエクスポージャー脆弱性      
CVE-2017-0902, CVE-2017-0899, CVE-2017-0900, CVE-2017-0901 RubyGems の複数の脆弱性      
CVE-2015-7551 Fiddle と DL の安全でない汚染文字列の使用(CVE-2009-5147 の軽減策の回帰) 追加の汚染チェック MRI test/mri/tests/fiddle/test_handle.rb でテスト済み $SAFE をサポートしていないため、および Ruby 2.2.0 で DL モジュールが削除されたため、該当しません
CVE-2015-1855 Ruby OpenSSL ホスト名検証      
CVE-2014-8090 別のサービス拒否 XML 展開      
CVE-2014-8080 サービス拒否 XML 展開   ruby/spec :security でテスト済み  
なし ext/openssl のデフォルト設定を変更      
CVE-2014-2734 脆弱性の論争      
CVE-2014-0160 TLS ハートビート拡張の OpenSSL 重大な脆弱性      
CVE-2014-2525 YAML URI エスケープ解析におけるヒープオーバーフロー      
CVE-2013-4164 浮動小数点解析におけるヒープオーバーフロー   ruby/spec :security でテスト済み  
CVE-2013-4073 SSL クライアントのホスト名チェックバイパス脆弱性      
CVE-2013-2065 Ruby の DL と Fiddle のオブジェクト汚染バイパス 追加の汚染チェック MRI test/mri/tests/fiddle/test_func.rb でテスト済み $SAFE をサポートしていないため、および Ruby 2.2.0 で DL モジュールが削除されたため、該当しません
CVE-2013-1821 REXML のエンティティ展開 DoS 脆弱性      
CVE-2013-0269 JSON のサービス拒否と安全でないオブジェクト作成の脆弱性      
CVE-2013-0256 rdoc によって生成された RDoc ドキュメントの XSS エクスプロイト      
CVE-2012-5371 ruby 1.9 のハッシュフラッディング DoS 脆弱性      
CVE-2012-4522 不正な NUL 文字の挿入によって発生する意図しないファイル作成      
CVE-2012-4464, CVE-2012-4466 Exception#to_s / NameError#to_s に関する $SAFE エスケープ脆弱性     $SAFE をサポートしていないため、該当しません
なし RubyGems のセキュリティ修正:リモートリポジトリの SSL サーバー検証失敗      
CVE-2011-3389 Ruby OpenSSL モジュールのセキュリティ修正:TLS BEAST 攻撃の防止策として 0/n 分割を許可      
CVE-2011-4815 Ruby のハッシュアルゴリズムに対するサービス拒否攻撃が見つかりました(CVE-2011-4838、CVE-2012-5370、CVE-2012-5372 との相互参照) プロセスの開始時間を組み込むことで、ハッシュを非決定論的にします ruby/spec :security でテスト済み /dev/urandom からのシードを組み込むことで、ハッシュを非決定論的にします
なし 例外メソッドは $SAFE をバイパスできます     $SAFE をサポートしていないため、該当しません
なし FileUtils はシンボリックリンク競合攻撃に対して脆弱です      
CVE-2010-0541 WEBrick の XSS     WEBrick は提供されなくなりました
なし ARGF.inplace_mode= のバッファオーバーラン      
なし WEBrick にはエスケープシーケンスインジェクションの脆弱性があります     WEBrick は提供されなくなりました
CVE-2009-5147 DL::dlopen は汚染された名前でライブラリを開きます 追加の汚染チェック 最新の Ruby には DL モジュールが存在しません $SAFE をサポートしていないため、および Ruby 2.2.0 で DL モジュールが削除されたため、該当しません
CVE-2009-4124 String のヒープオーバーフロー      
なし BigDecimal の DoS 脆弱性      
なし REXML の DoS 脆弱性      
CVE-2008-1447 Ruby の複数の脆弱性      
CVE-2008-2662, CVE-2008-2663, CVE-2008-2725, CVE-2008-2726, CVE-2008-2664, CVE-2008-1891 任意のコード実行の脆弱性      
なし WEBrickのファイルアクセス脆弱性     WEBrick は提供されなくなりました
なし Net::HTTPS脆弱性      
JVN#84798830 CGIライブラリの別のDoS脆弱性      
CVE-2006-5467 CGIライブラリのDoS脆弱性      
VU#160012 安全レベル設定におけるRubyの脆弱性     $SAFE をサポートしていないため、該当しません

JRubyの脆弱性 #

TruffleRubyはJRubyからのコードを使用しているため、JRubyに対して報告された脆弱性はTruffleRubyにも適用される可能性があります。

番号 説明 それらの軽減策 テスト 私たちの軽減策
CVE-2012-5370 JRubyは、ハッシュ衝突を予測可能な方法でトリガーする能力を適切に制限せずにハッシュ値を計算します(CVE-2011-4815、CVE-2011-4838、CVE-2012-5372を参照)。 プロセスの開始時間を組み込むことで、ハッシュを非決定論的にします ruby/spec :security でテスト済み /dev/urandom からのシードを組み込むことで、ハッシュを非決定論的にします
CVE-2011-4838 1.6.5.1より前のJRubyは、ハッシュ衝突を予測可能な方法でトリガーする能力を制限せずにハッシュ値を計算します(CVE-2011-4815、CVE-2012-5370、CVE-2012-5372を参照)。 プロセスの開始時間を組み込むことで、ハッシュを非決定論的にします ruby/spec :security でテスト済み /dev/urandom からのシードを組み込むことで、ハッシュを非決定論的にします

Rubiniusの脆弱性 #

TruffleRubyはRubiniusからのコードを使用しているため、Rubiniusに対して報告された脆弱性はTruffleRubyにも適用される可能性があります。

番号 説明 それらの軽減策 テスト 私たちの軽減策
CVE-2012-5372 Rubiniusは、ハッシュ衝突を予測可能な方法でトリガーする能力を適切に制限せずにハッシュ値を計算します(CVE-2011-4815、CVE-2011-4838、CVE-2012-5370を参照)。 /dev/urandomからの出力を組み込むことで、ハッシュが非決定的なものになります。 ruby/spec :security でテスト済み /dev/urandom からのシードを組み込むことで、ハッシュを非決定論的にします

Java依存関係の脆弱性 #

JONI #

既知の脆弱性はありません。

JCodings #

番号 説明 それらの軽減策 テスト 私たちの軽減策
CVE-2010-1330 1.4.1より前のJRubyの正規表現エンジンは、$KCODE'u'に設定されている場合、UTF-8文字の直後の文字を適切に処理しません。 正規表現演算を実行する際には、UTF-8エンコーディングのバイトシーケンスを確認してください。 ruby/spec :security でテスト済み 同じ軽減策を適用

その他の依存関係の脆弱性 #

zlib #

既知の脆弱性はありませんが、システムのzlibにおける潜在的な脆弱性を考慮してください。

libssl #

システムのlibsslにおける潜在的な脆弱性を考慮してください。

FFI #

番号 説明 それらの軽減策 テスト 私たちの軽減策
CVE-2018-1000201 ライブラリ名にSymbolを使用する場合、WindowsでDLLの読み込みの問題が悪用される可能性があります。 ffi_libでは、SymbolをStringと同じように扱ってください。   この脆弱性を修正したFFIのバージョンを使用することで、同じ軽減策を適用しました。

ハッシュに関するメモ #

TruffleRubyは、/dev/urandomからのシードを使用したMurmurHash2ハッシュを使用します。他のハッシュアルゴリズムを使用するように設定することはできません。文字列のハッシュには、TruffleRubyはJavaのハッシュアルゴリズム(そしてその上にMurmurHash2)を使用します。

お問い合わせ