2

JWT 实现可能会受到不同的攻击,其中之一就是攻击(在此处alg:none查看更多详细信息)。

spring-security-jwt在我的 pom.xml 文件中使用了依赖项,但无法确定此实现是否处理了alg:none攻击。

Spring Security JWT 实现是否缓解了这种攻击?

4

1 回答 1

4

如果您使用的是 spring-security-oauth/spring-security-jwt 那么是的,这种攻击得到了缓解。根据您共享的链接,减轻这种攻击的一种方法是在选择算法时考虑带有标头的 JWT 令牌"alg":"none"无效或不依赖标头。alg

在spring-security-jwt文件的源代码中,方法中的JwtHelper在选择算法时decode不依赖头部。alg

public static Jwt decode(String token) {
    int firstPeriod = token.indexOf('.');
    int lastPeriod = token.lastIndexOf('.');

    if (firstPeriod <= 0 || lastPeriod <= firstPeriod) {
        throw new IllegalArgumentException("JWT must have 3 tokens");
    }
    CharBuffer buffer = CharBuffer.wrap(token, 0, firstPeriod);
    // TODO: Use a Reader which supports CharBuffer
    JwtHeader header = JwtHeaderHelper.create(buffer.toString());

    buffer.limit(lastPeriod).position(firstPeriod + 1);
    byte[] claims = b64UrlDecode(buffer);
    boolean emptyCrypto = lastPeriod == token.length() - 1;

    byte[] crypto;

    if (emptyCrypto) {
        if (!"none".equals(header.parameters.alg)) {
            throw new IllegalArgumentException(
                    "Signed or encrypted token must have non-empty crypto segment");
        }
        crypto = new byte[0];
    }
    else {
        buffer.limit(token.length()).position(lastPeriod + 1);
        crypto = b64UrlDecode(buffer);
    }
    return new JwtImpl(header, claims, crypto);
}

没有文档或漏洞汇编,spring-security-jwt但您可以查看下面的问题部分spring-security-jwt并报告您认为需要修补的任何漏洞。

于 2019-03-27T10:16:36.893 回答