Invalid NSEC3 can cause OOB read of the isdelegation() stack

When .next_length is longer than NSEC3_MAX_HASH_LENGTH, it causes a
harmless out-of-bound read of the isdelegation() stack.  This patch
fixes the issue by skipping NSEC3 records with an oversized hash length
during validation.

(cherry picked from commit 67b4fb56e4)
This commit is contained in:
Ondřej Surý 2026-02-14 14:43:41 +01:00
parent aceaebe530
commit 368c75a9f5
No known key found for this signature in database
GPG key ID: 2820F37E873DEA41
2 changed files with 4 additions and 0 deletions

View file

@ -324,6 +324,7 @@ tostruct_nsec3(ARGS_TOSTRUCT) {
}
nsec3->mctx = mctx;
return ISC_R_SUCCESS;
cleanup:

View file

@ -339,6 +339,9 @@ trynsec3:
if (nsec3.hash != 1) {
continue;
}
if (nsec3.next_length > NSEC3_MAX_HASH_LENGTH) {
continue;
}
length = isc_iterated_hash(
hash, nsec3.hash, nsec3.iterations, nsec3.salt,
nsec3.salt_length, name->ndata, name->length);