ペーパークリップの脆弱性(XSS / RCE)

ペーパークリップは、レール上のファイル/アバターをロードするための最も人気のあるジャムです。 かなり単純な論理バグが見つかったため、任意のファイルがサーバーにアップロードされました。つまり、file.html、file.php、file.cgiなどの任意の拡張子が付いています。



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によるダウンロード機能をチェックするための興味深いベクトルです。



All Articles