網站開發應用框架Django,恐被用以發動Open Redirect攻擊
- 發布單位:TWCERT/CC
- 更新日期:2019-04-03
- 點閱次數:852
CVE編號
內文
●概述:
由Python寫成的Django,是開放原始碼的Web應用框架,採用了MVT(Model、View、Template)軟體設計模式,其核心框架包括Web伺服器、內建分發系統、表單序列化及驗證系統,並支援中介軟體,因為每個網站總有同質性基本需求:用戶註冊、後台、表單等,憑藉Django,開發者毋須重複製造相同模組,僅需專注設計專屬程式,經測試得知,Django在APPEND_SLASH參數與django.middleware.common.CommonMiddleware元件同步運行時,預設作用可將request內URL字串自動轉向末尾附加斜線號 / 之網址,攻擊者利用該普遍特性,以社交工程伎倆誘騙受害者誤點惡意鏈結,而惡意URL未被攔截,將導向駭客控制網站,遂行釣魚或詐騙,Django軟體基金會已公告各版本修補檔及升級軟體。
●編註:
(1)弱點條件
在Django軟體內,參數APPEND_SLASH為boolean資料型態,SLASH意即除號、斜線,當參數APPEND_SLASH = True時,其作用是自動於網址末附加 / 符號,也就是所輸入的URL請求字串,若不匹配URLconf中任一已知URL樣式,且結束字元非斜線 / ,則直接重新導向至相同字串末尾加上 / 的URL,以下列python程式為例:
urls.py:
--------
from django.conf.urls.defaults import *
from mysite.views import hello
urlpatterns = patterns('',('^hello/$', hello),)
因patterns()函數定義,發現吻合hello樣式字串,則轉換成 hello/ 結尾,故輸入網址 http://example.com/hello,將自動導向 http://example.com/hello/ ,然而當APPEND_SLASH = False時,連線 http://example.com/hello 將會返回 404錯誤訊息。
原本Django之專案主設定檔settings.py預設並無APPEND_SLASH參數,但安裝CommonMiddleware中介軟體元件後,APPEND_SLASH設定項目才生效,且預設值為True,而APPEND_SLASH與django.middleware.common.CommonMiddleware兩者同步運作時,重導向效果始得存在,也讓攻擊者伺機利用Open Redirect特性。
(2)探勘方式
前段介紹Django在django.middleware.common.CommonMiddleware元件及APPEND_SLASH參數皆啟用時,Open Redirect方可生效,但重新導向本來就是正常功能,開發者建立新blog專案,幾乎都設定URL樣式能接受網址以斜線結尾,畢竟多數CMS皆如此,而遠端駭客能成功探勘的實際癥結,在於輸入URL字串未受檢驗,只要採取社交工程手段,誘騙受害者在毫無戒心狀態,誤點惡意link,則逕轉向至某個 / 結尾之惡意URL,衍生後續釣魚或詐騙事件。
影響產品
解決辦法
Django master系列,參考https://github.com/django/django/commit/a656a681272f8f3734b6eb38e9a88aa0d91806f1
Django 2.1系列,參考https://github.com/django/django/commit/c4e5ff7fdb5fce447675e90291fd33fddd052b3c
Django 2.0系列,參考https://github.com/django/django/commit/6fffc3c6d420e44f4029d5643f38d00a39b08525
Django 1.11系列,參考https://github.com/django/django/commit/d6eaee092709aad477a9894598496c6deec532ff
(2)取得升級版
下載Django 1.11.15版壓縮檔,連結https://www.djangoproject.com/m/releases/1.11/Django-1.11.15.tar.gz
下載Django 2.0.8版壓縮檔,連結https://www.djangoproject.com/m/releases/2.0/Django-2.0.8.tar.gz
Django 2.1.x仍需等待。
相關連結
- https://appuals.com/django-vulnerable-to-open-redirects-in-commonmiddleware-paving-way-for-phishing-
- https://www.djangoproject.com/weblog/2018/aug/01/security-releases/
- https://tools.cisco.com/security/center/viewAlert.x?alertId=58637
- https://securitytracker.com/id/1041403
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-14574
- https://www.debian.org/security/2018/dsa-4264
- https://zh.wikipedia.org/wiki/Django
- https://carolhsu.gitbooks.io/django-girls-tutorial-traditional-chiness/content/django/README.html
- https://carolhsu.gitbooks.io/django-girls-tutorial-traditional-chiness/content/django_start_project/
- http://neuron.csie.ntust.edu.tw/homework/101/CC/homework/homework2-1/B9930321-2/open_redirect.html
- https://www.liurongxing.com/django-append_slash-true.html
- http://django-chinese-docs-14.readthedocs.io/en/latest/ref/settings.html
- http://dokelung-blog.logdown.com/posts/220274-django-note-1-building-and-settings
- https://blog.linuxturkey.org/wp-content/uploads/2018/03/python-django.png