trojan多用户管理部署程序 Login bypass(CVE-2024-55215)

基本字段

漏洞编号:
SSV-99914
披露/发现时间:
未知
提交时间:
2025-02-08
漏洞等级:
漏洞类别:
登录绕过
影响组件:
Jrohy trojan
(trojan v.2.0.0 - v.2.15.3)
漏洞作者:
未知
提交者:
Knownsec
CVE-ID:
CVE-2024-55215
CNNVD-ID:
补充
CNVD-ID:
补充
ZoomEye Dork:
补充

来源

漏洞详情

贡献者 共获得  0KB

Jrohy/trojan Unauthorized modification of administrator password

中文版本(Chinese version)

Jrohy/trojan is an open source project based on Go to automatically deploy trojan services. Its web-side initialization interface /auth/register failed to close properly after user configuration, allowing unauthorized visitors to directly modify the administrator password.

Source Project:

Affected versions:

  • v2.0.0 - v2.15.3

Vulnerability Principle

Register the route and use the updateUser function to handle /auth/register requests

// https://github.com/Jrohy/trojan/tree/v2.15.3/web/auth.go#L155

func Auth(r *gin.Engine, timeout int) *jwt.GinJWTMiddleware {
    jwtInit(timeout)

    newInstall := gin.H{"code": 201, "message": "No administrator account found inside the database", "data": nil}
    r.NoRoute(authMiddleware.MiddlewareFunc(), func(c *gin.Context) {
        claims := jwt.ExtractClaims(c)
        fmt.Printf("NoRoute claims: %#v\n", claims)
        c.JSON(404, gin.H{"code": 404, "message": "Page not found"})
    })
    ...
    r.POST("/auth/register", updateUser)

Extract password from the request and pass it to SetValue

// https://github.com/Jrohy/trojan/tree/v2.15.3/web/auth.go#L113

func updateUser(c *gin.Context) {
    responseBody := controller.ResponseBody{Msg: "success"}
    defer controller.TimeCost(time.Now(), &responseBody)
    username := c.DefaultPostForm("username", "admin")
    pass := c.PostForm("password")
    err := core.SetValue(fmt.Sprintf("%s_pass", username), pass)
    if err != nil {
        responseBody.Msg = err.Error()
    }
    c.JSON(200, responseBody)
}

Update the database and write the new password

// https://github.com/Jrohy/trojan/tree/v2.15.3/core/leveldb.go#L30

func SetValue(key string, value string) error {
    db, err := leveldb.OpenFile(dbPath, nil)
    if err != nil {
        return err
    }
    defer db.Close()
    return db.Put([]byte(key), []byte(value), nil)
}

Proof of vulnerability

共 0  兑换了

PoC

暂无 PoC

参考链接

解决方案

临时解决方案

暂无临时解决方案

官方解决方案

暂无官方解决方案

防护方案

暂无防护方案

人气 4898
评论前需绑定手机 现在绑定

暂无评论

※本站提供的任何内容、代码与服务仅供学习,请勿用于非法用途,否则后果自负