在前端开发的世界里,看似普通的JavaScript文件,有时却隐藏着巨大的安全隐患。本文作者漫不经心地浏览JS文件,却意外揭开了一系列重大漏洞,从前端泄露内部结构到敏感后端数据泄露,这一系列问题值得我们深入探讨。

初遇端倪


作者最初只是漫不经心地浏览JavaScript文件,没有带着明确的目的,也没有太大的压力。在这种看似随意的浏览中,一个文件开始“说得太多”,从而引发了作者的关注。作者从最基础的收集数据开始,使用命令“cat alive.txt | gau | grep '\.js%s#39; > js_files.txt”来收集相关的JS文件,然后筛选出实际可以访问的地址“cat js_files.txt | httpx -mc 200 > live_js.txt”。这一阶段,作者并没有急于寻找漏洞,而是在熟悉目标系统,为后续的深入分析打下基础。
在收集和筛选的过程中,作者遵循着“先收集,后思考”的原则。这种谨慎的态度使得作者能够全面地了解目标系统的前端文件情况。通过这些基础操作,作者获取了大量的JS文件信息,为后续发现隐藏在其中的秘密做好了准备。这也提醒我们,在进行安全分析时,不能急于求成,而是要先对目标系统有一个全面的认识,才能更好地发现潜在的问题。

深入剖析




大多数人只是粗略浏览JS文件,而作者则会完整地阅读并保存它们。使用“cat live_js.txt | xargs -n1 -P10 curl -s > js_dump.txt”命令将JS文件完整保存下来。在阅读过程中,作者在类似“/static/app.bundle.9f3a1c.js”这样的版本化捆绑文件中,发现了重要信息,如“const API_BASE = "https://api.target.com/internal";”和“const INTERNAL_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...";”。这一发现令人惊讶,因为秘密不应该出现在前端代码中,但它们却实实在在地存在着。
作者在发现这些信息后,会停下来再读一遍,以确定这不是错觉。这体现了作者严谨的态度。前端代码中暴露内部API和长期有效令牌,这是一个严重的安全隐患。这也反映出在前端开发过程中,对代码的安全性审查存在不足。开发者可能没有充分意识到前端代码泄露对后端系统安全的潜在影响,从而导致了这些敏感信息的暴露。

绘制地图


有了JS代码之后,作者就无需猜测端点了。通过“grep -oP "https?://[^\"]+" js_dump.txt | sort -u”命令,输出了一系列后端端点,如“/internal/user/debug”“/internal/cache/refresh”“/internal/admin/export”等。看到这些“/internal/”前端代码,作者感到不安,因为这意味着前端泄露了内部结构。这表明前端代码不仅仅是展示页面的工具,它还可能泄露后端系统的重要信息,对后端系统的安全性造成威胁。
前端代码泄露内部结构,使得攻击者可以更容易地了解后端系统的架构和功能。这对于后端系统的安全来说是一个巨大的挑战。开发者在编写前端代码时,应该更加注意保护后端系统的信息,避免不必要的信息泄露。同时,安全测试人员也应该重视前端代码的审查,及时发现并修复这些潜在的安全问题。

令牌测试




作者没抱太大期望,但还是对令牌进行了测试。使用“curl -H "Authorization: Bearer
令牌的真实性和可用性,进一步凸显了前端代码泄露的严重性。开发者应该更加严格地管理令牌的使用和存储,避免将长期有效令牌暴露在前端代码中。同时,后端系统也应该加强对令牌的验证和管理,防止身份验证绕过等安全问题的发生。安全意识的提高对于保障系统的安全至关重要。

缓存危机


作者注意到“/internal/cache/refresh”这个端点存在问题。通过查看JS代码,发现“fetch(`/internal/cache/refresh?path=${userPath}`)”的使用方式,用户输入、缓存逻辑和无可见验证的组合通常不会有好结果。作者进行了测试,使用“curl -H "Authorization: Bearer
这一现象表明,后端缓存了完整的响应,缓存键完全取决于缓存path值。一旦这类数据被缓存,访问控制就不再重要了。这是因为缓存端点放大了错误,使得原本需要身份验证才能访问的敏感后端数据可以被无权限的用户访问。这也提醒我们,在设计缓存逻辑时,必须考虑安全因素,避免因缓存问题导致敏感数据泄露。

启示反思




这一系列的漏洞并非单个问题,而是前端泄露内部结构、JS中暴露的长期有效令牌、缓存刷新逻辑缺乏安全措施、身份验证绕过、敏感后端数据泄露等多个问题的综合体现。单独来看,其中一些问题或许微不足道,但综合起来就形成了一个严重的安全隐患。这告诉我们,在系统开发和安全管理中,不能忽视任何一个小问题,因为它们可能会相互影响,最终导致严重的后果。
作者从中得到了许多启示,如JavaScript文件比文档更能解释系统,前端代码泄露几乎总会对后端造成影响,缓存端点会放大错误,“内部”绝不应等同于“安全”。这些启示对于开发者和安全人员来说具有重要的指导意义。在今后的工作中,我们应该更加重视前端代码的安全性,加强对缓存端点的管理,提高安全意识,确保系统的安全稳定运行。

END