Django任意代码执行漏洞分析

1 从Django的SECTET_KEY到代码执行
Django是一个可以用于快速搭建高性能,优雅的网站的平台,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它 最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。
最近在进行网站代码审查的过程中,发现某些产品由于session使用不当,导致可能被攻击者利用,执行任意代码。这些产品在登录的JS代码中,泄露了 SECRET_KEY,将该值作为密码加密的盐,这样就暴露了加密salt不太好吧,更重要的是对django的安全造成了极大的威胁。
2 SECRET_KEY作用
SECTET_KEY在djanog中使用非常广泛,基本上涉及到安全,加密等的地方都用到了,下面列举一些常见情景:
1,json object的签名
2,加密函数,如密码重置,表单,评论,csrf的key,session数据
这里面就要重点讲到session的问题,在这里使用不当就会导致代码执行
3 代码执行
3.1 settings的session设置
django默认存储session到数据库中,但是可能会比较慢,就会使用到缓存,文件,还有cookie等方式,如果采用了cookie机制则有可能代码执行,settings配置如下:
| 以下是代码片段: SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' |
3.2 django 1.6以下
在django1.6以下,session默认是采用pickle执行序列号操作,在1.6及以上版本默认采用json序列化。代码执行只存在于使用pickle序列话的操作中。
3.3 session处理流程
可以简单的分为两部分,process_request和process_response,前者负责选择session引擎,初始化cookie数据。见代码
| 以下是代码片段:
|
华盟君