Laravel调试模式未关闭导致管理员凭证泄露及敏感报告可能曝光
背景
11年前,Benjamin与我曾在BMJ Careers发表文章《There’s a medical app for that》,帮助读者评估医疗应用是否可安全使用。当时我们关注的是患者安全,而今天我们将关注医疗工作者自身的安全。
让我们仔细研究这款允许报告工作场所不当行为的应用——#zouikwatzeggen-app(意为"#我会说出来吗-app")。这款应用使用起来安全吗?
应用功能
该应用旨在提高对不当行为的认识,并展示如何将其纳入讨论。还有一个报告按钮,可直接向相关人员轻松报告(匿名)不良行为。该应用是关于预防不当行为和相关主题研讨会的更大电子学习套餐的一部分。
工作场所中的不当行为形式多样:八卦、欺凌、排斥、恐吓、言语和身体攻击、歧视、冲突以及性暗示言论或行为。
安全研究
作为安全研究人员,我们对"使用应用发送报告"的功能产生了兴趣。这是如何工作的?是某种将数据中继到电子邮件的表单吗?涉及哪些参数?支持此功能的代码托管在何处?服务器是否得到适当保护?
我们从Android应用开始,可以轻松下载该应用并修补代码以拦截应用产生的流量。
拦截应用流量
如今所有应用都使用HTTPS进行通信,通过修补我们禁用了这些安全检查。修补后,我们可以通过Burp Suite路由应用流量并检查/操纵它。
获取应用APK安装文件有多种方法:
- 方法1:从Google Play商店将应用安装到安卓手机,并使用此处描述的方法
- 方法2:信任第三方下载网站并下载APK
获得APK后,我们使用APK-MITM修补APK,使其不再检查HTTPS证书;它需要接受我们Burp强制的HTTPS证书。
安装apk-mitm后,我们可以运行:
|
|
发现漏洞
当我们提交新报告时,能够拦截发出的请求:
|
|
我们收到的错误消息非常详细,反映了触发错误的确源代码文件和代码行。这似乎是有人在应用发布前忘记正确测试所有功能,并忘记关闭调试消息。
漏洞1:能够从#zouikwatzeggen应用向任何人发送电子邮件
我们发现第一个漏洞:电子邮件欺骗。虽然影响有限,但可以使用该应用向任何人发送自定义文本的电子邮件。
PHP调试栏暴露
在仔细查看提交电子邮件表单时返回的头部时,我们注意到phpdebugbar-id
;这是PHP开发人员使用的工具,用于轻松调试已部署应用程序的问题。这可能解释了为什么我们得到那些详细的错误消息。应用程序的调试模式处于开启状态,并且包含一个php调试栏。
通过访问其中一个端点触发错误,我们获得了调试栏的访问权限!
漏洞2:php调试栏暴露
这个漏洞让我们深入了解应用背后的代码、其设置和活动用户会话及其数据。我们可以监控端点https://api.zouikwatzeggen.nl/_debugbar/open?op=get
,无需身份验证,每隔几秒存储输出。这允许我们近乎实时地捕获员工发送的所有报告。
泄露管理员密码
如果系统管理员使用相同的Web应用程序访问管理面板,我们能够泄露密码吗?
通过监控服务器上的传入请求几小时,我们幸运地监控到管理员登录:
漏洞3:管理员用户名和密码泄露
我们现在证明了这个漏洞给了我们访问管理员仪表板所需的凭据。
时间线
- 2021年6月17日:首次宣布应用可用性;仅限学生
- 2022年9月7日:宣布应用可用性;所有15,000名员工
- 2022年9月12日:发现电子邮件欺骗漏洞,向CERT报告
- 2022年9月12日:发现PHP调试栏漏洞,向CERT报告
- 2022年9月12日:CERT在10分钟内回复确认漏洞
- 2022年9月13日:发现管理员凭据,向CERT报告
- 2022年9月13日:CERT确认泄露并命令供应商关闭服务器
可能的改进
如果认为有必要发布这样的应用,我建议做一些事情来限制出现问题时的爆炸半径。一个好的开始是对最敏感的数据实施客户端加密。
我们可以使用OpenPGP,这是一个开源的、经过实战检验的加密协议,允许在消息离开设备之前对其进行加密。目前应用中的消息被发送到外部供应商的Web服务器,从Web服务器到外部供应商的内部邮件服务器,并中继到AmsterdamUMC的电子邮件服务器。
透明度就是信任
我能够毫无问题地发布此博客的事实非常重要。多亏了协调漏洞披露(CVD)政策。像这样对漏洞保持沉默不是前进的方向。就像在医学中一样,我们都从别人犯的错误中学习。