CVE-2021-37580 Apache ShenYu 管理员认证绕过漏洞分析

VSole2021-11-18 12:03:43

漏洞信息

ShenYu(原名 Soul)是一款高性能,响应式的网关,同时也是应用于所有微服务场景的,可扩展、高性能、响应式的 API 网关解决方案。

该框架由于JWT认证的不正确使用,导致Apache ShenYu 2.3.0和2.4.0版本存在管理员认证绕过漏洞CVE-2021-37580。

环境搭建

项目地址为:

Apache ShenYu
https://github.com/apache/incubator-shenyu/releases

最近的三个发行版为2.4.1、2.4.0、2.3.0。

docker pull apache/shenyu-admin:2.4.0docker network create shenyudocker run -d -p 9095:9095 --net shenyu apache/shenyu-admin:2.4.0

使用`9095`端口登录系统,默认密码是`admin/123456`。

漏洞分析

根据漏洞信息,漏洞为JWT认证问题,当HTTP请求中包含`X-Access-Token`时,调用StatelessAuthFilter进行token校验,认证的框架是Apache Shiro。

下载2.4.0和2.4.1版本源代码进行补丁对比,最主要的更改位于`JwtUtils.java`。在JWT-token生成和校验时均使用generateAlgorithm函数获取秘钥,其中`JWT`和`JWTVerifier`使用的标准第三方库。

/* JwtUtils.java */    public static String generateToken(final String userName) {    try {        return JWT.create().withClaim("userName", userName).withExpiresAt(new Date()).sign(generateAlgorithm());    } catch (IllegalArgumentException | JWTCreationException e) {        log.error("JWTToken generate fail ", e);    }    return StringUtils.EMPTY_STRING;}
private static DecodedJWT verifierToken(final String token) {    DecodedJWT jwt = null;    try {        JWTVerifier verifier = JWT.require(generateAlgorithm()).build();        jwt = verifier.verify(token);    } catch (JWTVerificationException e) {        log.info("jwt decode fail, token: {} ", token, e);    }    return jwt;}
private static Algorithm generateAlgorithm() {    JwtProperties properties = SpringBeanUtils.getInstance().getBean(JwtProperties.class);    return Algorithm.HMAC256(properties.getKey());}

`generateAlgorithm`从`JwtProperties`中读取秘钥,但默认为空。

public class JwtProperties {    private String key;}

测试结果如下,代码中`salt`的值可以随意设置。

修复方式

在`generateToken`和`verifyToken`中添加手动设置秘钥。

在API中添加key的读取和认证。

漏洞apache
本作品采用《CC 协议》,转载必须注明作者和本文链接
近日,安识科技A-Team团队监测到一则 Apache 官方发布安全补丁的通告,共修复了2个安全漏洞,其中包含1个高危漏洞的信息。 对此,安识科技建议广大用户及时升级到安全版本,并做好资产自查以及预防工作,以免遭受黑客攻击。
2022年5月4日,Apache发布安全公告,修复了一个 Apache Jena中的XML外部实体注入漏洞漏洞编号:CVE-2022-28890,漏洞威胁等级:中危。
2022年4月26日,Apache发布安全公告,修复了一个 Apache CouchDB中的远程权限提升漏洞漏洞编号:CVE-2022-24706,漏洞威胁等级:高危,漏洞评分:7.5。
2022年4月26日,Apache发布安全公告,修复了一个 Apache Doris中的硬编码漏洞漏洞编号:CVE-2022-23942,漏洞威胁等级:中危。
2022年4月20日,Apache发布安全公告,修复了一个 Apache APISIX中的信息泄露漏洞漏洞编号: CVE-2022-29266,漏洞威胁等级:严重。
2022年4月20日,Apache发布安全公告,修复了一个 Apache APISIX中的信息泄露漏洞漏洞编号: CVE-2022-29266,漏洞威胁等级:严重。
2022年4月12日,Apache发布安全公告,修复了一个Apache Struts2 中的远程代码执行漏洞漏洞编号:CVE-2021-31805,漏洞威胁等级:高危,漏洞评分:8.5。
2022年1月21日,360漏洞云团队监测到Apache发布安全公告,修复了一个Apache ShardingSphere ElasticJob-UI中的信息泄露漏洞漏洞编号:CVE-2022-22733,漏洞威胁等级:中危。
2022年1月18日,360漏洞云团队监测到Apache Knox发布安全公告,修复了一个Apache Knox中的XSS漏洞漏洞编号:CVE-2021-42357,漏洞威胁等级:中危。
2022年1月4日,360漏洞云团队在互联网上监测到一则关于 Apache Geode 存在一个信息泄露漏洞的信息。漏洞编号:CVE-2021-34797,漏洞威胁等级:低危。
VSole
网络安全专家