0.浏览器的安全模型
Last updated
Last updated
浏览器不给你的,你拿不到,拿不到就是拿不到,你拿到了你就找到了浏览器的漏洞
可以读取的操作
可以透过<input type=file>
让使用者选择档案,选完以后用FileReader
把档案内容读出来
fetch('file:///data/index.html')
window.open('file:///data/index.html')
报错:Not allowed to load local resource: file:///data/index.html
如果可以 etc/passwd ssh密钥
主动读取本地文件漏洞案例:
# Bug Bounty Guest Post: Local File Read via Stored XSS in The Opera Browser
Opera 是以Chromium 为基础打造的浏览器,而其中有一个「Opera Pinboards」的功能,可以建立一些笔记然后分享给其他使用者,而笔记页面的网址是:opera:pinboards
是属于特殊的协定,通常会给予一些特别的权限。
在建立笔记的时候,可以包含一个连结,例如说:https://blog.huli.tw
,而Renwa 发现了除了可以使用正常的连结以外,也可以使用javascript:alert(1)
这种类型的连结去执行程式码,因此就可以得到一个opera:pinboards
底下的XSS 漏洞!
前面有提过在opera:
底下会有一些特殊的权限,例如说可以开启file://
的网页,还可以帮网页截图并得到截图的结果,因此就可以利用刚刚讲的XSS 去开启本机的档案并且截图,传到攻击者的伺服器,达成偷取档案的目的。
浏览器没有提供给网页前端相对应的API,使Javascript与系统进行交互
被允许的API
浏览器提供了用于与蓝牙设备通信的Web Bluetooth API,因此在网页上的JavaScript中实际上可以创建与蓝牙相关的应用程序。
另一个MediaDevices API 允许JavaScript获取麦克风和摄像头等数据,因此也可以创建相关的应用程序。
当浏览器提供这些API时,它还会实现权限管理机制,通常会弹出通知,要求用户主动同意并授予相应权限,然后网页才能获取所需的数据。
同源策略:每个网页都只有针对自己的权限,可以修改自己的HTML,执行所需的JavaScript代码,但不应获取其他网页的数据,这就是同源政策(同源策略,有时缩写为SOP)。如果需要从不同源的框架中获取数据,通常需要使用一些跨域通信技术,例如跨域资源共享(CORS)或跨文档消息传递(Cross-document Messaging)
在github.com执行以下程序
这个错误消息是浏览器的安全机制触发的,它指示一个网页框架(frame)试图访问另一个不同源(cross-origin)的框架,但被浏览器阻止了。
绕过案例
Issue 1359122: Security: SOP bypass leaks navigation history of iframe from other subdomain if location changed to about:blank,可以利用一個 iframe 的漏洞讀到 cross-origin 的網址。
假设当前网页是 a.example.com,其中包含一个 iframe,其网址为 b.example.com。通过执行
frames[0].location = 'about:blank'
将 iframe 重新定向后,iframe会变成与 a.example.com 具有相同源(same-origin),此时尝试读取 iframe 的浏览历史记录:frames[0].navigation.entries()
,会从中获取到原本的 b.example.com 网址。然而,这种情况不应该发生。当 iframe 被重新定向到其他网址后,
navigation.entries()
应该被清空,这是一个bug。
https://aszx87410.github.io/beyond-xss/ch1/browser-security-model/
https://www.chromium.org/Home/chromium-security/site-isolation/
https://securitylab.github.com/research/in_the_wild_chrome_cve_2021_30632/