Paperclipには(レール上のすべてのものと同様の)「マジック」アダプターシステムがあります。 入力がFileタイプのオブジェクトである場合、さまざまなパターンに従って行がチェックされると、ファイルアダプターが取得されます。 URL http:// *のような行の場合、このURLでファイルをダウンロードする要求が行われます。
io_adapters / uri_adapter.rbには次のコードが含まれていました。
@original_filename = @target.path.split("/").last @original_filename ||= "index.html" self.original_filename = @original_filename.strip @content_type = @content.content_type if @content.respond_to?(:content_type) @content_type ||= "text/html"
コンテンツはサーバーの応答のヘッダーから取得されることに注意してください。これは信頼する意味がありません。 そこで、 www.sakurity.com / img.jpg.htmという画像を返すURLを作成しましたが、拡張子に.htmが含まれています。
Paperclipは、Content-Typeがimage / jpgを返し、ファイルをfile.jpg.htmとして保存するため、写真を提供したと考えます。 しかし、Webサーバー(apache / ngin)がこのファイルを提供している場合、最後に.htmを見て、ファイルの内部とContent-Type = text / htmlで応答します。 ブラウザは、応答を通常のHTMLページとして解析します。
ああ、EXIFヘッダーで負荷を非表示にするので、ファイルは有効なJPGのままになります(サーバーでサイズ変更操作がある場合)。
ÛßÙ4Ù¬ıPım m ˚˘ˇˇˇ˙˘W˙Á˚w¸¸ò˝)˝∫˛K˛‹ˇmˇˇˇ··EifII *
Ü墙(1≤2“£€iá¯CanonCanonDIGITAL IXUS 70¥¥f-spotバージョン0.3.52008:09:08 11:29:26
öÇZùÇb 'àPê0220
RCE(コード実行)では、サーバーが.php / .pl / .cgiファイルを実行する必要があります。これは、Railsアプリケーションでは原則的に珍しいことですが、間違っている可能性があります。
脆弱かどうかを確認するには、タグからtype = fileを削除してURLを送信します。
このバグは12月11日に修正され、2月2日にのみ修正されました。 Paperclip 4の新しいメジャーバージョンがリリースされました。これにより、コンテンツタイプのホワイトリスト登録も必須になりました(以前、多くの開発者は、ダウンロードするファイルのタイプを制限することを忘れていました)。 一般に、これはURLによるダウンロード機能をチェックするための興味深いベクトルです。