セキュリティ

セキュリティの脆弱性は、脆弱性の報告ガイドに記載されているプロセスを介して報告してください。TruffleRubyを含め、GraalVMプロジェクトのセキュリティに関する問題を報告するための具体的なガイドラインは、SECURITYファイルを参照してください。

実装されていないセキュリティ機能

Rubyの$SAFE機能によって、汚染されたデータの使用方法に関するチェックが追加されますが、常に正しいとは限りません。また、汚染されたデータのチェックに一貫性がなく、それらの実装は、この後で説明する、以前に修正された脆弱性の再発を含め、多くの脆弱性の課題となっています。$SAFEは真の安全性を提供しない、脆弱性があるセキュリティ機能であり、いずれは削除されるというのがRubyコミュニティにおけるコンセンサスとなっています。

これらの理由から、TruffleRubyでは$SAFE機能を有効にできません。これは適切でないセキュリティ機能が使用されないようにするもので、通常は有効なセキュリティ機能が無効になるわけではありません。

この結果、$SAFEおよびThread#safe_level0になり、他のレベルは実装されません。レベル1を使用しようとすると、SecurityErrorが発生します。他のレベルでは、標準のRubyと同様にArgumentErrorが発生します。

MRIの脆弱性

MRIに対して報告された脆弱性は、Rubyの設計や、TruffleRubyがMRIと共有するコードに該当する場合があります。報告されたMRIの脆弱性をここにリストし、MRIではどのようにしてその脆弱性を軽減したか、何かによってその軽減策がテストされているかどうか、およびTruffleRubyではどのようにして軽減したかを記載します。古い報告の詳細を把握することは非常に困難である場合が多いため、従来の脆弱性をすべて調査したわけではありません。

MRIのWebサイトに掲載されている詳細と相互参照してください。

番号 説明 相手方の軽減策 テスト TruffleRubyの軽減策
CVE-2021-31810 Net::FTPでのFTP PASV応答の信頼の脆弱性 修正 テスト 同じ
CVE-2021-32066 Net::IMAPでのStartTLSストリップの脆弱性 修正 テスト 同じ
CVE-2021-31799 RDocでのコマンド・インジェクションの脆弱性 バックポートの修正 テスト 同じ
CVE-2021-28966 Windows上の一時ファイル内のパス・トラバーサル 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における安全でないオブジェクト作成の脆弱性(追加修正) 修正 仕様 TruffleRubyで使用しているPure RubyバージョンのJSONは安全である
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のDigestアクセス認証の正規表現サービス拒否の脆弱性 修正 MRIテスト 同じ
CVE-2012-6708 RDocにおける複数のjQueryの脆弱性 jquery.jsの削除 該当なし 同じ
CVE-2015-9251 RDocにおける複数のjQueryの脆弱性 jquery.jsの削除 該当なし 同じ
CVE-2019-8320 tarの解凍時にsymlinkを使用してディレクトリを削除する 展開されたパスのチェック 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#packおよびString#unpackで汚染フラグが伝播されない 追加の汚染処理 ruby/spec :securityでテスト済 追加の汚染処理
CVE-2018-6914 tempfileおよびtmpdirにおけるディレクトリ走査を伴う意図しないファイルおよびディレクトリ作成 パスのサニタイズ ruby/spec :securityでテスト済 パスのサニタイズ
CVE-2018-8779 UNIXServerおよびUNIXSocketにおける有害な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-17405 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をサポートしておらず、DLモジュールはRuby 2.2.0で削除されたため、該当しない
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をサポートしておらず、DLモジュールはRuby 2.2.0で削除されたため、該当しない
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がsymlink競合攻撃に対して脆弱である      
CVE-2010-0541 WEBrickにおけるXSS      
なし ARGF.inplace_mode=におけるバッファ・オーバーラン      
なし WEBrickにエスケープ・シーケンス・インジェクションの脆弱性がある      
CVE-2009-5147 DL::dlopenにより、汚染された名前のライブラリが開く 追加の汚染チェック DLモジュールは最新のRubyには存在しない $SAFEをサポートしておらず、DLモジュールはRuby 2.2.0で削除されたため、該当しない
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のファイル・アクセスの脆弱性      
なし Net::HTTPSの脆弱性      
JVN#84798830 CGIライブラリにおける別のDoS脆弱性      
CVE-2006-5467 CGIライブラリにおけるDoS脆弱性      
VU#160012 セーフ・レベル設定におけるRubyの脆弱性     $SAFEをサポートしていないため、該当しない

JRubyの脆弱性

TruffleRubyはJRubyのコードを使用するため、JRubyに対して報告された脆弱性がTruffleRubyに該当する場合があります。

番号 説明 相手方の軽減策 テスト 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に該当する場合があります。

番号 説明 相手方の軽減策 テスト TruffleRubyの軽減策
CVE-2012-5372 Rubiniusでは、ハッシュ衝突を予測どおりにトリガーする機能を適切に制限することなくハッシュ値が計算される(CVE-2011-4815、CVE-2011-4838、CVE-2012-5370を相互参照) /dev/urandomからの出力を組み込むことにより、ハッシュが非決定的になる ruby/spec :securityでテスト済 /dev/urandomからのシードを組み込むことにより、ハッシュが非決定的になる

Java依存性の脆弱性

JONI

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

JCodings

番号 説明 相手方の軽減策 テスト TruffleRubyの軽減策
CVE-2010-1330 1.4.1より前のJRubyの正規表現エンジンでは、$KCODE'u'に設定されている場合、UTF-8文字の直後の文字が正しく処理されない 正規表現操作の実行時にUTF-8エンコーディングのバイト・シーケンスをチェックする ruby/spec :securityでテスト済 同じ軽減策を適用済

その他の依存性の脆弱性

zlib

既知の脆弱性はありませんが、システムのzlibに脆弱性が存在する可能性があることを考慮してください。

libssl

システムのlibsslに脆弱性が存在する可能性があることを考慮してください。

FFI

番号 説明 相手方の軽減策 テスト TruffleRubyの軽減策
CVE-2018-1000201 ライブラリ名にSymbolが使用されている場合、WindowsでDLLロードの問題がハイジャックされる可能性がある ffi_libでSymbolをStringと同様に扱う   この脆弱性を修正したFFIのバージョンを使用することにより、同じ軽減策を適用済

ハッシングに関するノート

TruffleRubyは、/dev/urandomからのシードによるMurmurHash2ハッシングを使用します。他のハッシュ・アルゴリズムを使用するように構成することはできません。TruffleRubyは文字列のハッシングにはJavaのハッシュ・アルゴリズム(その後、さらにMurmurHash2)を使用します。