Sentry因过时依赖导致的安全问题
前言
这次挖的其实没啥技术含量 但是从依赖挖掘到漏洞还是比较少见的.
挖掘过程
下载源码后,发现src目录有social_auth目录,并查看views.py(django的主要业务逻辑文件).
并注意到
1
2
3
4
5
6
7
8
9
10
| # Save any defined next value into session
if REDIRECT_FIELD_NAME in data:
# Check and sanitize a user-defined GET/POST next field value
redirect = data[REDIRECT_FIELD_NAME]
# NOTE: django-sudo's `is_safe_url` is much better at catching bad
# redirections to different domains than social_auth's
# `sanitize_redirect` call.
if not is_safe_url(redirect, host=request.get_host()):
redirect = DEFAULT_REDIRECT
request.session[REDIRECT_FIELD_NAME] = redirect or DEFAULT_REDIRECT
|
sentry使用了django-sudo来做url验证,搜索这个库.发现这个库的实际新代码提交是2016年的.
这意味着如果在近些年出现过bypass,这个库并未进行修复. 快速的进行了谷歌搜索.很快就发现CVE-2017-7233 django的is_safe_url的绕过.
参考文章 https://paper.seebug.org/274/#cve-2017-7233-django-is95safe95url-urlbypass
通过对调用的分析 选择了logout作为简单的pochttp://127.0.0.1:9000/auth/logout/?next=https:1029415385.点击sign out`将跳转到一个谷歌的ip
漏洞时间线
2019-12-24: 漏洞提交
2019-1-14: 问题已修复