该应用程序用于根据德国感染法追踪人员,以便追溯新冠肺炎感染链。它由名为iCampus的学生项目创建,不仅用于维尔道大学,还用于科特布斯-森夫滕贝格大学。大约有1万人受到影响。大学的访客需要使用此应用程序。
该应用程序由Vue前端和Laravel后端组成。后端公开了访客用户注册端点/corona-app-backend/api/account/register,允许大学的访客注册。大学的成员可以使用他们的单点登录用户名/密码组合登录。
该注册端点未针对自动创建用户(例如通过验证码)进行保护。一旦程序通过/corona-app-backend/sanctum/csrf-cookie获取csrf cookie,并通过/corona-app-backend/account获取会话令牌,它就可以创建用户。想创建多少就创建多少。想创建多久就创建多久。过多的虚假用户使得卫生组织几乎不可能追溯感染链,这构成了一种拒绝服务攻击类型。
用户注册是对注册端点的POST请求,包含csrf cookie和会话令牌,以及以下JSON负载:
{"first_name":"John","last_name":"Doe","telephone":"099182","email":null,"accept":true}
必须设置email或phone字段。这两个字段都不会被验证(除了语法检查)。
有了有效的用户会话,可以通过端点/corona-app-backend/api/visit创建访问(签到到房间)。访问是对访问端点的POST请求,包含csrf cookie和会话令牌,以及以下JSON负载:
{"room":"15-K01","visited_on":"2021-05-09T22:01:00.000Z","exited_on":"2021-05-10T21:59:00.000Z"}')
room字段的值可以从房间端点/corona-app-backend/api/rooms获取的列表中获得,该端点返回包含大学所有房间的JSON。只需csrf cookie和会话令牌即可成功调用。
该问题可以与CVE-2021-33840相类比,但更为严重。
此外,该应用程序在前后端部分不包含任何加密(除了通过HTTPS的传输加密)。后端接收未加密的JSON数据,并传递未加密的JSON数据。
用Perl语言编写的全自动漏洞利用代码创建了500个用户(从随机姓名数据库中选取),带有随机但看起来有效的电话号码,并且所有用户都签到到了同一个房间。完全自动化。为了不给服务器造成过载,并且不触发可能存在的任何保护机制,插入了每次请求5秒的延时。 该漏洞利用完全自动化运行成功,我在同一天将问题以及创建的虚假用户报告给了大学。
在选择房间之前,我确保该房间当天没有被访问过。这是可能的,因为应用程序包含一个计数器,显示用户在特定房间内接触过多少人。因此,如果一个人访问一个房间且该计数器为0,则说明在该时间段内没有其他人在那个房间。
该应用程序还受到CVE-2021-3129的远程代码执行漏洞的影响,我于2021年4月12日向大学报告了该漏洞。
当前问题于2021年5月31日报告。
对于这两份报告,我都在报告后的第二天收到了确认收据的电子邮件。之后我没有再收到任何其他信息。
对应用程序源代码的请求正在进行中。