环境搭建
Gitea是从gogs衍生出的一个开源项目,是一个类似于Github、Gitlab的多用户Git仓库管理平台。
1.4.0版本中有一处逻辑错误,导致未授权用户可以目录穿越、读写文件、最终导致执行命令。
访问 127.0.0.1:3000


添加管理员的账号密码,其他选项默认就行,点击安装
添加新仓库


需要重启一次服务,P神博客里说是因为第一次的时候session并不是保存在文件中,而是内存中,所以需要重启一次
docker-compose restart
漏洞一:代码逻辑错误、没有做有效的鉴权
Modules/lfs/server.go
// post请求处理函数
func PostHandler(ctx *context.Context) {
if !setting.LFS.StartServer {
}
if !MetaMatcher(ctx.Req) {
}
rv := unpack(ctx)
repository, err := models.GetRepositoryByOwnerAndName(rv.User, rv.Repo)
// 关键错误逻辑,检查仓库权限
if !authenticate(ctx, repository, rv.Authorization, true) {
requireAuth(ctx)
}
meta, err := models.NewLFSMetaObject(&models.LFSMetaObject{
Oid: rv.Oid, Size: rv.Size, RepositoryID: repository.ID})
ctx.Resp.Header().Set("Content-Type", metaMediaType)
sentStatus := 202
contentStore := &ContentStore{
BasePath: setting.LFS.ContentPath}
ctx.Resp.WriteHeader(sentStatus)
}
// 鉴权函数
func authenticate(ctx *context.Context, repository *models.Repository, authorization string, requireWrite bool) bool {
accessMode := models.AccessModeRead
// 检查是不是私人仓库,requireWrite 默认是 true
if !repository.IsPrivate && !requireWrite {
return true
}
// 检查
if ctx.IsSigned {
accessCheck, _ := models.HasAccess(ctx

最低0.47元/天 解锁文章
1119

被折叠的 条评论
为什么被折叠?



