开发者生态
morning
暴露 CBSE 屏幕标记门户中的严重漏洞
2026-05-26
1 阅读
dsr12
← 返回博客 暴露 CBSE 屏幕标记门户中的关键漏洞:从身份验证绕过到完全帐户接管 2026 年 5 月 22 日,我首先使用一次性 Reddit 帐户向 r/CBSE 发布了这些漏洞的粗略文章,但我认为在我自己的博客上发表适当的文章会是更好的归宿。可以在此处找到正在讨论此问题的推文(X 帖子)。这些漏洞最初于 2026 年 2 月 25 日发现,并立即报告给 CERT-In。什么是 CBSE 和屏幕标记?中等教育中央委员会 (CBSE) 是印度最大的国家教育委员会之一。它在印度政府的领导下运营,每年为数百万学生举办 10 级和 12 级董事会考试等主要考试。 CBSE 隶属于印度 28,000 多所学校以及国外数百所学校,这使其成为印度最具影响力的教育机构之一。每年,作为董事会考试过程的一部分,数以百万计的答卷将由数千名教师和考官进行评估。为了简化所有这一切,CBSE 已开始为 12 级董事会考试转向数字屏幕评分 (OSM) 系统(通告)。考官无需检查纸质答卷,而是登录在线门户,将答卷的扫描副本分配给他们进行评估。由于该平台被大量评估者使用并处理敏感的学术数据,因此其安全性确实很重要。该平台似乎是由 Coempt EduTeck Pvt Ltd 开发的,并且多个董事会和其他机构都使用同一个 OnMark 平台。在探索过程中,我发现 OSM 门户中存在几个严重漏洞,这些漏洞可能导致审查员帐户被完全接管。任何利用这些的人都可能篡改或破坏评分过程,这直接威胁到考试评估的完整性。在发布此博客之前,我向 CERT-In 报告了所有这些内容。查找漏洞 首先介绍一下我的背景。我是一名业余网络安全研究员,今年刚刚完成 12 级考试。我以前出于兴趣而做过错误赏金和安全工作,因此当 CBSE 推出 OSM 并且我注意到门户链接完全公开时,我的好奇心战胜了我。我打开了屏幕标记门户,开始处理 HTTP 请求以及我能看到的所有其他内容。登录页面要求提供三项信息:用户 ID、学校代码和密码,然后是 OTP 步骤。该屏幕看起来没有什么异常。当我停止查看页面并开始查看其背后的代码时,问题才出现。阅读 JavaScript 捆绑包 与大多数现代单页应用程序一样,该门户是一个 Angular 应用程序,它将其整个前端逻辑存储在一个捆绑的、缩小的 JavaScript 文件中。浏览器下载此文件并在本地运行它以渲染应用程序的每个屏幕。该捆绑包公开提供于:https://cbse.onmark.co.in/cbseevalweb/main.dc17c24606b3b008.js 任何人都可以请求它,无论是否登录。所以我把它打印得很漂亮并开始阅读。我在里面发现的东西非常可怕。漏洞 1:硬编码主密码 前端包内以纯文本形式存在硬编码主密码。不是哈希值,不是令牌引用,而是文字密码字符串,直接烘焙到客户端 JavaScript 中,发送到每个访问者的浏览器。围绕它的逻辑比泄漏本身更糟糕。当在登录表单中输入此主密码时,应用程序会自动填写 OTP 字段并完全绕过正常的身份验证流程。没有第二个需要清除的因素,也没有需要满足的服务器端检查。输入魔弦就足够了。要以特定考官身份登录,攻击者只需要:目标的用户 ID 和学校代码,这两者都是可公开获取的。主密码位于任何人都可以下载的 JS 文件中。有了这些,我就能够以考官身份登录(完全绕过 OTP/2FA 流程)并到达评估仪表板,我可以在其中查看和编辑分数。漏洞 2:OTP 验证完全在客户端完成 OTP 步骤结果完全是戏剧性的。当您触发身份验证时,服务器会将 OTP 发送回身份验证响应中,浏览器中运行的 JavaScript 会将您输入的内容与本地该值进行比较,然后再让您通过。想想这意味着什么。您应该证明您收到的秘密会直接传递给您的浏览器,然后浏览器会对自己的测试进行评分。任何观看网络选项卡的人都可以从响应中读取 OTP。由于比较发生在客户端代码中,因此您可以完全跳过表单,只需告诉应用程序检查已通过。在攻击者计算机上运行的安全控件根本不是控件。漏洞3:没有路由守卫,所以整个应用程序都是Walk-In 即使不考虑登录流程,应用程序的r