CVE-2015-7551: Sử dụng string nhiễm độc không an toàn ở Fiddle và DL

Có một lỗ hổng khi sử dụng string nhiễm độc không an toàn ở Fiddle và DL. Lỗ hổng này là đã được đánh dấu lỗi trên CVE CVE-2015-7551.

Chi tiết

Có một lỗ hổng string nhiễm độc không an toàn ở Fiddle và DL. Lỗi này ban đầu được báo cáo và sửa với CVE-2009-5147 ở DL, nhưng xuất hiện trở lại sau khi DL được triển khai lại bằng Fiddle và libffi.

Và, về DL, CVE-2009-5147 đã được sửa ở Ruby 1.9.1, nhưng không được sửa ở những nhánh khác, nên các phiên bản ruby được đóng gói cùng DL trừ Ruby 1.9.1 vẫn bị ảnh hưởng.

Mã bị ảnh hưởng trông giống như thế này:

handle = Fiddle::Handle.new(dangerous_user_input)

Hoặc:

handle = Fiddle::Handle.new(some_library)
function_pointer = handle[dangerous_user_input]

Tất cả người dùng đang chạy phiên bản bị ảnh hưởng nên nâng cấp hoặc sử dụng một trong những giải pháp thay thế ngay lập tức.

Các phiên bản bị ảnh hưởng

  • Tất cả các phiên bản vá lỗi của Ruby 1.9.2 và Ruby 1.9.3 (DL và Fiddle).
  • Tất cả các phiên bản vá lỗi của Ruby 2.0.0 trước Ruby 2.0.0 bản vá 648 (DL và Fiddle).
  • Tất cả các phiên bản của Ruby 2.1 trước Ruby 2.1.8 (DL và Fiddle).
  • Tất cả các phiên bản của Ruby 2.2 trước Ruby 2.2.4 (Fiddle).
  • Ruby 2.3.0 preview 1 và preview 2 (Fiddle).
  • Trước sửa đổi đầu tiên 53153 (Fiddle).

Giải pháp

Nếu bạn không thể nâng cấp, bản vá tạm sau có thể được áp dụng như một giải pháp thay thế cho 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
end

Nếu bạn đang dùng DL, hãy sử dụng Fiddle thay thế cho nó.

Công lao

Cảm ơn Christian Hofstaedtler zeha@debian.org đã thông báo lỗi này!

Lịch sử

  • Phát hành lần đầu vào lúc 2015-12-16 12:00:00 UTC