日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Rails Security (上)

發布時間:2025/3/17 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Rails Security (上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Lobsiinvok · 2016/03/09 10:20

Author: Lobsiinvok

0x00 前言


Rails是Ruby廣泛應用方式之一,在Rails平臺上設計出一套獨特的MVC開發架構,采取模型(Model)、外觀(View)、控制器(Controller)分離的開發方式,不但減少了開發中的問題,更簡化了許多繁復的動作。

此篇講稿分為上下部份,因為最近在開發Rails,需要針對安全問題做把關,便借此機會針對歷史上Rails發生過的安全問題進行歸納與整理。

這篇講稿承蒙安全領域研究上的先進,在自行吸收轉??換后,如有筆誤或理解錯誤的地方還望各位見諒并糾正我,感謝 :D


快速跳轉

  • Mass assignment
  • Unsafe Query Generation
  • Content_tag
  • YAML.load
  • Dynamic Render Path
  • Reference

0x01 Mass assignment


  • 讓Rails developers愛上的毒藥(toxic)
  • ActiveRecord在新增物件時可傳入Hash直接設定多項屬性
  • 若沒有限制可傳入的參數會造成物件屬性可被任意修改

  • 透過新增/修改送出的屬性,可以變更任意物件屬性

  • Case

  • Rails 3.2.3后,config.active_record.whitelist_attributes = true

  • Rails 4后,Rails Core內建strong_parameters

  • 更適當地將處理的過程鎖定在Controller layer

  • 更有彈性地針對屬性作過濾

0x02 Unsafe Query Generation


  • Rake在處理params時,有時候會產生Unsafe的query

  • 透過偽造params[:token]成[], [nil], [nil, nil, ...]或['foo', nil],都能夠通過.nil?的檢查,使得SQL語句被安插IS NULL or IN ('foo', NULL)造成非預期的結果

  • 在Rails 3.2.8增加deep_munge方法來消除掉Hash里的nil

  • commit中可看到類似的檢查

Code for Testing

Rails 3.1.0: 成功繞過nil?的檢查

Rails 4.2.5: 被攔截,直接替換成nil

0x03 Content_tag


Rails提供content_tag方便產生HTML

  • 盡管方便,產生出的HTML是safe的嗎?很顯然的并不是!
  • Ref: brakeman

  • In latest rails 4.2.5, attr still can be injected with any html data.

  • 盡管attr values??有escape,但跟button_to一起作用時卻……

Why?

  • Content_tag回傳html_safe的字串,代表此字串在后續輸出時不再做escape
  • 建立在attacker無法構建html_safe型的字串(等價于raw)
  • 丟給button_to時因為不再做escape導致XSS問題

0x04 YAML.load


難得一見的RCE漏洞(CVE-2013-0156)

  • 主因出在YAML
  • CVE-2013-0156發生在可透過YAML解析時指定tag的方式覆蓋已經載入的instance
  • 在rails3后已從DEFAULT_PARSERS移除

  • 此次問題發生在XML解析

  • 在解析時會經過Hash.from_xml(request.raw_post),底處是到typecast_xml_value進行xml的處理,這篇前輩的文章解釋得很清楚,因為typecast_xml_value里針對xml node type可以進行YAML的解析調用(允許的type定義在ActiveSupport::XmlMini::PARSING),因此造成RCE問題

  • 透過patch可以更明顯看到修補后的不同

Ref: Rails 3.2

Proof

Rails 3.1: 成功執行指令

難得一見的RCE漏洞(CVE-2013-0333)

  • CVE-2013-0333問題一樣發生在YAML.load
  • 在rails 3.0.19(含)前,rails3.0.x的JSON Parser竟然是使用YAML作為Backend
  • 問題發生在YAML backend中的convert_json_to_yaml
  • 這篇講得很詳細
  • Patch for CVE-2013-0333

Rails 3.0.20

0x05 Dynamic Render Path


Render是處理request的一連串過程

  • 除了Insecure Direct Object Reference的安全問題,DEVCORE也在進行滲透測試時發現潛在的RCE問題
  • rails目前最新版本4.2.5預設也是用ERB去做樣板處理,但在rails5開發過程中已經加入此次commit
  • 動態樣板間接變成LFI問題,搭配上面所述的default_template_handler為ERB,只要找到有調用ruby code的樣板或是可自行寫入的檔案,就能夠造成RCE

  • 真實環境下發生的問題可以前往DEVCORE查看

  • 如果有類似開發環境應立即處理,default_template_handler要到rails5才轉換成RAW

  • 改以白名單的方式限制template名稱或是根據commit的內容手動Patch

0x06 Reference


  • The Ruby/GitHub hack: translated
  • How Does Rack Parse Query Params? With Parse_nested_query
  • Cross Site Scripting (Content Tag)
  • Bad coding style can lead to XSS in Ruby on Rails
  • 分析下難得一見的ROR的RCE(CVE-2013-0156)
  • Rails PoC exploit for CVE-2013-0333
  • Dynamic Render Path
  • Rails 動態樣板路徑的風險

總結

以上是生活随笔為你收集整理的Rails Security (上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。