一线运维实战手记 · 云计算 · 数据库 · 故障排查
2026年9月18日

CVE-2026-93572 – ## Summary `RedisArrayAggregator` recently added `maxElements` and `maxNestedArrayDepth

未分类
📑 文章目录

## Summary

`RedisArrayAggregator` recently added `maxElements` and `maxNestedArrayDepth` limits to fix public Redis resource-exhaustion advisories. The limits are independent, but the allocator remains eager: every positive nested RESP array header creates `new ArrayList(length)` before any child element exists.

With the default constructor, an attacker can send nested array headers with length `1,000,000` until the default nesting limit of `1024` is reached. This can reserve up to `1,024,000,000` child slots from roughly 12 KB of RESP input. This is backing capacity, not logical list size: `ArrayList(int)` constructs an empty list with the specified initial capacity.

## Technical Details

Current `decodeRedisArrayHeader(…)` checks the two limits independently:

“`java
if (header.length() > maxElements) {
throw new CodecException(“this codec doesn’t support longer length than ” + maxElements);
}

if (depths.size() >= maxNestedArrayDepth) {
releaseAndClearDepths();
throw new CodecException(“max nested array depth exceeded: ” + maxNestedArrayDepth);
}
depths.push(new AggregateState((int) header.length()));
“`

`AggregateState` i