it-swarm-vi.com

Khai thác hoặc rủi ro bảo mật khác với tải lên SVG?

Tôi có một trang web, nơi mọi người có thể tải lên đồ họa, bạn có thể nghĩ về nó giống như một hoster hình ảnh hoặc một diễn đàn cho hình ảnh.

Bây giờ, tôi cho phép tải lên đồ họa raster đến một kích thước nhất định, nhưng chưa có đồ họa vector nào. Tôi cũng muốn cho phép tải lên SVG, nhưng có hai mối quan tâm xoay quanh đầu tôi:

  1. Có thể xây dựng một SVG theo cách như vậy, khi đọc dữ liệu meta, nó làm cho máy chủ không phản hồi. và có thể được sử dụng như tấn công DoS trên máy chủ?
  2. Có thể xây dựng một SVG theo cách như vậy, khi kết xuất SVG trên máy khách, máy khách trở nên không phản hồi và có khả năng làm cho mọi trình duyệt người dùng trên trang web của tôi bị sập?

Ngoài ra, sẽ tốt hơn nếu tạo một PNG nhỏ (200x200px) cho hình thu nhỏ, hoặc tốt hơn là chỉ thao tác với chính SVG bằng hệ số thu phóng hay gì đó?

Trong trường hợp những khai thác SVG đó là có thể, làm thế nào tôi có thể tự bảo vệ mình trước chúng?

27
polemon

Có thể xây dựng một SVG theo cách như vậy, khi đọc dữ liệu meta, nó làm cho máy chủ không phản hồi. và có thể được sử dụng như tấn công DoS trên máy chủ?

Bạn có ý nghĩa gì bởi siêu dữ liệu? Nếu bạn theo chiều rộng và chiều cao, bạn sẽ phải phân tích các tệp SVG ít nhất một phần để có được nó; không có lối tắt nào để đọc một vài byte từ tiêu đề như có nhiều định dạng bitmap. Điều đó mang lại những rủi ro thông thường của phân tích cú pháp XML, chẳng hạn như:

  • các cuộc tấn công bao gồm thực thể/tập hợp con DTD bên ngoài chống lại các tệp từ xa, tài nguyên nhạy cảm với mạng cục bộ, các tệp nhạy cảm với máy cục bộ và các tệp thiết bị
  • bom mở rộng thực thể lồng nhau
  • cấu trúc thẻ được lồng ghép bệnh lý có thể đạt giới hạn tài nguyên đệ quy

như một biện pháp phòng ngừa tiêu chuẩn, bạn sẽ vô hiệu hóa tất cả xử lý DTD, XInclude, XSL, XSI và độ phân giải thực thể.

Có thể xây dựng một SVG theo cách như vậy, khi kết xuất SVG trên máy khách, máy khách trở nên không phản hồi và có khả năng làm cho mọi trình duyệt người dùng trên trang web của tôi bị sập?

Có thể, nhưng nó chỉ có thể xảy ra với định dạng bitmap. Xem ví dụ các lỗ hổng tệp PNG bị hỏng trong một thời gian trở lại.

Điều đáng quan tâm hơn đối với các tệp SVG là chúng có thể bao gồm JavaScript, sẽ hoạt động trong bối cảnh bảo mật của trang web lưu trữ, do đó bạn phải lo lắng về kịch bản chéo trang.

Trên thực tế tất cả các loại tệp được tải lên đều dễ bị ảnh hưởng bởi điều này, mặc dù không phải theo cách trực tiếp, dễ khai thác như vậy. Trong một số trường hợp, các trình duyệt (đặc biệt là IE) sẽ đánh hơi chúng và nếu chúng thấy những thứ trông giống như thẻ, chúng có thể có khả năng diễn giải lại chúng dưới dạng HTML, bao gồm cả JavaScript. Ngoài ra, có một số vấn đề phụ với việc xử lý các tệp được tải lên là Java applet và các tệp chính sách Flash.

Giảm thiểu tiêu chuẩn cho tất cả các vấn đề này là để phục vụ các tài nguyên không đáng tin cậy của bạn, cho dù bitmap, SVG hay bất cứ thứ gì khác, từ một tên miền khác đến trang web chính của bạn: một miền không có thông tin về phiên nhạy cảm (cookie/auth) trong đó và không có khả năng để tập lệnh vào miền của trang web chính của bạn.

Ngoài ra, sẽ tốt hơn nếu tạo một PNG nhỏ (200x200px) cho hình thu nhỏ, hoặc tốt hơn là chỉ thao tác với chính SVG bằng hệ số thu phóng hay gì đó?

Đó sẽ là một liên lạc tốt đẹp, nhưng bạn phải kéo vào một số phụ thuộc để kết xuất thành bitmap, ví dụ Batik nếu bạn đang sử dụng Java. Tự nhiên mang vào một thư viện phức tạp mới làm tăng bề mặt tấn công; có thể là một ý tưởng tốt để chạy trình thu nhỏ dưới dạng một tác vụ trình nền ưu tiên thấp dành riêng cho tài khoản thấp.

19
bobince

Bất kỳ hành động nào ứng dụng web của bạn thực hiện đều có khả năng nguy hiểm. Tải lên tệp là một trong những tính năng nguy hiểm hơn vì nó có thể dẫn đến thực thi mã từ xa.

Vấn đề với việc tải lên bất kỳ tệp nào lên máy chủ là nó có thể không thực sự là tệp bạn muốn. Tôi không biết bạn đang sử dụng nền tảng hoặc phương pháp nào, nhưng tôi đã lừa hệ thống tải lên tệp nhiều lần để tải lên tệp .php hoặc .asp và thực thi nó. Có vẻ như bạn không hiển thị SVG ở phía máy chủ (dù sao đó cũng là một thứ lạ), do đó, XML thô trong SVG không thực sự quan trọng đối với máy chủ của bạn.

Về mặt số 2, có lỗ hổng tham nhũng bộ nhớ svg là phổ biến và tôi tin rằng có nhiều tồn tại hơn. Nhưng một lần nữa, điều này sẽ đúng với bất kỳ tệp nào bạn tải lên. Hình ảnh SVG mới hơn một chút và phần lớn các lỗ hổng trong hình ảnh SVG được tìm thấy vào năm 2011.

Mặt nạ SVG được sử dụng để che khuất iframe trong một cuộc tấn công nhấp chuột . Nhưng tôi không nghĩ rằng vectơ tấn công này áp dụng cho hệ thống tải lên svg của bạn.

10
rook