CVE-2015-7551: Fiddle と DL における tainted 文字列使用時の脆弱性について
Posted by usa on 16 Dec 2015
Ruby の標準添付ライブラリである Fiddle と DL に、信用できない tainted な文字列の使用に関する脆弱性が発見されました。 この脆弱性は、CVE-2015-7551 として登録されています。
詳細
Ruby の標準添付ライブラリである Fiddle と DL で、信用できない tainted な文字列を使用すると、本来禁止されるべき危険な操作が可能となる問題が発見されました。
この問題は、元々は DL において CVE-2009-5147 として報告され、修正が行われていました。 しかし、DL が Fiddle と libffi を用いて再実装された際に、同じ問題が再び発生してしまいました。 また、DL に関しても、Ruby 1.9.1 ではこの問題は修正されましたが、他のバージョンでは修正が行われなかったため、その後にリリースされた DL を含むバージョンには依然として同じ問題が残されていました。
この問題の影響を受けるコードは以下のようなものです:
handle = Fiddle::Handle.new(dangerous_user_input)または:
handle = Fiddle::Handle.new(some_library)
function_pointer = handle[dangerous_user_input]この問題の影響を受けるバージョンの Ruby のユーザーは、速やかに問題の修正されたバージョンに更新するか、または何らかの回避策を採ってください。
影響を受けるバージョン
- Ruby 1.9.2 および 1.9.3 の全てのパッチリリース (DL および Fiddle に関して)
- Ruby 2.0.0 patchlevel 648 より前の全ての Ruby 2.0.0 系列 (DL および Fiddle に関して)
- Ruby 2.2.4 より前の全ての Ruby 2.2 系列 (Fiddle に関して)
- Ruby 2.3.0 preview 1 および preview 2 (Fiddle に関して)
- revision 53153 より前の開発版 (Fiddle に関して)
回避策
もし何らかの事情で Ruby を更新できない場合は、以下のモンキーパッチによって Fiddle については問題を回避することができます:
class Fiddle::Handle
alias :old_initialize :initialize
def initialize file, *args
raise SecurityError if file.tainted? && $SAFE > 0
old_initialize file, *args
end
alias :sym :[]
alias :old_call :[]
def [] fun
raise SecurityError if fun.tainted? && $SAFE > 0
old_call fun
end
endDL を使用している場合は、Fiddle を使うようにしてください。
クレジット
この脆弱性は Christian Hofstaedtler zeha@debian.org によって報告されました。
更新履歴
- 2015-12-16 21:00:00 (JST) 初版
最近のニュース
Ruby 4.0.0 リリース
Ruby 4.0.0 が公開されました。 Ruby 4.0 には “Ruby Box”、”ZJIT” ほか多数の改善が含まれています。
Posted by naruse on 25 Dec 2025
サイトのアイデンティティの再設計
サイトの包括的なデザインのアップデートを発表できることを嬉しく思います。今回の更新ではTaeko Akatsukaさんにデザインを担当していただきました。
Posted by Hiroshi SHIBATA on 22 Dec 2025
Ruby 4.0.0 preview3 リリース
Ruby 4.0.0-preview3 が公開されました。
Posted by naruse on 18 Dec 2025
Ruby 4.0.0 preview2 リリース
Ruby 4.0.0-preview2 が公開されました。Ruby 4.0では、Unicodeバージョンの17.0.0へのアップデートなど様々な改善が行われています。
Posted by naruse on 17 Nov 2025