Hello Apache Traffic Server maintainers,
I would like to report what appears to be a real current-head overflow in the primary-parent configuration parsing path. I rechecked current upstream head on 2026-03-10 before writing this report.
I want to be careful about scope: this is a local configuration parsing bug, not a remotely triggerable HTTP request bug.
The current code explicitly checks the hostname length:
if (tmp - current > MAXDNAME) {
errPtr = "Parent hostname is too long";
goto MERROR;
}
but then handles the optional &hash suffix with no analogous bound:
if (tmp3) {
memcpy(this->parents[i].hash_string, tmp3 + 1, strlen(tmp3));
this->parents[i].name = this->parents[i].hash_string;
}
The destination field is:
char hash_string[MAXDNAME + 1];
inside struct pRecord.
So current head already proves the intended maximum for the hostname field, but not for the hash suffix. If an administrator provides a parent entry with a very long &hash_string, the primary-parent branch copies strlen(tmp3) bytes starting at tmp3 + 1 into a fixed hash_string[MAXDNAME + 1] with no length check.
Why I do not think this is a false positive:
- the hostname check does not cover the
hash_string branch
pRecord objects are allocated in arrays, so overflowing the last field corrupts subsequent records
- the path is real config parsing in
ParentSelection, not a synthetic test
- the bug is visible directly in current-head code semantics
I am not claiming remote exploitability. The precise claim is: a crafted parent.config / parent-rule entry with an overlong &hash suffix overflows the primary hash_string field during configuration parsing.
The obvious fix is to apply a MAXDNAME bound to the hash_string suffix before the memcpy().
Best regards,
Pengpeng Hou
Hello Apache Traffic Server maintainers,
I would like to report what appears to be a real current-head overflow in the primary-parent configuration parsing path. I rechecked current upstream head on 2026-03-10 before writing this report.
I want to be careful about scope: this is a local configuration parsing bug, not a remotely triggerable HTTP request bug.
The current code explicitly checks the hostname length:
but then handles the optional
&hashsuffix with no analogous bound:The destination field is:
inside
struct pRecord.So current head already proves the intended maximum for the hostname field, but not for the hash suffix. If an administrator provides a parent entry with a very long
&hash_string, the primary-parent branch copiesstrlen(tmp3)bytes starting attmp3 + 1into a fixedhash_string[MAXDNAME + 1]with no length check.Why I do not think this is a false positive:
hash_stringbranchpRecordobjects are allocated in arrays, so overflowing the last field corrupts subsequent recordsParentSelection, not a synthetic testI am not claiming remote exploitability. The precise claim is: a crafted
parent.config/ parent-rule entry with an overlong&hashsuffix overflows the primaryhash_stringfield during configuration parsing.The obvious fix is to apply a
MAXDNAMEbound to thehash_stringsuffix before thememcpy().Best regards,
Pengpeng Hou