CVE-2021-45232 Unauthorized Access
前几天网上爆出 Apache APISIX Dashboard 存在未授权访问漏洞,我也是在第一时间进行部署复现,但是由于一些原因到现在才写博客。
代码分析
首先打开在线编辑器 https://github.dev/apache/apisix-dashboard/releases/tag/v2.10 定位到路由处理的位置 /api/internal/route.go
factories := []handler.RegisterFactory{
route.NewHandler,
ssl.NewHandler,
consumer.NewHandler,
upstream.NewHandler,
service.NewHandler,
schema.NewHandler,
schema.NewSchemaHandler,
healthz.NewHandler,
authentication.NewHandler,
global_rule.NewHandler,
server_info.NewHandler,
label.NewHandler,
data_loader.NewHandler,
data_loader.NewImportHandler,
tool.NewHandler,
plugin_config.NewHandler,
migrate.NewHandler,
proto.NewHandler,
stream_route.NewHandler,
}
正常来说,要执行一段路由,会通过 github.com/shiningrush/droplet/wrapper/gin
的 Wrap 函数进行中间件操作,例如一下代码
r.POST("/apisix/admin/user/login", wgin.Wraps(h.userLogin,
wrapper.InputType(reflect.TypeOf(LoginInput{}))))
但是出问题的路由中并没有进行鉴权操作,从而导致了未授权漏洞,如下
func (h *Handler) ApplyRoute(r *gin.Engine) {
r.GET("/apisix/admin/***/*****", h.******)
r.POST("/apisix/admin/***/*****", h.******)
}