Merge pull request from GHSA-9928-3cp5-93fm
* Fix attachments getting processed despite failing content-type validation * Add a restrictive ImageMagick security policy tailored for Mastodon * Fix misdetection of MP3 files with large cover art * Reject unprocessable audio/video files instead of keeping them unchanged
This commit is contained in:
		
							
								
								
									
										22
									
								
								lib/paperclip/media_type_spoof_detector_extensions.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								lib/paperclip/media_type_spoof_detector_extensions.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
module Paperclip
 | 
			
		||||
  module MediaTypeSpoofDetectorExtensions
 | 
			
		||||
    def calculated_content_type
 | 
			
		||||
      return @calculated_content_type if defined?(@calculated_content_type)
 | 
			
		||||
 | 
			
		||||
      @calculated_content_type = type_from_file_command.chomp
 | 
			
		||||
 | 
			
		||||
      # The `file` command fails to recognize some MP3 files as such
 | 
			
		||||
      @calculated_content_type = type_from_marcel if @calculated_content_type == 'application/octet-stream' && type_from_marcel == 'audio/mpeg'
 | 
			
		||||
      @calculated_content_type
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def type_from_marcel
 | 
			
		||||
      @type_from_marcel ||= Marcel::MimeType.for Pathname.new(@file.path),
 | 
			
		||||
                                                 name: @file.path
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Paperclip::MediaTypeSpoofDetector.prepend(Paperclip::MediaTypeSpoofDetectorExtensions)
 | 
			
		||||
@@ -19,10 +19,7 @@ module Paperclip
 | 
			
		||||
    def make
 | 
			
		||||
      metadata = VideoMetadataExtractor.new(@file.path)
 | 
			
		||||
 | 
			
		||||
      unless metadata.valid?
 | 
			
		||||
        Paperclip.log("Unsupported file #{@file.path}")
 | 
			
		||||
        return File.open(@file.path)
 | 
			
		||||
      end
 | 
			
		||||
      raise Paperclip::Error, "Error while transcoding #{@file.path}: unsupported file" unless metadata.valid?
 | 
			
		||||
 | 
			
		||||
      update_attachment_type(metadata)
 | 
			
		||||
      update_options_from_metadata(metadata)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user