0x00 前言

首先介绍一下,一个是第三方插件引起的,另一个是官方的功能。这个第三方插件是由个人开发者通过阅读官方的开发文档来实现的,也算是这个博客系统的一个功能。而另一个则是官方的功能,危害可能并不大但对于企业站点可能就会有点影响(在获取到管理员邮箱的情况下,可以不断轰炸管理员的邮箱)

0x01 正文

友链自助提交插件(第三方插件)

漏洞复现

插件接口文档中发现了 发送邮箱验证码 这一功能,想着测试一下是不是存在邮箱轰炸漏洞

1.png

刚好之前有这个插件的授权,就用自己的网站进行了测试,果不其然,在burp当中抓包测试,发送10次数据包,同样的接收到了10个不同的验证码

2.png

3.png

功能点分析

前端源码,请求接口如下:

4.png

反编译的插件源码当中,位于

site/muyin/linksSubmit/utils/EmailService.class,类当中的sendEmail方法执行的代码中,从博客系统当中获取发送邮件服务的相关配置,这里构建好相关的类

5.png

再到下面进行发送

6.png

危害分析

这个过程中并没有任何校验,所以只要邮件服务配置存在,传入邮箱即可发送邮件,并且没有次数限制,可导致邮件轰炸,如果邮件服务使用的是云厂商具有额度的邮件推送等服务,就有可能导致额度在短时间内被刷完。

重置密码(官方功能)

漏洞复现

从上面第三方插件的案例,让我联想到了官方使用到邮件发送功能的场景,于是就找到了重置密码,但不同的是,这个有对传入的邮箱进行校验,如果存在才会发送邮件。

通过两次burp的intruder模块爆破,成功复现:7.png

8.png

功能点分析

application/src/main/java/run/halo/app/security/preauth/PreAuthEmailPasswordResetEndpoint.java,类当中的preAuthPasswordResetEndpoints方法监听了/password-reset/email路由。

9.png

而邮件重置密码是在这里,先对sendForm对象的数据进行验证,验证成功后就会调用后面的发送邮件

10.png

危害分析

这里的数据验证主要就是判断邮箱是否注册,如果未注册则不会有危害。但由于这是个博客系统,难免不留下一些联系方式,例如:友链、个人介绍mailto等,这里都可以获取到邮箱,也可以通过一些社工手段来获取到管理员的邮箱,这就有可能引起对管理员的骚扰(在管理员注册的邮箱与留下的邮箱一致的情况下);除此之外,它也可以导致在邮件服务是有额度的情况下,额度被耗尽的危害。

0x02 结尾

这次发现的两个漏洞成因主要都是程序设计不规范导致的,希望官方可以提供一个邮件发送的接口,在发送邮件前能够进行校验、限制次数等,也希望凌霞软件越来越好。