Upgrade to Pro — share decks privately, control downloads, hide ads and more …

駭客看 Django

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

駭客看 Django

Taiwan Python Conference 2013

Avatar for Orange

Orange

May 26, 2013
Tweet

More Decks by Orange

Other Decks in Technology

Transcript

  1. 四不一沒有 •  四不 – 我不是駭客 – 我不會寫 django – 不會有 django 新漏洞( 請洽七月台灣駭客年會

    ) – 這場演講不難,真的很簡單 •  沒有 – 這場演講沒有梗,有笑點的話拜託笑一下
  2. About Me •  蔡政達 aka Orange •  2009 台灣駭客年會競賽 冠軍

    •  2011, 2012 全國資安競賽 金盾獎冠軍 •  2011 東京 AVTOKYO 講師 •  2012 香港 VXRLConf 講師 •  台灣 PHPConf, WebConf 講 師 •  專精於 –  駭客攻擊手法 –  Web Security –  Windows Vulnerability Exploitation
  3. About Me •  CHROOT Security Group 成員 •  NISRA 資訊安全研究會

    成員 •  Disclosed – Windows MS12-071(CVE-2012-4775) – Django (CVE-2013-0305) •  Blog – http://blog.orange.tw/
  4. Security Overview •  Built-in XSS protection •  Built-in SQL Injection

    protection – ORM ( Q Object ) •  Built-in CSRF protection – django.middleware.csrf.CsrfViewMiddleware – Check REFERER header – Compare CSRF token
  5. Security Overview •  Password hashing is more and more stronger

    – Default is PBKDF2 hasher – django.contrib.auth.hahsers – 10000 iterators makes attackers say fuck … $ time python pbkdf2.py mypassword real 0m0.401s user 0m0.260s sys 0m0.074s
  6. Some Attacking Vectors •  VERY VERY BASIC attacking way • 

    Weak admin password •  Debug mode on – Leakage URL pattern – Leakage database password
  7. Some Attacking Vectors •  Cross-Site Scripting – HttpResponse( html ) – {{

    output|safe }} – {% autoescape off %} •  Bad HTML style is always vulnerable – <a href="{{ url }}"> # safe – <a href={{ url }}> # unsafe – <a href=xxx onload=alert(/xss/)>
  8. Some Attacking Vectors •  SQL Injection in Django ORM – raw(

    sql ) is injectable – extra( select=…, where=… ) is also injectable •  String concatenate and format string are vulnerable in any case
  9. Some Attacking Vectors •  Third-party module security •  Py-bcrypt #

    CVE-2013-1895 – Authentication bypass •  Python Image Library # CVE-2012-3443 – Denied-of-Service •  Python XML.sax # CVE-2013-1664 & 1665 – XXE & XEE Injection
  10. XML eXternal Entity Injection Parsing XML Document Type Definition issue

    <?xml encoding='utf-8' ?> <!DOCTYPE account[ <!ENTITY output SYSTEM '/etc/passwd'>]> <account> &output; </account>
  11. XML Entity Expansion Injection <?xml encoding='utf-8' ?> <!DOCTYPE account[ <!ENTITY

    a "ooo"> <!ENTITY b "&a; &a; &a; &a; &a;"> <!ENTITY c "&b; &b; &b; &b; &b;"> ... <!ENTITY z "&y; &y; &y; &y; &y;"> ]> <account> &z; </account>
  12. Secret Key Leakage Issue (1/3) •  Django SECRET_KEY use in

    – get_random_string() using in csrf and hash generating – Django session_data encryption – Django signed cookie encryption – ……
  13. Secret Key Leakage Issue (2/3) •  Signed cookie store python

    object using Pickle – > HTTP_COOKIE – > decode with secret_key – > pickle.loads( … )
  14. Pickle & cPickle •  A module that serializing and De-serializing

    python objects •  Execute command >>> import pickle >>> pickle.loads( "cos\nsystem\n(S'/bin/sh'\ntR." ) •  You can observe by using pickletools >>> import pickletools >>> pickletools.dis( "cos\nsystem\n(S'/bin/sh'\ntR." )
  15. Secret Key Leakage Issue (3/3) •  Signed_cookie is encoded by

    Pickle – > HTTP_COOKIE # malicious cookie – > decode with secret_key – > pickle.loads( … ) # code execution •  Protect your SECRET_KEY ( ex .gitignore )
  16. Conclusion •  I think Django is a secure framework • 

    More and more wrapper make the attack difficult •  People is always the most dangerous things